Summary

Two limits, two different jobs

The MCP server enforces a per-minute ceiling and a per-day quota, and they exist for unrelated reasons.

100 / minute — a safety limit

Stops a runaway agent loop. An LLM that decides to score every wallet on a leaderboard will issue calls as fast as the transport allows, and several of these tools sit in front of a Hyperliquid or vendor API with its own quota.

Daily quota — a commercial limit

Expresses what a tier paid for. This is the one that scales with the plan.
Enterprise is not exempt from the per-minute ceiling. An unmetered daily allowance is a commercial decision; a burst that trips a third party’s rate limiter is a technical failure regardless of who paid for it.

Window behaviour

The two windows behave differently, and the difference is deliberate:
  • The minute window slides. Timestamps are retained and expired individually, so 100 calls at 12:00:59 does not permit another 100 at 12:01:00.
  • The day window is fixed to UTC midnight.

Checking your budget before you spend it

Both counters are readable without consuming quota:
day.limit is the string "unlimited" on the enterprise tier. Call whoami to read your tier and current usage.
Check the counters before a fan-out, not after a failure. An agent that discovers the ceiling by hitting it has already burned the calls that mattered.

When you exceed a limit

Requests are refused with an error, never silently truncated — a partial result presented as a complete one is worse than an error.
Both messages state the limit, the tier it came from, and when it resets, so an agent can back off correctly rather than retrying blind.
The rate limiter is checked before the call is dispatched and the counter is incremented on refusal too — a caller hammering a limit must not get free retries by failing.

Caching on public endpoints

Public endpoints are uncapped but cached. Two exceptions worth knowing:
  • /api/signals/verify/{id} is never cached (revalidate = 0). A verification is a claim about a record’s state right now; serving a five-minute-old reproducible: true for a record that has since changed is precisely the failure the endpoint exists to detect.
  • Everything else carries Cache-Control: public, max-age=300, stale-while-revalidate=3600.
Polling faster than 300s returns cached bytes and gains you nothing.
Scienter publishes impersonal market signals of general and regular circulation. Nothing here is investment, legal, or tax advice, or a recommendation to buy, sell, or hold any asset. Scienter is not a registered investment adviser or broker-dealer. Trading digital assets can result in the total loss of your funds — see Disclaimers for the full text.