Hyperliquid (Free)
Hyperliquid, free and non-gated: live perp + spot markets, prices, L2 orderbooks, candles, funding (with cross-venue predictions), and the full per-address account surface — positions, margin, PnL, open orders, fills, USDC ledger — plus await_settlement, a real-time WebSocket watch that returns the moment an order fills. Read-only by construction (never touches /exchange, nothing signable). Rate-limited. By Yeetful.
Routability
can the router discover, pick, and call it?14 checks
- schema · 12 endpoints are planner-eligible
- schema · param-schema coverage 13/13 endpoints (100%)
- schema · typed params 31/31
- schema · required flags present
- description · 12/12 endpoint descriptions carry real intent
- description · capability tags: trading, perps, spot, funding, portfolio
- description · 3 example queries
- probe · https://hyperliquid-mcp.yeetful.com/mcp → HTTP 200
- planner · "what are my positions on Hyperliquid?" → picked + constructed (tools/call)
- planner · "what's the BTC funding rate?" → picked + constructed (tools/call)
- planner · "show the HYPE/USDC orderbook" → picked + constructed (tools/call)
- affordances · identity params documented for context vars ($USER_ADDRESS)
- affordances · no escape-hatch tool — every uncovered filter needs a new endpoint (whack-a-mole)
- affordances · signing hygiene: build-don't-execute language (or no signables)
Suggested fixes
- Consider ONE guarded general-query tool exposing the backend's native query language (see snapshot-free graphql_query) so long-tail intents need no new endpoints.
Fix it with Claude Code
Paste this into Claude Code inside the MCP’s repo — it carries the failing checks, the fix list, and the conventions the router grades against.
You are upgrading the MCP service "Hyperliquid (Free)" so an AI router can reliably discover, choose, and call its tools. Yeetful's Reason Router just graded it 98/100 (A). I'll point you at the service's codebase; audit it against the findings below and implement the fixes.
## Failing checks
affordances (80%):
- no escape-hatch tool — every uncovered filter needs a new endpoint (whack-a-mole)
## Fixes, in priority order
1. Consider ONE guarded general-query tool exposing the backend's native query language (see snapshot-free graphql_query) so long-tail intents need no new endpoints.
## The conventions to build to (what the router needs)
- **Param schemas on every tool/endpoint**: name, type, required-vs-optional, and a description per param. A router refuses to construct calls it cannot validate — schema-less endpoints are invisible.
- **Descriptions that carry user intent**: write what a USER would ask ('crypto spot price by symbol — price of ETH, BTC…'), never what the URL is. Include 2–3 example queries.
- **One guarded escape hatch instead of endless params**: if the backend has a native query language (GraphQL/SQL), expose ONE read-only general-query tool with strict guardrails (single read-only operation, allowlisted root fields, depth + page-size caps, response truncation) and a compact schema card in the tool description (root fields + useful filters + one example). Long-tail intents then need no new endpoints.
- **Declare user-identity params**: any param that should be the CALLER's own address (their votes, follows, balances, orders) must say so in its description ('the user's own wallet address') so routers can inject identity server-side instead of guessing.
- **Server-side joins for the headline intent**: if answering the #1 user question takes two chained calls (e.g. resolve follows → filter proposals), add one param that does the join server-side.
- **Build, don't execute**: anything signable returns an UNSIGNED payload (typed data / tx template) for the user's own wallet. Never hold keys, never sign, never submit on the user's behalf.
- **Free tiers still need rate limiting**: no payment gate means no natural throttle.
Start by reading the tool/endpoint definitions and their input schemas, then apply the fixes smallest-first. After each change, restate which failing check it clears.
Audit before you build: if a fix describes a capability the service ALREADY provides (e.g. an escape hatch or identity param that exists but the grader missed), do NOT duplicate it — say so, skip it, and note it back as a likely router-side scoring gap on Yeetful rather than an MCP deficiency. Only change what this service actually controls.Tools
13- POST/mcp/marketsstart herevia Yeetful (free)hyperliquid-mcp.yeetful.com
Hyperliquid perpetual markets: mark/mid/oracle price, 24h change + volume, open interest (USD), hourly + annualized funding, max leverage. Default = top markets by 24h volume; pass coins for specific ones. Answers "what's trading on Hyperliquid" / "BTC funding rate".
2 parameters
- coinsstringbody
Coin filter, comma-separated, e.g. "BTC,ETH". Spot pairs like "PURR/USDC" or bare "PURR" also resolve.
- firstnumberbody
How many to return (default ~20, max 100).
- POST/mcp/candlesstart herevia Yeetful (free)hyperliquid-mcp.yeetful.com
OHLCV candle history for one coin (perp or spot). Choose an interval and either hoursBack (default 24) or explicit startTime/endTime (ms). Keep interval × window sane — the response is capped.
5 parameters
- coinstringbodyrequired
Coin: perp name ("BTC") or spot pair ("HYPE/USDC").
- intervalstringbodyrequired
Candle interval: 1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d 3d 1w 1M.
- hoursBacknumberbody
Lookback window in hours (default 24).
- startTimenumberbody
Window start, ms since epoch (overrides hoursBack).
- endTimenumberbody
Window end, ms since epoch (default now).
- POST/mcp/portfoliostart herevia Yeetful (free)hyperliquid-mcp.yeetful.com
Full Hyperliquid account view for an address: perp positions (size, entry, liquidation px, unrealized PnL, leverage), margin + withdrawable USDC, spot balances, and day/week/month/all-time PnL. THE tool for "what are my positions" / "how is my account doing" (user:"$USER_ADDRESS").
1 parameter
- userstringbodyrequired
EVM address (0x…) of the Hyperliquid account — for the connected user's own portfolio/orders/fills use "$USER_ADDRESS".
- POST/mcp/spot_marketsvia Yeetful (free)hyperliquid-mcp.yeetful.com
Hyperliquid spot pairs (HYPE/USDC, PURR/USDC, …): mark/mid price, 24h change + volume. Native '@N' pair names are resolved to token names; the returned nativeName is what orderbook/candles/await_settlement expect for spot coins.
2 parameters
- coinsstringbody
Coin filter, comma-separated, e.g. "BTC,ETH". Spot pairs like "PURR/USDC" or bare "PURR" also resolve.
- firstnumberbody
How many to return (default ~20, max 100).
- POST/mcp/pricevia Yeetful (free)hyperliquid-mcp.yeetful.com
Live mid prices. With coins, resolves perp names (BTC) and spot aliases (PURR, HYPE/USDC) in one call — the cheapest way to answer "what's ETH at?". Without coins, returns all perp mids.
1 parameter
- coinsstringbody
Coin filter, comma-separated, e.g. "BTC,ETH". Spot pairs like "PURR/USDC" or bare "PURR" also resolve.
- POST/mcp/orderbookvia Yeetful (free)hyperliquid-mcp.yeetful.com
L2 orderbook for one coin (perp or spot): best bid/ask, mid, spread %, and up to 20 aggregated levels per side.
3 parameters
- coinstringbodyrequired
Coin: perp name ("ETH") or spot pair ("HYPE/USDC", "@107").
- depthnumberbody
Levels per side (default 10, max 20).
- nSigFigsnumberbody
Aggregate price levels to N significant figures (2–5; omit for full precision).
- POST/mcp/fundingvia Yeetful (free)hyperliquid-mcp.yeetful.com
Funding for one perp: recent hourly funding history plus the PREDICTED next rate on Hyperliquid vs Binance/Bybit (cross-venue basis). Rates are hourly fractions — ×24×365 for APR.
2 parameters
- coinstringbodyrequired
Perp coin name, e.g. "ETH".
- hoursBacknumberbody
History window in hours (default 24).
- POST/mcp/open_ordersvia Yeetful (free)hyperliquid-mcp.yeetful.com
An address's resting orders with full detail: side, size, limit price, order type, trigger/TP-SL info, reduce-only flag, oid + cloid. Answers "what orders do I have open?" (user:"$USER_ADDRESS").
1 parameter
- userstringbodyrequired
EVM address (0x…) of the Hyperliquid account — for the connected user's own portfolio/orders/fills use "$USER_ADDRESS".
- POST/mcp/fillsvia Yeetful (free)hyperliquid-mcp.yeetful.com
An address's executed trades (fills): price, size, side, direction (Open Long / Close Short…), closed PnL, fee, oid, tx hash. Most recent first; optionally time-bounded. Answers "what did I trade today?" / "did my order execute?".
4 parameters
- userstringbodyrequired
EVM address (0x…) of the Hyperliquid account — for the connected user's own portfolio/orders/fills use "$USER_ADDRESS".
- startTimenumberbody
Only fills at/after this ms timestamp.
- endTimenumberbody
Only fills at/before this ms timestamp.
- firstnumberbody
How many to return (default ~20, max 100).
- POST/mcp/order_statusvia Yeetful (free)hyperliquid-mcp.yeetful.com
Status of ONE order by oid or cloid: open / filled / canceled / rejected (+ the order's details and status timestamp). For live "tell me when it settles", use await_settlement instead.
2 parameters
- userstringbodyrequired
EVM address (0x…) of the Hyperliquid account — for the connected user's own portfolio/orders/fills use "$USER_ADDRESS".
- oidstringbodyrequired
Order id: the numeric oid from open_orders/fills, or the 0x… cloid.
- POST/mcp/ledgervia Yeetful (free)hyperliquid-mcp.yeetful.com
An address's USDC ledger: kind=funding for funding payments paid/received per position, kind=transfers for deposits, withdrawals, transfers and liquidations. Defaults to the last 7 days.
4 parameters
- userstringbodyrequired
EVM address (0x…) of the Hyperliquid account — for the connected user's own portfolio/orders/fills use "$USER_ADDRESS".
- kindstringbodyrequired
"funding" = funding payments; "transfers" = deposits/withdrawals/transfers/liquidations.
- startTimenumberbody
Window start, ms since epoch (default 7 days ago).
- endTimenumberbody
Window end, ms since epoch (default now).
- POST/mcp/await_settlementvia Yeetful (free)hyperliquid-mcp.yeetful.com
BLOCK until an order settles, then report it — the real-time "did it go through?" tool. Subscribes to the address's fills + order updates over WebSocket and returns as soon as a matching fill or terminal status lands, or after timeoutSeconds (default 30, max 45). With oid it watches that order (checking first whether it ALREADY settled); with just coin or nothing it resolves on the address's next fill.
4 parameters
- userstringbodyrequired
EVM address (0x…) of the Hyperliquid account — for the connected user's own portfolio/orders/fills use "$USER_ADDRESS".
- oidstringbody
Order id to watch: numeric oid or 0x… cloid (optional).
- coinstringbody
Only settle on events for this coin (perp name or spot nativeName).
- timeoutSecondsnumberbody
Max seconds to wait (default 30, max 45).
- POST/mcp/info_queryvia Yeetful (free)hyperliquid-mcp.yeetful.com
Escape hatch: run any READ-ONLY Hyperliquid /info request for data the other tools don't cover (vaults, staking, fees, sub-accounts, TWAP fills…). Pass the JSON body, e.g. {"type":"userFees","user":"$USER_ADDRESS"}. Allowlisted types only; read-only by construction.
1 parameter
- requeststringbodyrequired
The /info request body as JSON, e.g. {"type":"vaultDetails","vaultAddress":"0x…"}.