Cross-sectional funding-carry rankings for Hyperliquid perpetuals, sold per call in USDC via x402 protocol
Six tools with clear, domain-specific descriptions (50 - 150 chars each) and explicit input schemas. Naming is consistent (carry_*) and action-oriented. However, parameter descriptions are sparse or missing entirely for most tools. Output schemas are undocumented, LLMs cannot predict what fields to expect. Error handling is present (402, 503 status codes) but lacks actionable recovery guidance. No tool annotations (readOnlyHint, destructiveHint). Tools are READ_ONLY by design, which is good for safety, but this is not declared in the schema.
FREE. Service health and data freshness.
PAID (~$0.02 USDC). Archived rank and trailing funding history for one coin, from carrydesk's own published snapshots. Use to check whether a coin's carry is persistent or a one-day artifact.
FREE. How the carry ranking is computed -- universe filter, lookback, leg construction -- and the caveats that matter before anyone trades on it. Read this before presenting the numbers as actionable.
PAID (~$0.05 USDC). Full live cross-sectional funding-carry ranking across every liquid Hyperliquid perp: trailing 14d mean funding annualized, rank, long/short leg and dollar-neutral weights, plus outlier-robust spread variants. Set k to change coins per leg (1-20).
FREE. Cross-sectional funding-carry snapshot for Hyperliquid perps: the top 5 coins on each leg (long = market pays you to hold, short = you get paid to short) plus the carry spread. Delayed 24h. Use this first.
PAID (~$0.01 USDC). The liquid Hyperliquid perp universe sorted by daily notional volume, with open interest, mark price and current funding.
Output schemas completely undocumented. Tools return JSON but LLMs cannot predict field names, types, or structure. carry_method, carry_health, carry_universe have no documented return schema.
Parameter descriptions missing or minimal. carry_snapshot and carry_health have empty input schemas ({}), but no description explains what they return or when to use them. carry_rankings and carry_history have parameters (k, min_volume, coin, days) but descriptions are terse and lack constraints (e.g., 'k' is 1-20 but no guidance on what values mean).
No tool annotations. All tools are READ_ONLY (no state mutation), but this is not declared via readOnlyHint in the schema. LLMs cannot infer safety properties and may treat these as potentially destructive.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Error handling lacks actionable recovery guidance. 402 and 503 responses return structured error objects, but no guidance on what the LLM should do next (retry? call alternative? ask user?). Error messages are generic ('payment_required', 'upstream_unavailable').
Parameter constraints not formalized. 'k' accepts 1-20 but is described as 'Number of coins per leg (1-20)', no enum, no min/max in schema. 'min_volume' is a number with no bounds. LLMs may pass invalid values.