Skip to main content
Glama
nexus-xyz

nexus-exchange-mcp

Official
by nexus-xyz

Nexus Exchange MCP Server

License

An MCP server that exposes the Nexus Exchange API as tools an AI agent (Claude Desktop / Claude Code) can call to read market data and place trades.

It talks to the real, public exchange gateway. Market-data and demo tools work with zero configuration; account and trading tools use HMAC API credentials read from environment variables.

What works today

Every tool sends the spec's bare path (/orders) to one REST base: the spec's /v1 base on the public testnet host (https://api.testnet.nexus.xyz/v1), and the origin on a bare indexer such as local. The bridge tools are the one exception while the pinned spec lacks their bare twins. See "REST base and paths" below.

Tool

Status

Endpoint (surface)

fetch_markets_summary

✅ Live (public)

GET /markets/summary

fetch_markets

✅ Live (public)

GET /markets

fetch_ticker

✅ Live (public)

GET /markets/{id}/ticker

fetch_tickers

✅ Live (public)

GET /tickers

fetch_order_book

✅ Live (public)

GET /markets/{id}/orderbook

fetch_mark_price

✅ Live (public)

GET /markets/{id}/mark-price

fetch_market_status

✅ Live (public)

GET /markets/{id}/status

fetch_trades

✅ Live (public)

GET /markets/{id}/trades

fetch_ohlcv

✅ Live (public)

GET /markets/{id}/candles

fetch_funding_rate_history

✅ Live (public)

GET /markets/{id}/funding

fetch_funding_samples

✅ Live (public)

GET /markets/{id}/funding-samples

fetch_market_risk_params

✅ Live (public)

GET /markets/{id}/risk-params

fetch_stats

✅ Live (public)

GET /stats

fetch_stats_history

✅ Live (public)

GET /stats/history

get_demo_account

✅ Live (public)

GET /demo/account

get_demo_positions

✅ Live (public)

GET /demo/positions

get_demo_orders

✅ Live (public)

GET /demo/orders

fetch_balance

✅ Live (needs key)

GET /account

fetch_account_summary

✅ Live (needs key)

GET /account/summary

fetch_account_state

✅ Live (needs key)

GET /account/state

fetch_trading_fees

✅ Live (needs key)

GET /account/fees

fetch_portfolio_history

✅ Live (needs key)

GET /account/portfolio-history

fetch_equity_history

✅ Live (needs key)

GET /account/equity-history

fetch_positions

✅ Live (needs key)

GET /positions

fetch_positions_history

✅ Live (needs key)

GET /positions/closed

fetch_open_orders

✅ Live (needs key)

GET /orders

fetch_order

✅ Live (needs key)

GET /orders/{id}

fetch_orders

✅ Live (needs key)

GET /orders/history

fetch_my_trades

✅ Live (needs key)

GET /fills

fetch_funding_history

✅ Live (needs key)

GET /funding

fetch_withdrawals

✅ Live (needs key)

GET /withdrawals

fetch_deposits

✅ Live (needs key)

GET /deposits

fetch_rate_limit_status

✅ Live (needs key)

GET /account/rate-limit

fetch_cancel_on_disconnect

✅ Live (needs key)

GET /account/cancel-on-disconnect

set_cancel_on_disconnect

✅ Live (needs key)

PUT /account/cancel-on-disconnect

fetch_adl_history

✅ Live (needs key)

GET /account/{addr}/adl-history

fetch_adl_events

✅ Live (needs key)

GET /markets/{id}/adl-events

create_order

✅ Live (needs key)

POST /orders

create_orders

✅ Live (needs key)

POST /orders/batch

edit_order

✅ Live (needs key)

PATCH /orders/{id}

preview_order

✅ Live (needs key)

POST /orders/preview

cancel_order

✅ Live (needs key)

DELETE /orders/{id}

cancel_all_orders

✅ Live (needs key)

DELETE /orders

deposit

✅ Live (needs key)

POST /account/deposit

create_deposit

✅ Live (needs key)

POST /deposits

claim_credit

✅ Live (needs key)

POST /account/credit

claim_faucet

✅ Live (needs key)

POST /faucet

add_margin

✅ Live (needs key)

POST /account/margin

fetch_bridge_assets

✅ Live (public)

GET /api/v1/bridge/assets

create_bridge_deposit_address

⛔ Deprecated — route not served (ENG-11460)

POST /api/v1/bridge/deposit-addresses

list_bridge_deposit_addresses

⛔ Deprecated — route not served (ENG-11460)

GET /api/v1/bridge/deposit-addresses

fetch_bridge_deposits

✅ Live (needs key)

GET /api/v1/bridge/deposits

fetch_bridge_deposit

✅ Live (needs key)

GET /api/v1/bridge/deposits/{id}

create_bridge_wallet_challenge

✅ Live (needs key)

POST /api/v1/bridge/wallets/challenge

register_bridge_wallet

✅ Live (needs key + EIP-191 sig or own wallet)

POST /api/v1/bridge/wallets

list_bridge_wallets

✅ Live (needs key)

GET /api/v1/bridge/wallets

fetch_agents

✅ Live (needs key)

GET /agents

register_agent

✅ Live (EIP-712 signature or own wallet)

POST /agents/register

revoke_agent

✅ Live (EIP-712 signature or own wallet)

DELETE /agents/{addr}

create_wallet

✅ Live (stdio, play funds only)

none (local key)

login

✅ Live (EIP-191 signature or own wallet)

POST /auth/login

fetch_api_keys

✅ Live (needs session token)

GET /keys

create_api_key

✅ Live (needs session token)

POST /keys

delete_api_key

✅ Live (needs session token)

DELETE /keys/{key_id}

create_ws_token

✅ Live (needs key)

POST /ws/token

create_ws_token_legacy

✅ Live (needs key)

POST /ws-tokens

fetch_status

✅ Live (public)

GET /status

fetch_tiers

🔒 Admin (opt-in, see below)

GET /admin/tiers

set_tier

🔒 Admin (opt-in, see below)

PUT /admin/tiers

delete_tier

🔒 Admin (opt-in, see below)

DELETE /admin/tiers/{addr}

get_deposit_target

🚧 Pending — server-side endpoint not built yet

none yet

get_deposit_target is wired into the agent flow but returns a clear not_yet_available message rather than faking a result. The bridge deposit-address tools (create_bridge_deposit_address / list_bridge_deposit_addresses) were meant to supersede it, but they are deprecated: no server implements /api/v1/bridge/deposit-addresses (its design was cancelled with ENG-11460), so every call fails.

Tool names

Each tool is named snake_case of the spec operationId it calls, with the direct-indexer V1 suffix dropped (fetchOrderBookV1 → fetch_order_book), so the name an agent picks matches the operation and the other SDKs (R2.25, ENG-17742). scripts/check_spec_drift.py enforces it.

The previous names (list_markets, get_ticker, place_order, …) stay registered for one minor release as deprecated aliases: each forwards to the same handler, and its description starts with Deprecated: use `<new name>`. The full map is DEPRECATED_ALIASES in src/tools/index.ts. Two changes are not plain renames:

  • list_markets keeps returning the markets summary (GET /markets/summary), so it aliases fetch_markets_summary. The static specs (GET /markets, formerly list_market_specs) are fetch_markets.

  • cancel_order now cancels one order only. The account-wide cancel it used to do with cancel_all: true is cancel_all_orders, which requires confirm: true.

REST base and paths

Per EDR-006 (ENG-17186, ENG-18323) every request is the spec's bare path under one REST base: sent as /v1/orders on the public testnet host, signed as /orders.

  • One base. https://api.testnet.nexus.xyz/v1 on testnet, and the bare origin (http://localhost:9090) on an indexer that serves at its root, like local. The /v1 is the published prefix the edge strips before the indexer sees the request, so copy the base whole rather than trimming it to the hostname: the bare host routes nothing and answers 404. A NEXUS_EXCHANGE_API_URL that still ends in /api/exchange is accepted and normalized, so it cannot double up. Which host that is comes from the network axis, and a named network keeps its own gateway path when NEXUS_EXCHANGE_API_URL only redirects the host.

  • HMAC signs the bare path (/orders). The base's own prefix is not signed over, so the signed path and the wire path differ by that prefix; see Authentication.

  • The bridge is the one exception. The pinned spec (v0.8.1) declares the bridge operations only under /api/v1/bridge/*, so those tools still send /v1/api/v1/bridge/... and sign /api/v1/bridge/..., which routes and verifies. They move to bare paths once a published spec carries the bare twins (ENG-18318 added them upstream).

  • cancel_order requires market_id. cancel_all_orders takes an optional market_id to scope a mass-cancel to one market.

API-surface coverage

71 registered tools (plus 48 deprecated aliases, see Tool names) covering 66 spec operations of Exchange API spec v0.8.1. Those are two different numbers and neither substitutes for the other: an alias calls the same operation as its canonical tool, and two tools call none. The operation count is the figure comparable with the rs / py / cli SDK manifests; the tool count is MCP's own axis and must never be reported as a coverage figure. docs/coverage-unit.md records that decision and how it is enforced.

66 of the 68 distinct operations, or 66 of the 101 the spec literally documents — the spec lists most operations twice, once on the legacy gateway route and once on its /api/v1 alias, and each aliased pair is one tool.

The operation list is not hand-counted: endpoints.txt is generated from the per-tool ops declarations in src/tools/index.ts and verified against the pinned spec on every PR by scripts/check_spec_drift.py (see Spec drift).

The pin bump (ENG-6038) was pin-only — it advanced .api-version v0.6.2 → v0.7.1 without mapping the surface those releases had added. ENG-6136 then exposed those additions as tools, and ENG-6461 advanced the pin to v0.7.2 together with the portfolio-parity surface it added. ENG-9342 then advanced it to v0.7.3, pin-only again; the three routes that release added are mapped here (ENG-9202, below), leaving only the field-level half of ENG-9636. ENG-10482 then advanced the pin to v0.8.1, which added and removed no route: both tags document the same 101 operations, and all 92 documented 2xx bodies stay application/json. That is why neither pin bump moved the counts by itself — not that the two releases were empty. v0.8.x did change schemas on routes this server already maps, and the additions it does not expose are listed after the list below. Below, the spec version each addition shipped in is noted:

  • Portfolio parity (v0.7.2) — fetch_portfolio_history (GET /account/portfolio-history: equity + PnL + volume series over a day/week/month/all window), fetch_account_state (GET /account/state: summary + open positions from one coherent read), and fetch_trading_fees (GET /account/fees: effective maker/taker bps, tier, rolling 30d volume, discounts). The same release enriched the Position schema — notional_value, margin_used, roe, max_leverage, and leverage, each nullable with a <field>_error companion, plus the always-present funding_paid (no _error companion: its "0" is a real zero, not unknown) — and added withdrawable to the portfolio summary; those are response-shape additions on already-mapped routes, so they change no route count — the tools that return them (fetch_balance, fetch_positions, fetch_account_state, fetch_account_summary) call them out in their descriptions instead.

  • Account cancel-on-disconnect (v0.7.1) — fetch_cancel_on_disconnect / set_cancel_on_disconnect (GET / PUT /account/cancel-on-disconnect).

  • /api/v1/bridge Phase A (v0.7.1) — fetch_bridge_assets (public catalog), create_bridge_deposit_address, list_bridge_deposit_addresses, fetch_bridge_deposits, and fetch_bridge_deposit (five operations).

  • Registered withdrawal wallets (v0.7.3, ENG-8902) — create_bridge_wallet_challenge, register_bridge_wallet, and list_bridge_wallets (POST /api/v1/bridge/wallets/challenge, POST / GET /api/v1/bridge/wallets). Unlike a schema-only addition these are /api/v1-native with no legacy alias, so they raised the denominator: the v0.7.2 → v0.7.3 pin bump (ENG-9342) moved it from 65 distinct operations to 68 while coverage stayed at 63. Mapping them here closes that gap. Registration is two-step and stateless — the challenge returns a message bound to the account and the address, and register_bridge_wallet echoes it back with the wallet's EIP-191 signature over it. The challenge is not a nonce: until it expires the same signature can be resubmitted, which is a no-op because it only re-registers the same address for the same account. The account holds one wallet in this cut and it cannot be replaced — a different address is refused with 409 wallet_already_registered — so register_bridge_wallet is funds-guarded and additionally requires confirm: true.

  • Conditional order types (v0.7.0) — create_order / create_orders / preview_order now map all six conditional order_types in addition to limit / market: stop-loss (stop_limit / stop_market), take-profit (take_profit_limit / take_profit_market), and trailing (trailing_stop / trailing_limit), via the trigger_price, trailing_offset_bps, and limit_offset_bps fields. These are a schema addition on the already-mapped order endpoint, so they change no route count — which is why the pin bump's operation-count metric never surfaced the gap.

Every operation this server can map is now mapped (ENG-9202). The 2 remaining are unmapped by design — the WebSocket upgrade endpoints GET /ws and GET /stream: a request/response MCP tool cannot hold a streaming socket open, so the server instead mints the auth token (create_ws_token / create_ws_token_legacy) the caller uses to connect to them directly. That is a decision, not a backlog item, and it is recorded as such in NON_SPEC_TARGETS' neighbouring note in scripts/check_spec_drift.py; the checker keeps printing them so the exclusion stays visible rather than becoming invisible once it is deliberate.

The v0.7.2 cursor query parameter (ENG-5506) is now exposed on the five paginated list tools — see "Pagination" below. It adds no route, so the operation count above is unaffected.

Two optional request fields are documented but not exposed, and neither affects the operation count. v0.7.3 documents max_slippage_bps on create_order, create_orders, and preview_order (ENG-7550) — note the engine has always accepted and enforced it (the fill VWAP is bounded against the mid captured at submission, and the remainder cancels when the cap would be crossed); v0.7.3 puts it on the public contract rather than introducing it, so this is exposure work, not a new capability. It adds no route, so ENG-9202 did not cover it; it remains the field-level half of ENG-9636.

v0.8.0 documents the optional stp field on those same three order tools — the public exposure ENG-5022 asked for. It is opt-in self-trade prevention, one of CancelNewest, CancelOldest or DecrementAndCancel, where omitted or null means self-matching is allowed: that is the default and the industry-standard behaviour, so a caller who never sets it is unaffected. The engine has always accepted it, so this too is exposure work rather than a new capability. The same release added two read-only companions on Order that this server does not surface either — stp echoes back the mode an order was placed with, and cancellation_reason reports why a terminal order was cancelled (null, a bare string, or a single-key object such as {"Stp": "CancelOldest"}). None of the three adds a route. ENG-9636 is scoped to the v0.7.3 surface and does not cover them; the v0.8.x surface needs its own follow-up.

One already-mapped route did change its response body: v0.8.1 repointed both funding-samples operations from FundingSample to a new FundingPremiumSample carrying only timestamp and premium_index. FundingSample is otherwise unchanged and still serves GET /markets/{market_id}/funding, so this is a schema repoint rather than a property removal — but the effect on the funding-samples body is that funding_rate, mark_price and oracle_price are gone from it. fetch_funding_samples describes the series and never named those keys, and nothing in this repo reads them, so no tool description drifted.

Reconciling the liveness surface: v0.7.0 removed the standalone /health and /ready routes from the public contract (only /status remains), so the former get_health / get_readiness tools — which called routes the pinned spec no longer documents — were dropped in favour of the surviving fetch_status (/status).

Pagination

Five list tools are cursor-paginated (spec v0.7.2, ENG-5506):

Tool

Endpoint

limit max

fetch_trades

GET /markets/{id}/trades

1000

fetch_my_trades

GET /fills

1000

fetch_orders

GET /orders/history

500

fetch_positions_history

GET /positions/closed

200

fetch_equity_history

GET /account/equity-history

720

Each returns an envelope, not a bare array:

{ "items": [ … ], "next_cursor": "opaque-token" }

The agent drives the loop: call once with no cursor, then call again with cursor: <previous next_cursor>, and stop when next_cursor is null. Server state rides in the X-Next-Cursor response header, which the server sends only while more results exist — its absence is the documented end-of-results signal, not an error. An empty items array with a non-null next_cursor is not the end either: a sparse page still has pages behind it.

limit bounds one page, not the total, and is validated against that endpoint's own maximum (table above) before the request, so an out-of-schema value is never signed or forwarded. The maxima are not interchangeable — in particular fetch_portfolio_history's limit cap of 366 is that endpoint's alone and it takes no cursor at all.

If the upstream ever returns the same cursor it was given, paging cannot advance. Handing that token back would put an agent in an unbounded tool-call loop, so the tool forces next_cursor to null and adds a pagination_error saying the results are incomplete — a stop, but explicitly not "end of history".

These parameters were in the spec ahead of the indexer, which may not yet emit X-Next-Cursor (ENG-5506). That degrades safely: with no header every response is next_cursor: null, i.e. exactly the pre-pagination single-page behaviour.

Authorization tiers

  • Public — no credentials.

  • HMAC (key): account reads, trading, agent/funding actions. Uses NEXUS_EXCHANGE_API_KEY / NEXUS_EXCHANGE_API_SECRET, or the key create_api_key just made (see Stored credentials). The testnet host verifies it as your own key; see Authentication.

  • Wallet signature: login (EIP-191), register_agent and revoke_agent (EIP-712), and register_bridge_wallet (EIP-191) carry a wallet signature. revoke_agent accepts nothing else: no HMAC key, session or agent key. Pass one made in the wallet as signature, or, on a play-funds target only, omit it and the stdio server signs with its own wallet (see Local wallet). The server never holds a key for real or undeclared funds, and the hosted server never holds one at all.

  • Session token — the *_api_key tools authenticate with a Bearer session token from login. The stdio server keeps it for the session and saves it, so nothing needs copying into the environment (see Stored credentials); NEXUS_EXCHANGE_SESSION_TOKEN still works.

  • Admin (opt-in) — fetch_tiers / set_tier / delete_tier use the operator admin secret and mutate other accounts' fee tiers. They are not registered unless NEXUS_EXCHANGE_ENABLE_ADMIN_TOOLS=1 is set (and NEXUS_EXCHANGE_ADMIN_SECRET provided). Never enable these on an untrusted agent surface.

Destructive tools (revoke_agent, delete_api_key, delete_tier, and cancel_all_orders) require an explicit confirm: true flag so a stray call can't do damage by accident.

Related MCP server: crypto-projects-mcp

Quick start

The server is published to npm as @nexus-xyz/exchange-mcp, so it runs with no clone and no build step. Register it with Claude Code in one line:

claude mcp add nexus -- npx -y @nexus-xyz/exchange-mcp

Or launch the stdio server directly (npx fetches the package on first run):

npx -y @nexus-xyz/exchange-mcp

It waits on stdio for an MCP client and is meant to be launched by that client (see Claude Desktop config below) rather than run by hand. Market-data and demo tools work with zero configuration; see Environment variables to enable account/trading tools.

Prefer to run from a checkout — for development, or to use the smoke check? See Development.

Full circle on testnet

With nothing configured, an agent on the stdio server can go from no account to a closed position on testnet (play funds) through tools alone. Each step is one tool call:

Step

Tool

Arguments

What happens

1

create_wallet

none

Makes a wallet key and saves it (see Local wallet). Returns the address.

2

login

none

Signs the login message with that wallet and keeps the session token.

3

create_api_key

none

Mints an HMAC key with that token and keeps it, so the account tools work from here on.

4

claim_faucet

none

Credits synthetic USDX. fetch_balance shows it.

5

create_order

market_id: "BTC-USDX-PERP", side: "buy", type: "market", size: "0.001"

Opens a small position. fetch_positions shows it.

6

create_order

the same with side: "sell", reduce_only: true

Closes it (reduce_only never flips it). fetch_positions is empty again.

Nothing is copied into the environment and the server is not restarted (see Stored credentials). create_wallet refuses when this network already has a wallet; confirm: true replaces it and the old key is lost. claim_faucet has a per-wallet cooldown and cap, and claim_credit is the per-key daily allowance.

examples/full-circle.mjs runs these steps against a throwaway config directory, so your own Nexus config is left alone.

Environment variables

Copy .env.example and set as needed. Only trading/account tools need credentials — never commit real secrets.

Variable

Required

Purpose

NEXUS_EXCHANGE_NETWORK

No

Network to target: testnet (default, play funds), local, mainnet, or custom. See Networks. An unrecognized value is an error, never a default.

NEXUS_EXCHANGE_API_URL

With custom

Explicit base override — scheme + host, plus the REST base path the deployment serves the spec under (testnet's /v1); every request is the spec's bare path under it plus the gateway path. Wins over NEXUS_EXCHANGE_NETWORK. Defaults to the selected network's host. A legacy value ending in /api/exchange is accepted and normalized. On its own it is deprecated — it names a host without declaring whose money is behind it; use NEXUS_EXCHANGE_NETWORK=custom with the bundle below. Alongside a named network it is not deprecated: that target already declared its funds.

NEXUS_EXCHANGE_NETWORK_LABEL

With custom

Name for a custom stage. Restricted to [A-Za-z0-9._-], max 64 — the Nexus clients namespace stored credentials by it. See A custom stage.

NEXUS_EXCHANGE_FUNDS

With custom

Whose money is behind the URL: real, play or unknown. No default. Until it is declared, the tools that cannot be undone refuse to run.

NEXUS_EXCHANGE_FAUCET

No

Set to 1 if a custom stage has a faucet. Separate from funds and absent until declared: claim_faucet / claim_credit need play funds and a faucet.

NEXUS_EXCHANGE_GATEWAY_PATH

No

Where a custom stage hangs off its host: /api/exchange (default) or / for a bare indexer serving at its root. Places both surfaces since ENG-6221, so a wrong value 404s every tool, not only the legacy ones. Read only with NEXUS_EXCHANGE_NETWORK=custom — refused on its own.

NEXUS_EXCHANGE_AGENT_PRIVATE_KEY

For account/trade tools

Private key (hex) of a registered agent. Signs every account/trade call with agentAuth and wins over the HMAC pair. Can trade, cannot withdraw. See Agent keys.

NEXUS_EXCHANGE_API_KEY

For account/trade tools

HMAC API key id (x-api-key).

NEXUS_EXCHANGE_API_SECRET

For account/trade tools

HMAC secret (hex).

NEXUS_EXCHANGE_PRIVATE_KEY

No

Wallet private key (hex) the stdio server signs with when signature is omitted. Wins over a stored private_key. Read only on a play-funds target, ignored elsewhere and by the hosted server. See Local wallet.

NEXUS_EXCHANGE_SESSION_TOKEN

For *_api_key tools

Bearer session token from login (POST /auth/login).

NEXUS_EXCHANGE_ADMIN_SECRET

For admin tools

Operator admin secret (ADMIN_SECRET). Only with the flag below.

NEXUS_EXCHANGE_ENABLE_ADMIN_TOOLS

No

Set to 1 to register the admin tier tools. Off by default.

Stored credentials

The stdio server shares its credential file with the Nexus CLI (nexus), so a key made in one works in the other. The file is $XDG_CONFIG_HOME/nexus/config.json, or ~/.config/nexus/config.json when XDG_CONFIG_HOME is unset (macOS included), with one section per network under networks.<network>, as in the CLI's per-network credentials:

{
  "networks": {
    "testnet": {
      "api_key": "nx_...",
      "api_secret": "...",
      "session_token": "..."
    }
  }
}
  • login keeps its session token for the rest of the session and saves it to the active network's section, as nexus auth login does.

  • create_api_key does the same with the new key id and secret. Once the secret is saved, the result shows "secret": "[REDACTED]" and saved_to names the file. If the save fails, the result carries the secret in full and a save_error.

  • At startup the server reads the active network's section. Environment variables win field by field, matching the CLI's order (flags > env > file). A file that is not valid JSON stops the server at startup, as it stops the CLI, rather than being read as empty and overwritten.

So an agent goes from login to create_api_key to a trade in one session, with nothing copied into the environment and no restart, and the key still works after one.

The file is written 0600 in a 0700 directory, through a temp file and a rename. Each write holds .config.json.xlock across its read, merge and rename, the lock nexus also takes (concurrent writers), so a nexus command and the server never overwrite each other's change. The lock is created exclusively (O_CREAT|O_EXCL), holds pid=<pid> created_ms=<unix ms>, and is deleted when the write ends; a writer that finds it retries for up to 15 s and deletes it once its mtime is over 10 s old. A nexus older than the lock does not take it, so the server still re-reads after each write and reports a field such a write erased as unsaved (the secret comes back in full). One network's credentials never go into another's section: a bare NEXUS_EXCHANGE_API_URL, and a custom stage whose label spells a network name, have no section, so what login and create_api_key return is kept for the session only and the secret comes back in full. The hosted HTTP server never reads or writes this file.

Local wallet

On a play-funds target (testnet, local, or a custom stage declared NEXUS_EXCHANGE_FUNDS=play), the stdio server can hold a wallet key of its own, so an agent can make an account with nothing signed elsewhere: create_wallet, then login with no signature, then create_api_key.

  • create_wallet generates a secp256k1 key and saves it as private_key in the active network's section of the file above, then uses it for the rest of the session. It returns the address and saved_to, never the key. If a wallet already exists it refuses unless confirm: true, which overwrites the old key and keeps it nowhere.

  • To use a key you already have, set NEXUS_EXCHANGE_PRIVATE_KEY. It wins over the file, and create_wallet will not replace it.

  • With a wallet held, login, register_agent, revoke_agent and register_bridge_wallet sign for themselves when signature is omitted. An explicit signature is still accepted everywhere. login signs only its fixed message, register_bridge_wallet only for the held wallet's own address, and register_agent and revoke_agent only on testnet and local (their signatures are bound to the server's network name, which a custom stage does not declare).

  • On mainnet, and on a custom stage whose funds are real or unknown, create_wallet and self-signing refuse before any request, and a key in the environment or the file is not even loaded. No tool ever returns the key.

  • The nexus CLI shares the file. A CLI release without nexus-exchange-cli#95 drops private_key the next time it writes the file (for example on nexus auth login), so update the CLI before using both.

Agent safety modes

Two switches limit what an agent can do, for trying an agent out or giving it market access without trading rights (ENG-20366). Each one is an env var or a flag in the stdio server's args. The hosted HTTP server reads only the env var.

Mode

Env var

Flag

What the agent gets

Read-only

NEXUS_EXCHANGE_READ_ONLY

--read-only

Only tools that change nothing. Placing, amending, cancelling, deposits, logins and key changes are gone.

Paper

NEXUS_EXCHANGE_PAPER

--paper

Read-only, plus simulated create_order, create_orders, cancel_order, cancel_all_orders, fetch_open_orders.

{ "command": "npx", "args": ["-y", "@nexus-xyz/exchange-mcp", "--paper"] }

Read-only keeps a tool only when its readOnlyHint annotation is true, so the set is exactly what tools/list labels as read-only. Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint); one that calls anything but a GET has to declare them or the server refuses to start. preview_order and the two WebSocket-token tools are POSTs that count as read-only: they change no account state.

Paper mode fetches the market's public order book when an order is placed and walks it. A market order takes levels until it fills or the book runs out. A limit order fills only the levels its price crosses, and what is left rests in an in-memory paper book for the life of the process (IOC cancels it, FOK fills all or nothing, PostOnly is rejected if it would cross). Every response says "simulated": true. It is deliberately simple. It does not simulate margin or balance checks, fees, funding, liquidation or positions, and a resting paper order never fills later, even when the market trades through it. Only limit and market orders are simulated. Nothing in paper mode places, amends or cancels a real order.

Networks

The target is chosen on a network axis — whose money is behind it — not a release channel. NEXUS_EXCHANGE_NETWORK takes testnet, mainnet, local or custom; the map for the three named networks lives in one place, src/networks.ts, copied from the spec's x-nexus-networks extension.

Network

Funds

Faucet

Target today

testnet

Play (synthetic USDX)

Yes

https://api.testnet.nexus.xyz/v1 — the default

local

Play (whatever you hold)

Yes

http://localhost:9090

mainnet

Real money

No

No reachable host yet — selecting it is an error

custom

You declare it

You declare it

The URL you supply — see A custom stage

Nothing changes if you set nothing. The default resolves to exactly the host this server has always used.

mainnet deliberately does not work yet. Its host api.nexus.xyz has no DNS (ENG-8155) and the pinned spec maps no operation onto its /v1 base, so any URL built for it would be a guess — on the one network where a guess moves real money. It fails with an explanation instead. To target it once it is live, set NEXUS_EXCHANGE_API_URL explicitly alongside NEXUS_EXCHANGE_NETWORK=mainnet — the network declares the funds, so the URL is only redirecting its host and stays the sanctioned way to reach real funds before the durable host exists.

Three rules this implements, all from the spec extension:

  • Hosts are never interpolated from the network name. Mainnet is off-pattern on purpose — api.nexus.xyz, not api.mainnet.nexus.xyz — so api.{network}.nexus.xyz would resolve for every environment that can be tested and fail only on real funds. Every host is a named literal.

  • An unrecognized network is treated as real funds. A typo is an error, never a fallback to play money. local is likewise never a fallback for a public host that fails to resolve — succeeding quietly against localhost would hide a misconfigured client.

  • Credentials never cross networks. Session tokens, HMAC keys and agent registrations are minted per network and are invalid on any other. Switching network means switching credentials; never carry a signature or a nonce across.

A custom stage

A deployment that is not one of the three networks — a private stage, a sandbox, an indexer on your own machine — is a custom target: it carries the same descriptor a named network does (label, host, funds, faucet, gateway shape), and this package ships no hostname for any of them. You supply it.

NEXUS_EXCHANGE_NETWORK=custom
NEXUS_EXCHANGE_API_URL=https://exchange.example.com   # the stage's origin
NEXUS_EXCHANGE_NETWORK_LABEL=dev                      # a name for it
NEXUS_EXCHANGE_FUNDS=play                             # real | play | unknown
NEXUS_EXCHANGE_FAUCET=1                               # only if it has one
NEXUS_EXCHANGE_GATEWAY_PATH=/                         # bare indexer; omit for /api/exchange

Four rules, and they are the same four in every Nexus client:

  • custom carries the whole bundle, not just a URL. A URL alone is what makes a client report play-funds guardrails while pointed at a real-funds host.

  • Funds are caller-declared, tri-state, and have no default. real, play, or unknown. A staging deployment of mainnet is real-funds-shaped, so defaulting to play would make every guardrail lie in the direction that costs money, and defaulting to real would make a dev stage unusable.

  • A faucet is separate from funds, and absent until declared. "Not real money" does not imply "has a faucet".

  • The label is restricted to [A-Za-z0-9._-] (max 64). Across the clients it is the key stored credentials are namespaced under, so a label that can name a path (../other, one/two) or normalize onto another label is refused.

custom is client-side only. It is not a value the API accepts and it does not appear in the spec's x-nexus-networks.

Undeclared funds refuse the tools that cannot be undone

NEXUS_EXCHANGE_API_URL on its own is the deprecated legacy shortcut. It still works — no bundle required, legacy /api/exchange suffix still normalized — and it resolves to a custom target whose funds are undeclared. It also has no deployment shape to read, so it assumes the public-gateway one and the notice below says so; every request is composed under that gateway path, which is the one thing about this form that is not byte-identical to what it used to resolve to. A bare URL pointed at an indexer that serves at its root wants NEXUS_EXCHANGE_NETWORK=local alongside it, or the full bundle. That is not the same as play funds, so these tools refuse rather than proceed on an assumption:

Tools

Need

create_order, create_orders, edit_order, deposit, create_deposit, add_margin, create_bridge_deposit_address

funds declared real or play

claim_faucet, claim_credit

funds play and a faucet

create_wallet, and login / register_agent / revoke_agent / register_bridge_wallet without signature

funds play

Everything else is unaffected: every read, preview_order, and — deliberately — cancel_order. Blocking a cancel would trap a caller holding open risk, which is the opposite of a guardrail.

To lift the refusal, say what the target is: select a named network with NEXUS_EXCHANGE_NETWORK, or describe the stage with the bundle above. Declaring real is a legitimate answer and unlocks the irreversible tools — the guard asks that somebody know, not that the money be play.

Because the bare form cannot answer that question, a server started on it prints one notice on stderr naming the declared form, then runs exactly as before (a single line, wrapped here):

nexus-exchange-mcp: NOTICE: NEXUS_EXCHANGE_API_URL on its own is deprecated and
still works. On its own it also assumes the PUBLIC-GATEWAY shape, so every
route resolves under /api/exchange; for an indexer that serves at its root, add
NEXUS_EXCHANGE_NETWORK=local, or describe the deployment with the full custom
bundle …

Nothing is removed, and nothing is written to stdout — that is the JSON-RPC channel on the stdio surface, and a stray line there would corrupt the protocol.

Release channels are a URL, not a network

beta / staging are deployments of testnet, not a third pool of money, so they are no longer enum values. Describe them as a custom stage instead:

NEXUS_EXCHANGE_NETWORK=custom
NEXUS_EXCHANGE_API_URL=https://staging.example.com   # the deployment's origin
NEXUS_EXCHANGE_NETWORK_LABEL=staging
NEXUS_EXCHANGE_FUNDS=play                            # a testnet deployment holds play funds

The URL overrides the network map and is validated either way (http(s) only, no embedded user:password@, no query or fragment, since the base is concatenated with a request path). Plaintext http to a non-loopback host warns on stderr: HMAC over http exposes the key id and signature in transit — a private stage on plain http is exactly what that warning is for.

Setting the URL alone still works and is the deprecated shortcut: it leaves the funds undeclared, which is why it is a custom target with no bundle rather than a mechanism of its own, and why the tools that cannot be undone refuse on it. Both are documented in A custom stage.

WebSocket targets

create_ws_token and create_ws_token_legacy now return ws_endpoint alongside the token, so a caller is no longer handed a 60-second credential with no address to spend it at. For a named network the endpoints are the spec's published ws_url for that network (x-nexus-networks, copied into src/networks.ts), which is the spec's REST base with the scheme swapped:

wss://api.testnet.nexus.xyz/v1/ws      # authenticated, connect with ?token=…
wss://api.testnet.nexus.xyz/v1/stream  # public market data

The /v1 prefix is required: the bare host routes no WebSocket path and answers 404 (ENG-17132). Mainnet has the same shape on api.nexus.xyz, which does not resolve yet (no DNS, ENG-15183). With an explicit NEXUS_EXCHANGE_API_URL (or a custom stage) the endpoints derive from that gateway base instead, since /ws, /stream, /ws/token and /ws-tokens carry no per-path servers override in the spec. On local there is no prefix at all — ws://localhost:9090/ws — because the indexer serves those routes at its root.

API version

Currently targets Exchange API spec v0.8.1.

The pinned version lives in .api-version; the spec itself is published by nexus-xyz/nexus-exchange-api. This repo does not vendor a copy — the checks below fetch the pinned release. The line above is bot-managed; everything around it is human-owned.

Three separate things watch the pin, and they answer different questions:

Check

Question

Where

spec-drift

Does the tool surface still match the spec it pins?

.github/workflows/spec-drift.yml

drift (in CI)

Is the pin behind the latest release?

.github/workflows/ci.yml

spec-autobump

A newer spec released — is the delta breaking?

.github/workflows/spec-autobump.yml

spec-autobump (daily cron, repository_dispatch from the api repo, or manual dispatch) classifies the pin advance with oasdiff and opens a PR touching only .api-version and the managed line above, labelled spec-autobump or breaking · needs-SDK-update. It never merges: allow_auto_merge is disabled on this repo, so the workflow probes the setting and says so in the PR body rather than calling gh pr merge --auto and reporting success over a no-op. It supersedes the old poll-only api-version-sync workflow, which had no classification step.

Spec drift

spec-drift is the verification half, and it runs on every PR — including the autobump's own, where the pin is the change. It enforces three invariants:

  1. every operation in endpoints.txt exists in the pinned spec;

  2. endpoints.txt matches the per-tool ops declarations byte-for-byte (it is a generated artifact, not a hand-maintained list);

  3. each tool's declared ops match the operations its handler actually requests.

All three key an operation on METHOD /path (placeholder names normalized), never on operationId. Ids are not stable across releases: v0.8.0 swapped createWsToken and createWsTokenLegacy between POST /ws/token and POST /ws-tokens — changing no route, and nothing this server calls, but a guard keyed on ids would have broken on it anyway.

npm run spec:drift        # verify against the pinned spec
npm run spec:drift:write  # regenerate endpoints.txt after adding operations
npm run spec:drift:test   # self-test: prove the checker goes red when defeated

Adding a tool without declaring what it calls is a type error, so the mapping cannot be skipped. See docs/coverage-unit.md.

Every upstream request also sends this pin as an X-Nexus-Api-Version: <tag> header (e.g. X-Nexus-Api-Version: v0.8.1), alongside a normalized User-Agent: nexus-exchange-mcp/<version>, so the exchange edge can attribute and segment usage by client and by the contract version this server targets. The header value is the server's own compiled-against tag — it is baked in at build time (a test keeps it equal to .api-version), so it is never taken from caller input.

Authentication

An agent key is a secp256k1 key a wallet authorizes to trade for it (POST /agents/register). It can place, amend and cancel orders and read the account, but it cannot withdraw, transfer, or manage agents. That makes it the credential to hand an AI agent: if the model, its transcript or its host leaks the key, nobody can move funds out with it.

Set NEXUS_EXCHANGE_AGENT_PRIVATE_KEY (or send X-Nexus-Agent-Private-Key to the hosted server). Every account and trade tool then signs with the agentAuth scheme the SDKs use, and the agent key wins over an HMAC pair when both are set:

keccak256(<METHOD>\n<path>\n<query>\n<sha256hex(body)>\n<timestamp_ms>\n<nonce>)

signed with the agent key (recoverable secp256k1, no EIP-191 prefix) and sent as x-signature alongside x-agent, x-timestamp and x-nonce. The path is the same bare path the HMAC scheme signs.

To get one, generate a key (any 32 random bytes, e.g. openssl rand -hex 32) and register its address with your wallet: nexus agents register in the Nexus CLI, or the register_agent tool here. The server requires each agent's nonce to rise on every write, so this server sends one agent-signed write at a time; run one server per agent key.

HMAC API keys

Signed requests use the same canonical HMAC-SHA256 scheme the indexer verifies (backend/services/indexer/src/auth.rs):

<timestamp>\n<METHOD>\n<path>\n<query>\n<sha256hex(body)>

signed with the hex-decoded secret and sent as x-signature alongside x-api-key and x-timestamp.

The signed path is the spec's bare path (e.g. /orders), and for the bridge tools /api/v1/bridge/.... The base's own prefix is not signed over. On a bare indexer (NEXUS_EXCHANGE_NETWORK=local) the two coincide, so the client signs exactly what it sends. On the public testnet host they differ: the wire path is /v1/orders while the signature covers /orders, and the route strips /v1 before the indexer checks (apps-prod-testnet.yaml: "transport prefixes are stripped before auth"). If signed calls 401 on a prefixed host and the same key works against a bare indexer, that stripping is the thing to check.

The testnet host verifies the caller's own HMAC. A bad signature is answered 401 UNAUTHORIZED, and a valid key acts as the account that minted it: its own balance, faucet credit, orders and positions. So trading as yourself needs no special gateway, and an agent can make its own account there with tools alone (see Full circle on testnet). local (the http://localhost:9090 from the exchange docker-compose) verifies client HMAC the same way.

The one exception is the retired legacy gateway at exchange.nexus.xyz/api/exchange, which no network targets since ENG-8869 (it now answers 500). It proxied authenticated requests and signed them with the site's own frontend key, so per-caller HMAC was not honored and calls resolved to the site account. A custom stage still behind such a proxy behaves the same way.

Claude Desktop config

Add this to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "nexus-exchange": {
      "command": "npx",
      "args": ["-y", "@nexus-xyz/exchange-mcp"],
      "env": {
        "NEXUS_EXCHANGE_NETWORK": "testnet"
      }
    }
  }
}

Running from a local checkout instead? Use "command": "node" with "args": ["/ABSOLUTE/PATH/TO/nexus-exchange-mcp/dist/index.js"] (after npm run build).

testnet is the default, so the env block above is optional — it is spelled out because naming the network is what declares the funds. To reach a deployment this package ships no host for, use the custom bundle rather than NEXUS_EXCHANGE_API_URL alone:

"env": {
  "NEXUS_EXCHANGE_NETWORK": "custom",
  "NEXUS_EXCHANGE_API_URL": "https://exchange.example.com",
  "NEXUS_EXCHANGE_NETWORK_LABEL": "dev",
  "NEXUS_EXCHANGE_FUNDS": "play"
}

To enable trading, add NEXUS_EXCHANGE_API_KEY / NEXUS_EXCHANGE_API_SECRET to the env block, or on testnet let the agent make its own key (see Full circle on testnet).

Demo script

  1. Add the config above, restart Claude Desktop, and confirm nexus-exchange appears in the tools list.

  2. Ask: "Show me the BTC market on Nexus" — Claude calls fetch_markets_summary / fetch_ticker and reports the live BTC-USDX-PERP price.

  3. Ask: "What's in the demo account and its open positions?" — Claude calls get_demo_account and get_demo_positions against the live exchange.

Hosted HTTP server (remote MCP)

The stdio server above runs locally and holds your API key on your machine. The hosted Streamable HTTP server is the remote front door: it lets a trader add Nexus as a remote MCP server without running any key-holding software locally.

# from the published package (no clone):
npx -p @nexus-xyz/exchange-mcp nexus-exchange-mcp-http

# or from a checkout:
npm run build
npm run start:http   # listens on :8080, MCP endpoint at /mcp, probe at /healthz

Behind a TLS-terminating ingress this is the public endpoint https://mcp.exchange.nexus.xyz/mcp. A client adds it with:

claude mcp add --transport http nexus https://mcp.exchange.nexus.xyz/mcp

It exposes the same tool surface as the stdio server — both transports register the identical ToolDef[] from src/tools/ via createServerForClient in src/server.ts, so the tools never drift. The transport is the SDK's StreamableHTTPServerTransport in stateful mode (one MCP session per mcp-session-id), which also serves the SSE fallback stream for server→client messages. Hosted traffic keeps the same nexus-exchange-mcp/<version> User-Agent as the stdio CLI but appends a (http) comment (nexus-exchange-mcp/<version> (http)) so usage attributes to the hosted MCP in the dashboard while still segmenting under one product and version.

Authentication (MVP — no OAuth yet)

OAuth 2.1 is out of scope for this MVP (tracked under the hardening work, ENG-3598, and scoped-key minting, ENG-3486). Until that lands, the hosted server takes the caller's existing Exchange HMAC credential as request headers, captured once at session initialize and reused for the session:

X-Nexus-Api-Key:    <hmac key id>
X-Nexus-Api-Secret: <hmac secret, hex>

or, recommended, a trade-only agent key that cannot withdraw:

X-Nexus-Agent-Private-Key: <agent private key, hex>

These are deliberately not named x-api-key / x-signature (the upstream gateway's own headers) to avoid confusion. With no credential headers a session still serves public market-data tools, and every authenticated tool refuses with an error naming the two headers.

The hosted server never uses server-env credentials (ENG-4359). NEXUS_EXCHANGE_API_KEY, NEXUS_EXCHANGE_API_SECRET, NEXUS_EXCHANGE_AGENT_PRIVATE_KEY, NEXUS_EXCHANGE_SESSION_TOKEN, NEXUS_EXCHANGE_ADMIN_SECRET and NEXUS_EXCHANGE_PRIVATE_KEY are ignored in HTTP mode, and so is the stored-credentials file, so a caller that sends no headers can never trade as the server's account. Admin tools are never exposed over HTTP. The stdio server still reads them from the environment as before, then from that file.

Header passthrough is the simplest defensible MVP, but the long-term answer is OAuth-minted scoped (trade-not-withdraw) keys so the caller never hands us a raw secret. See ENG-3598 / ENG-3486.

Limits and session lifetime

Variable

Default

Meaning

MCP_HTTP_SESSION_IDLE_TTL_MS

1800000

A session with no request for this long is closed and its client dropped (30 min).

MCP_HTTP_RATE_LIMIT_BURST

60

Token-bucket size per client IP on /mcp.

MCP_HTTP_RATE_LIMIT_PER_SEC

2

Tokens refilled per second per client IP.

MCP_HTTP_TRUSTED_PROXY_HOPS

0

How many proxies in front of the server append to X-Forwarded-For.

MCP_HTTP_MAX_BODY_BYTES

1048576

Largest initialize POST body read; past it the server answers 413 (1 MiB).

Sessions live in process memory, so a restart or redeploy forgets them too. A session id the server doesn't hold, evicted or lost, answers 404 (the MCP Streamable HTTP spec's signal), and the client reconnects with a fresh initialize. A request with no session id is a 400. Only requests count as activity: an open SSE GET stream does not keep a session alive. A client over the limit gets 429 with a Retry-After header (seconds). /healthz is not limited.

The limiter is in memory and per process, so the effective ceiling is per replica: N replicas allow N times the configured rate. An ingress-level limit is the global answer.

Client IP. With MCP_HTTP_TRUSTED_PROXY_HOPS=0 (the default) the limiter keys on the TCP peer and ignores X-Forwarded-For, because a client can set that header to anything and would otherwise dodge the limit. Behind an ingress the peer is the ingress itself, so every caller shares one bucket: set the variable to the number of proxies that append to X-Forwarded-For (1 for a single reverse proxy, 2 for a Google Cloud load balancer, which appends both the client and its own address). The limiter then takes the Nth entry from the right, the one the outermost trusted proxy saw. Setting it higher than the real hop count lets a client spoof its IP again.

Development

Clone and build from source:

git clone https://github.com/nexus-xyz/nexus-exchange-mcp.git
cd nexus-exchange-mcp
npm install
npm run build
npm start            # runs the stdio MCP server from the local build

Then the usual checks:

npm run format     # prettier --write
npm run lint       # eslint
npm run typecheck  # tsc --noEmit
npm test           # unit tests (HMAC scheme, arg mapping, schemas)
npm run test:coverage # unit tests + coverage (text/lcov/json-summary); CI emits the %
npm run spec:drift # tool surface vs. the pinned spec (see "Spec drift" above)

The smoke check runs end-to-end against a live deployment. Against a local indexer, name the network too, so the target keeps the bare-origin shape:

NEXUS_EXCHANGE_NETWORK=local NEXUS_EXCHANGE_API_URL=http://localhost:9090 npm run smoke

The public testnet host works as well. Name the network alongside it: the deprecated bare-URL form assumes the retired public-gateway shape and would append /api/exchange to a base that already carries /v1.

NEXUS_EXCHANGE_NETWORK=testnet NEXUS_EXCHANGE_API_URL=https://api.testnet.nexus.xyz/v1 npm run smoke

Expected output ends with fetch_markets_summary OK -> N markets.

It requires an explicit NEXUS_EXCHANGE_API_URL and has no default (ENG-8092) — fetch_markets_summary is a read, and reads are never funds-guarded. The URL names the host; the gateway path decides where every request lands under it (ENG-6221), and that comes from the network. So NEXUS_EXCHANGE_API_URL alone resolves …/api/exchange/… and prints the bare-URL deprecation notice on stderr before proceeding, while NEXUS_EXCHANGE_NETWORK=local alongside it serves the spec's paths at the origin and prints no notice — the network declared the target, so the URL only redirected the host. Pointing a bare NEXUS_EXCHANGE_API_URL at an indexer that serves at its root sends every route under /api/exchange, where a bare indexer serves nothing; name the network, or describe the stage with the full custom bundle (which is where NEXUS_EXCHANGE_GATEWAY_PATH=/ is read — it is refused on its own). If the target answers with HTML rather than JSON, on a 404 or on a 200, the check says so by name and exits non-zero; it never reports a passing run for a body it could not read as market-summary JSON.

License

Dual-licensed under MIT or Apache-2.0, at your option — same as the other Nexus Exchange SDKs.

Available Tools

115 tools
add_marginA

Add or remove isolated margin on an open position. Fails if the position is not in isolated margin mode (MarginModeNotIsolated), if there is no open position in the market (NoOpenPosition), or if a removal breaches the margin floor. amount is a positive decimal string. Requires API credentials. This moves REAL margin on the position.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesUSDX amount to add or remove, as a positive decimal string (> 0).
directionYesWhether to add margin to or remove it from the position.
market_idYesMarket of the open position, e.g. "BTC-USDX-PERP".

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely meets it: it discloses the API-credential requirement, the named failure modes (MarginModeNotIsolated, NoOpenPosition, margin floor breach), and explicitly warns that REAL margin moves on the position. It stops short of describing the resulting position/balance state or whether a removal frees collateral immediately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation, followed by failure conditions and the funds warning; four sentences and every one carries weight except for the `amount` restatement, which duplicates the schema verbatim. Slightly padded but well ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description covers the mutation's semantic danger, auth needs, and error surface, which is most of what an agent needs. The remaining gap is the unexplained overlap with the `adjust_isolated_margin` sibling and no indication of what the call returns on success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema, including the enum for `direction` and the positive-decimal rule for `amount`. The description's restatement that `amount` is a positive decimal string adds no meaning beyond the schema, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource: add or remove isolated margin on an open position. That is unambiguous on its own, but it does not distinguish itself from the sibling tool `adjust_isolated_margin`, which sounds like it may cover the same operation, so an agent cannot fully route between them from this text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear preconditions for when the call is valid (position must be in isolated mode, must exist, removal must not breach the floor), which is useful context. However, it never names or contrasts the obvious alternative `adjust_isolated_margin`, and there is no when-not-to-use guidance, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adjust_isolated_marginA

Deprecated: use add_margin. Add or remove isolated margin on an open position. Fails if the position is not in isolated margin mode (MarginModeNotIsolated), if there is no open position in the market (NoOpenPosition), or if a removal breaches the margin floor. amount is a positive decimal string. Requires API credentials. This moves REAL margin on the position.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesUSDX amount to add or remove, as a positive decimal string (> 0).
directionYesWhether to add margin to or remove it from the position.
market_idYesMarket of the open position, e.g. "BTC-USDX-PERP".

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses deprecation, required API credentials, three named failure modes, and the real financial consequence ('This moves REAL margin on the position'). This is far beyond what the schema alone provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation warning is front-loaded, and the following sentences add useful behavioral detail. Slight redundancy appears in restating the `amount` parameter already documented in the schema, but the description remains well organized and mostly free of waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated mutation tool with no annotations and no output schema, the description covers the essential context: replacement, required credentials, failure conditions, parameter type, and real-margin impact. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines all three parameters. The description only restates that `amount` is a positive decimal string, which duplicates the schema without adding syntax or constraints beyond it. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: add or remove isolated margin on an open position. It also names the replacement sibling (`add_margin`) due to deprecation, so an agent can immediately distinguish it from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says it is deprecated and directs the agent to `add_margin`, which is the key routing guidance. It further lists precise failure conditions (MarginModeNotIsolated, NoOpenPosition, margin floor breach) and credential requirements, leaving little ambiguity about when this call will succeed or fail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amend_orderA

Deprecated: use edit_order. Amend a resting order's price and/or size in one atomic cancel-replace operation. At least one of price or size is required; a pre-trade margin check is applied to the replacement before it is accepted. Liquidation orders cannot be amended. Requires API credentials. This modifies a REAL order on the matching engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoNew order size in base units as a positive decimal string (> 0). Optional if `price` is given.
priceNoNew limit price as a positive decimal string (> 0). Optional if `size` is given.
order_idYesId of the resting order to amend.
market_idYesMarket the order rests on (required for routing).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the atomic cancel-replace semantics, a pre-trade margin check on the replacement, the liquidation-order exclusion, credential requirements, and warns it 'modifies a REAL order on the matching engine'. It does not say what happens to the original order if the replacement is rejected, nor mention rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the deprecation notice, then compressed behavioral facts in tight clauses. No filler and every sentence conveys something operationally relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers auth, side effects, key exclusions, and the atomicity model. The remaining gap is the response shape and failure semantics (e.g., whether the original order survives a failed margin check), which the absent output schema leaves undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds a constraint the schema omits: the schema requires only `order_id` and `market_id`, while the description states 'At least one of `price` or `size` is required'. That is real value beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Amend a resting order's price and/or size' — and characterizes the mechanism as 'one atomic cancel-replace operation'. It also flags deprecation and names the replacement sibling `edit_order`, so an agent can distinguish it from `edit_order`/`cancel_order` without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The leading 'Deprecated: use `edit_order`' is an explicit when-not/routing instruction, and it adds preconditions ('requires API credentials', 'liquidation orders cannot be amended', at least one of price/size). It stops short of contrasting the amend path with an explicit cancel+create workflow, but the alternative is clearly named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_all_ordersA

Cancel ALL of the authenticated account's open orders, optionally scoped to one market with market_id. Destructive: you must pass confirm: true, so a stray or argless call can't mass-cancel by accident. To cancel a single order use cancel_order. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to actually cancel (guards against typos).
market_idNoScope the cancel to one market. Omit to cancel across all markets.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full behavioral burden and mostly does: it flags the operation as destructive, explains the confirm guard's purpose, and states the API-credential requirement. It stops short of saying whether the cancel is irreversible or what happens when there are zero open orders, but the safety profile is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the destructive scope front-loaded, then the safety guard, then the sibling alternative. Nothing is padding and the order matches how an agent needs the information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description would need to cover behavior, and it does for the safety-critical parts. The only unwritten item is the result shape (e.g., count of cancelled orders) and empty-state behavior, which is minor for a bulk-cancel tool with a hard confirm gate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both properties are already documented in the schema ('Must be true to actually cancel', 'Scope the cancel to one market'). The description restates that semantics inline rather than adding format or edge-case detail beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Cancel ALL of the authenticated account's open orders') plus the optional scoping dimension via market_id. It also explicitly negates the nearest sibling, cancel_order, so the agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('all open orders, optionally scoped to one market') and the alternative for the single-order case ('To cancel a single order use cancel_order'). The requirement to pass confirm:true is stated as a precondition rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_orderA

Cancel ONE resting order by order_id. market_id is required (the route uses it for routing). This tool only ever cancels the single named order; to cancel every open order use cancel_all_orders. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesId of the order to cancel.
market_idYesMarket the order rests on (required for routing).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that API credentials are required (auth need) and clarifies the market_id routing requirement, but does not describe mutation side effects (e.g., whether cancellation is immediate, what happens if the order is already filled, or error behavior).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and scope, then routing constraint, then alternative and auth note. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-required-parameter mutation tool with no output schema and no annotations, the description covers auth, scope, routing, and the alternative tool. It omits some failure-mode context, but is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented. The description reinforces that market_id is required for routing, but adds no syntax or format beyond what the schema provides; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Cancel) and resource (one resting order by order_id), and explicitly distinguishes itself from the sibling cancel_all_orders. An agent can identify the exact operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the tool only ever cancels the single named order and names the alternative (cancel_all_orders) for cancelling everything, giving a clear when-to-use-this-vs-alternative rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claim_creditA

Claim synthetic USDX credit from the testnet faucet, up to a per-key daily allowance (default 500 USDX, resets midnight UTC). Pass amount (positive decimal string) to claim a specific amount, or omit it to claim the full remaining allowance. The credited USDX is synthetic testnet value. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoUSDX to credit, as a positive decimal string (> 0). Omit to claim the full remaining daily allowance.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses: daily allowance cap (default 500 USDX, resets midnight UTC), optional amount vs. full claim, synthetic nature, and API credential requirement. However, it does not detail side effects like whether repeated calls within the day reduce allowance or how failures are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. Front-loaded with core purpose and immediate constraints. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers all necessary aspects: what it does, constraints, parameter behavior, and prerequisites (API credentials). No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter. Description adds semantic value: 'positive decimal string' type constraint and 'omit to claim full remaining allowance' usage rule. This fully explains the parameter's purpose and behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'claim synthetic USDX credit from the testnet faucet' and specifies the resource (USDX, testnet) and constraints (daily allowance, default 500 USDX, resets midnight UTC). It distinguishes from sibling 'claim_faucet' by specifying the synthetic USDX nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use (to get testnet USDX) and explains behavior with optional amount parameter. It does not explicitly state when not to use or name alternatives, but the context is straightforward for a faucet tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claim_faucetA

Claim the fixed testnet faucet amount of synthetic USDX for the authenticated account, subject to a per-wallet cooldown and cumulative cap. Unlike claim_credit the amount is fixed server-side — no arguments. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behavioral traits: fixed amount, per-wallet cooldown, cumulative cap, testnet context, and authentication requirement. Without annotations, this is adequate, though does not detail cooldown duration or error responses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, 72 words, front-loaded with core purpose, no superfluous text. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no parameters and no output schema, the description covers purpose, constraints, and differentiation from sibling. No critical gaps given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (0 params), baseline is 4. Description confirms no arguments needed, adding clarity beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Explicitly states the action (claim), the resource (fixed testnet faucet amount of synthetic USDX), and context (authenticated account, cooldown/cap). Clearly distinguishes from sibling claim_credit by noting the fixed amount server-side.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Directly compares with claim_credit, specifying that the amount is fixed and no arguments needed, guiding the agent when to choose this tool. Also mentions requirement of API credentials.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_api_keyA

Create a new HMAC API key for the authenticated wallet. The stdio server keeps the key for the rest of this session, so the account and trading tools work right away. The API shows the secret ONCE: the stdio server saves it for this network in the Nexus CLI config and secret comes back redacted, with saved_to naming the file. When it could not be saved, secret is returned in full and must be stored now. Authenticates with the session token from login, or NEXUS_EXCHANGE_SESSION_TOKEN.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses one-time secret visibility, that the server persists the key in the Nexus CLI config for the session, that `secret` returns redacted with `saved_to` naming the file, and the fallback where an unsaved secret is returned in full and must be stored immediately. These behaviors are non-obvious and materially affect correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place — key purpose, session retention, the two secret-return paths, and auth. It is dense and front-loaded, though the middle sentences are somewhat compressed and require careful reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema and no annotations, the description specifies the return shape (`secret`, `saved_to`), the two possible secret states, and the authentication prerequisite. An agent has everything needed to call this correctly and handle the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to add or clarify. The schema is empty and consistent with the description's no-argument usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a new HMAC API key') and the scope ('for the authenticated wallet'), clearly distinguishing it from siblings like list_api_keys and delete_api_key. An agent can identify the operation without reading any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the payoff context — the stdio server keeps the key so account and trading tools work right away — and names the auth source (session token from `login` or NEXUS_EXCHANGE_SESSION_TOKEN). It stops short of explicitly contrasting with create_ws_token or stating when an agent should prefer/avoid creating a key.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_bridge_deposit_addressA

Deprecated: no server implements this route (its design was cancelled, ENG-11460), so every call fails. Get or create the authenticated account's cross-chain deposit address on a chain. Sending a supported asset to the returned address credits the account. Idempotent per (account, chain): repeated calls return the same address rather than allocating a new one. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainYesChain to get-or-create a deposit address on, e.g. "ethereum". Use `fetch_bridge_assets` to discover supported chains.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses deprecation/failure mode, idempotency keyed on (account, chain) with the same-address guarantee, the crediting effect of sending assets, and the API-credential requirement. It does not cover rate limits or response shape, but the return contract is largely implied by 'returns the address.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the deprecation warning — the single most decision-relevant fact — before the functional description and behavioral notes. Every sentence earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-annotation, no-output-schema tool, the description supplies everything needed: status, purpose, idempotency, side effect, and auth requirement. The deprecation note alone prevents an agent from wasting a call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter with 100% schema description coverage, including an example value and a pointer to fetch_bridge_assets for discovery. The description's 'get-or-create per (account, chain)' adds the idempotency semantics of the chain argument, but otherwise the schema does the heavy lifting, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('Get or create the authenticated account's cross-chain deposit address on a chain') and immediately qualifies it with a deprecation status. An agent can distinguish it from siblings like list_bridge_deposit_addresses or create_deposit without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the strongest possible when-not-to-use signal up front: 'no server implements this route ... so every call fails.' It also tells the agent how to find valid inputs ('Use `fetch_bridge_assets` to discover supported chains' via the schema) and that API credentials are required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_bridge_wallet_challengeA

Step 1 of registering a withdrawal wallet: returns the exact message to sign with that wallet's key (EIP-191 personal_sign) and the expires_at it is valid until. Sign the message in the wallet and pass it and the signature to register_bridge_wallet, or, for the wallet create_wallet made, omit the signature and the server signs. Treat message as opaque: echo it back verbatim, never reformat, re-encode or trim it. The nonce field is informational — sign message, not the nonce, and do not treat the challenge as single-use: until it expires the same signature can be submitted again, which is harmless because the message is bound to your account and to address. Mints nothing and changes no state, so it is safe to call before you have decided to register. A 503 wallet_registration_unavailable means this deployment has no challenge key configured — registration is off there, and retrying will not help. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesEVM address to register as the withdrawal wallet (0x-prefixed, 20 bytes). You must control its key — step 2 proves it.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: no state is minted or changed, the challenge is not single-use but harmless because the message is bound to the account and address, message is opaque and must be echoed verbatim, nonce is informational and must not be signed, 503 wallet_registration_unavailable means registration is disabled, and API credentials are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but almost every clause carries non-obvious operational information (opaque message handling, nonce trap, non-single-use semantics, 503 meaning, auth requirement), and the primary action is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-annotation, no-output-schema tool, the description supplies the return payload (message, expires_at), the downstream call, idempotency semantics, error behavior, and auth needs. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single address parameter, and the description reinforces its role ('the message is bound to ... address') without adding format or validation detail beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Step 1 of registering a withdrawal wallet' that 'returns the exact message to sign' — and explicitly names its companion step, register_bridge_wallet. An agent can distinguish it from register_bridge_wallet and create_wallet without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: sign the message and pass it plus the signature to register_bridge_wallet, or, for the wallet create_wallet made, omit the signature and let the server sign. It also states it is safe to call before deciding to register, and that retrying on a 503 is pointless.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_depositA

Submit a (testnet/synthetic) deposit for the authenticated account via the deposits ledger (POST /deposits — unlike deposit, the deposit is recorded and listable with fetch_deposits). amount is a positive decimal string; asset defaults to USDX. Requires API credentials. This moves REAL collateral on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoAsset symbol. Optional; defaults to "USDX".
amountYesAmount to deposit, as a positive decimal string (> 0).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the HTTP endpoint, that credentials are required, that the deposit is persisted and listable, and warns that it 'moves REAL collateral on the account'. It does not address idempotency, failure/error behavior, or reversibility, which is the remaining gap for a mutating financial call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact clauses, each earning its place: purpose+endpoint, sibling differentiation, parameter recap, and the credential/real-collateral warning. The most important caveat is placed last for emphasis without burying the primary action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation tool with no output schema and no annotations, the description covers purpose, routing, credentials, and side effects. What's missing is confirmation of whether the call is idempotent and what the caller gets back, but the essential decision inputs are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description's restatement of 'amount is a positive decimal string' and 'asset defaults to USDX' adds no syntax, format, or constraint detail beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Submit a ... deposit ... via the deposits ledger') and explicitly distinguishes itself from the sibling `deposit` by noting the deposit is recorded and listable with `fetch_deposits`. An agent can separate this from `deposit`, `deposit_collateral`, and `submit_deposit` without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when this tool is appropriate versus the sibling `deposit` (recorded vs unrecorded), and flags the credential prerequisite. It stops short of explicit when-not-to-use guidance among the many other deposit-related siblings, but the routing signal is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_orderA

Place an order on a market, buy/sell. Supports limit, market, stop-loss (stop_limit / stop_market), take-profit (take_profit_limit / take_profit_market), and trailing (trailing_stop / trailing_limit) orders. Limit-family orders require a price; stop / take-profit orders require a trigger_price; trailing orders require trailing_offset_bps (and trailing_limit also limit_offset_bps). Requires API credentials. This submits a REAL order to the matching engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYesOrder side.
sizeYesOrder quantity in base units, as a positive decimal string (> 0).
typeYesOrder type. `limit` and `market` are unconditional. `stop_limit` / `stop_market` fire when the mark price crosses `trigger_price` in the adverse direction (stop-loss); `take_profit_limit` / `take_profit_market` fire on the favorable direction. `trailing_stop` fires a market order once the mark retraces from its best-seen extreme by `trailing_offset_bps`; `trailing_limit` fires the same way but rests a limit order priced off the fire price by `limit_offset_bps`. Field requirements: limit-family (`limit`, `stop_limit`, `take_profit_limit`) require `price`; stop / take-profit types require `trigger_price`; trailing types require `trailing_offset_bps`.
priceNoLimit price as a positive decimal string (> 0). Required for limit-family orders (`limit`, `stop_limit`, `take_profit_limit`); must be omitted for market, stop_market, take_profit_market, and trailing orders (which are priced by the engine or computed at fire time).
market_idYesMarket id, e.g. "BTC-USDX-PERP".
reduce_onlyNoIf true, only reduces an existing position.
time_in_forceNoTime in force. Defaults to GTC for limit, IOC for market. `PostOnly` rejects the order if it would take liquidity on entry, guaranteeing it rests as a maker.
trigger_priceNoTrigger threshold as a positive decimal string (> 0). Required for stop and take-profit orders (`stop_limit`, `stop_market`, `take_profit_limit`, `take_profit_market`): the order activates once the mark price crosses it — adversely for stops, favorably for take-profits. Must be omitted for other order types.
limit_offset_bpsNoFire-time limit-price offset in basis points (`trailing_limit` only; required together with `trailing_offset_bps`). The rested limit sits at fire_price * (1 + offset) for buys / * (1 - offset) for sells; 0 rests exactly at the fire price.
trailing_offset_bpsNoTrailing trigger offset in basis points (1 bp = 0.01%). Required for trailing orders (`trailing_stop`, `trailing_limit`); must be omitted otherwise. Fires once the mark price retraces from its best-seen extreme by this many bps (0 fires at the first evaluation).

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and mostly does: it discloses that API credentials are required, warns it submits a REAL order to the matching engine, and explains how each order family fires (adverse vs favorable trigger direction, trailing retracement). Missing only secondary traits like rate limits, cancel/replace behavior, or whether submission is idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core action, then order-type coverage, then field requirements, then the credential/real-order warning. Some of the field-requirement text duplicates the schema, but nothing is padded and the highest-value warning is placed last for emphasis.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with no annotations and no output schema, the description covers order-type semantics, credential needs, and the real-order warning well. A brief note on the returned order representation (since there is no output schema) and on rate limits or error behavior would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema itself is unusually detailed about cross-field requirements, defaults, and enum semantics. The description's consolidation of the field-requirement rules (price for limit-family, trigger_price for stops, trailing_offset_bps for trailing) largely restates the schema rather than adding new meaning, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Place an order on a market, buy/sell') and enumerates the eight supported order types, so the agent knows exactly what the tool does. However, it never distinguishes itself from close siblings in the list such as `place_order`, `create_orders`/`place_orders_batch`, or `preview_order`, which is the main thing an agent needs to disambiguate here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit 'use this when' guidance and no mention of alternatives, even though `preview_order`, `place_order`, and the batch variants sit right beside it. The implicit signal that this is a real single-order submission is present ('submits a REAL order'), but the agent is left to infer routing itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ordersB

Submit multiple orders in one request. Each order has the same shape as create_order (market_id, side, type, size, and the type-dependent price / trigger_price / trailing offsets / time_in_force / reduce_only). Requires API credentials. This submits REAL orders to the matching engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
ordersYesOrders to submit (1–100). Each uses the create_order arg shape.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden but does disclose two important traits: credential requirement and that real orders hit the matching engine. It omits batch-specific behavior an agent needs, such as whether the batch is atomic or can partially fail, validation/error semantics, and any rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core action front-loaded and the risk/auth caveat positioned at the end for emphasis. The mid-sentence field enumeration is slightly redundant against the schema but is not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a real-money batch mutation with no annotations and no output schema, the description covers the safety-critical basics but leaves gaps on partial-failure/atomicity behavior and what is returned. It is adequate to call the tool, but not complete for an agent weighing the risk of a 100-order batch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema fully documents the nested order fields, so the baseline is 3. The description adds only a pointer to the `create_order` arg shape and a field list, which is largely a summary of what the schema already specifies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Submit multiple orders in one request'), making the batch nature clear and pointing at the per-order shape of `create_order`. However, it does not distinguish itself from the very similarly named sibling `place_orders_batch`, leaving the agent to guess which batch tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies meaningful context ('Requires API credentials', 'submits REAL orders to the matching engine') that frames the circumstances for use. It never states when to prefer this over `create_order`, `place_order`, or `place_orders_batch`, so routing guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_walletA

Make a new EVM wallet for this server to sign with, on a play-funds target only (testnet, local, or a custom stage declared NEXUS_EXCHANGE_FUNDS=play). The key is saved in this network's section of the Nexus CLI config (0600) and used for the rest of the session; only the address comes back, never the key. After it, login, register_agent and register_bridge_wallet sign for themselves when signature is omitted, so create_wallet, login, create_api_key gets an agent an account with nothing signed elsewhere. If a wallet already exists for this network it is refused unless confirm: true, which overwrites the old key and keeps it nowhere. Stdio server only. Refused on mainnet and on any target whose funds are real or undeclared.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to replace an existing wallet. The old key is lost.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so: key stored 0600 in the network's config section, session-scoped, only the address returned, never the key. It also discloses the destructive overwrite behavior and that the replaced key is unrecoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does and the scope restriction before the operational details. It is dense and one sentence ('so create_wallet, login, create_api_key gets an agent an account...') is grammatically tangled, but nearly every clause conveys a constraint an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter tool with no output schema, the description covers prerequisites, return value (address only), persistence, environment limits, and refusal conditions. Nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the confirm property is already documented as required-to-replace. The description nonetheless adds value by specifying that confirm overwrites the old key and keeps it nowhere, reinforcing irreversibility beyond the schema's terse wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Make a new EVM wallet for this server to sign with') plus an explicit scope restriction (play-funds targets only). It is clearly distinguishable from sibling auth tools like login or register_agent, which it positions as consumers of the wallet rather than creators.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (play-funds targets only), when-not-to-use (refused on mainnet or undeclared/real funds), overwrite precondition (confirm: true required if a wallet exists), and environment constraint (stdio server only). It also names the downstream flow (login, register_agent, register_bridge_wallet, create_api_key) that becomes usable afterward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ws_tokenA

Mint a short-lived (60s, single-use) token for an authenticated per-account WebSocket stream (order/fill/position updates). Uses the current /ws/token endpoint, which supports HMAC keys and registered agents. The response carries ws_endpoint — the URL to connect to for the configured network — so no host has to be guessed. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does well: it discloses the 60s single-use lifetime, the auth requirement, HMAC/registered-agent key support, and the returned ws_endpoint. It omits rate limits, error behavior, and whether minting invalidates prior tokens, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and token properties; the endpoint note and credential requirement each add distinct value. No filler, though the ws_endpoint sentence is slightly more verbose than needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully explains the key return field (ws_endpoint) and the network-specific URL behavior, plus required auth. An agent has enough to call and consume the tool; only minor operational details (rate limits, failure modes) are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. There is nothing parameter-level for the description to add or omit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Mint a short-lived token') plus the exact scope ('authenticated per-account WebSocket stream (order/fill/position updates)'). It implicitly separates itself from the legacy variants by naming the 'current /ws/token endpoint,' but never names get_ws_token or create_ws_token_legacy outright, so an agent still has to infer the routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a prerequisite ('Requires API credentials') and context (per-account authenticated stream), which implies when the tool is appropriate. However, with three closely related siblings (get_ws_token, get_ws_token_legacy, create_ws_token_legacy) no explicit when-to-use/when-not or alternative is given, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ws_token_legacyA

Mint a short-lived (60s, single-use) token for the legacy public /stream endpoint via POST /ws-tokens. Prefer create_ws_token (/ws/token) for new code; this is kept for /stream compatibility. The response carries ws_endpoint for the configured network. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the 60-second lifetime, single-use semantics, required API credentials, and which endpoint it hits. It does not cover failure modes or rate limits, but the key behavioral traits for a token-minting call are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what the tool does, then the routing advice, then auth/response details. Every clause carries information; nothing is redundant against the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description partially compensates by noting the response carries `ws_endpoint` for the configured network and that credentials are required. That covers the essentials for a no-param token mint; only the fuller response shape and error behavior remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema is trivially complete and the baseline is 4. The description adds nothing about inputs because there are none to describe, which is the correct handling for a no-arg tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Mint a short-lived token'), names the exact endpoint (POST /ws-tokens), and explicitly contrasts with the sibling create_ws_token ('/ws/token'). An agent can distinguish this from create_ws_token and get_ws_token_legacy without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance: 'Prefer `create_ws_token` (`/ws/token`) for new code; this is kept for `/stream` compatibility.' It names the alternative and the exact condition (legacy /stream endpoint) that selects this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_api_keyA

Delete (revoke) an HMAC API key by its key id. Destructive: any caller using that key stops working. You must pass confirm: true. Authenticates with the session token from login, or NEXUS_EXCHANGE_SESSION_TOKEN.

ParametersJSON Schema
NameRequiredDescriptionDefault
key_idYesAPI key id to delete, e.g. "nx_a1b2c3d4e5f67890".
confirmNoMust be true to actually delete (guards against typos).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and discloses a critical behavioral trait: 'any caller using that key stops working.' It also states the confirm guard and auth requirement. It stops short of describing irreversibility, error behavior, or the response shape, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences with zero waste: purpose first, then the destructive consequence, then the confirm requirement, then auth. The agent gets the critical constraints in the order it needs them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations and no output schema, the description covers the essential behavioral risks and auth mechanics. It could mention permanence or what happens to in-flight requests, but it is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so key_id and confirm are already fully documented in the schema. The description repeats 'by its key id' and 'must pass confirm: true' but adds no syntax, format, or edge-case meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete (revoke)') and resource ('HMAC API key') with scope ('by its key id'). It clearly distinguishes the tool from create_api_key, list_api_keys, and fetch_api_keys by naming the exact action and identifier format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: destructive operation, required confirm flag, and the authentication source (session token from login or NEXUS_EXCHANGE_SESSION_TOKEN). It does not explicitly compare against alternatives or state when not to use it, but the prerequisites are clearly conveyed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

depositB

Deposit USDX collateral into the authenticated account. amount is a positive decimal string. Requires API credentials. This moves REAL collateral on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesUSDX amount to deposit, as a positive decimal string (> 0).

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose two useful traits: API credentials are required, and this moves REAL collateral (a genuine mutation warning). It stops short of saying whether the deposit is immediate or pending, whether it is reversible, or what the account balance looks like afterwards.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with identity, followed by parameter and precondition/warning detail. Efficient, though the amount restatement duplicates the schema wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a real-funds mutation with no annotations and no output schema, the description covers purpose, auth requirement, and the fund-movement warning. It omits the settlement behavior and any link to deposit-target tooling, leaving an agent without a complete picture of what happens after the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is fully documented in the schema, so the baseline is 3. The description's restatement of 'positive decimal string' adds no meaning beyond the schema's '(> 0)' constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Deposit USDX collateral into the authenticated account'), which is clear on its own. However, the sibling list contains several near-identical deposit tools (deposit_collateral, submit_deposit, create_deposit, get_deposit_target) and the description makes no attempt to distinguish this one from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a precondition ('Requires API credentials') but gives no guidance on when to choose this tool over deposit_collateral, submit_deposit, or create_deposit, nor any when-not-to-use condition. An agent facing these sibling names has nothing to route on.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deposit_collateralA

Deprecated: use deposit. Deposit USDX collateral into the authenticated account. amount is a positive decimal string. Requires API credentials. This moves REAL collateral on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesUSDX amount to deposit, as a positive decimal string (> 0).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the auth requirement ('Requires API credentials') and the real-consequence nature ('moves REAL collateral on the account'). It omits reversibility, confirmation/limits, and any error behavior, so it falls short of full coverage but adds meaningful non-obvious context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short clauses, front-loaded with the deprecation warning the agent needs most, then scope, parameter constraint, auth, and risk. Zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with no annotations and no output schema, the description covers purpose, auth, deprecation, and risk. It stops short of describing what the resulting collateral/balance state looks like or failure modes, but nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents `amount` as a positive decimal string (> 0). The description's 'positive decimal string' restates that constraint without adding format, precision, or unit detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb and resource (deposit USDX collateral into the authenticated account) and immediately flags itself as deprecated, redirecting to the sibling `deposit`. An agent can distinguish it from `create_deposit`, `submit_deposit`, and `deposit` without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when NOT to use it ('Deprecated: use `deposit`') and names the replacement tool. That is exactly the when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_orderA

Amend a resting order's price and/or size in one atomic cancel-replace operation. At least one of price or size is required; a pre-trade margin check is applied to the replacement before it is accepted. Liquidation orders cannot be amended. Requires API credentials. This modifies a REAL order on the matching engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoNew order size in base units as a positive decimal string (> 0). Optional if `price` is given.
priceNoNew limit price as a positive decimal string (> 0). Optional if `size` is given.
order_idYesId of the resting order to amend.
market_idYesMarket the order rests on (required for routing).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it discloses atomic cancel-replace semantics, a pre-trade margin check on the replacement, a liquidation-order exclusion, credential requirements, and warns that this touches a REAL order on the matching engine. It stops short of stating consequences such as loss of queue/time priority or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the operation and its mechanism, followed by requirements and constraints. No filler and no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers authentication, atomicity, validation, and exclusions adequately. It omits what a rejected replacement does to the original resting order and does not hint at the response shape, which leaves a small gap given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a rule the schema does not encode: only order_id and market_id are marked required, yet the text imposes a conditional requirement that at least one of price or size be supplied. That is genuine added meaning over the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('Amend a resting order's price and/or size') and characterizes the mechanism as 'one atomic cancel-replace operation', which separates it from create_order, cancel_order, and batch siblings. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit constraints on use: at least one of price/size required, liquidation orders cannot be amended, and API credentials are required. It does not name an alternative tool or say when to prefer a cancel+create over an amend, but the preconditions are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_account_stateA

Get the authenticated account's full state in ONE call: the portfolio summary aggregates plus every open position ({ summary, positions }). Prefer this over pairing fetch_account_summary with fetch_positions — both parts come from one coherent read, so summary.open_positions_count always matches the positions length. If the engine-authoritative margin view is unavailable this fails closed with a 502 (authoritative_margin_unavailable) rather than returning an estimate: retry after a short delay, do NOT read the error as a flat or empty account. Positions carry per-position risk detail. notional_value, margin_used, roe, max_leverage, and leverage are derived from mirrored state, so any of them can be null with a companion <field>_error naming the reason (e.g. mark_price_unavailable); treat null as UNKNOWN, never as zero. leverage is currently always null (leverage_error: margin_state_not_mirrored) — do not infer it from margin_used. funding_paid is NOT one of those: it is always present and has no _error companion, so its "0" is a real zero (no funding accrued), not unknown. It is paid-positive — a negative value means funding was received. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: fails-closed 502 with reason code, retry guidance, per-field null semantics with companion `<field>_error` codes, the always-null `leverage` caveat, the funding_paid paid-positive convention, and the API-credential requirement. This is far beyond what any structured field provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the sibling preference, then dense caveats. Nearly every sentence carries distinct operational value, though the leverage/funding_paid detail is heavy enough that the paragraph is longer than strictly minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must convey the return contract itself, and it does: the `{ summary, positions }` shape, nullability of derived fields, error-companion fields, and failure mode. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 per the rubric; there is nothing to disambiguate and the description correctly spends no space on parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get the authenticated account's full state') and immediately scopes it as a single-call composite returning `{ summary, positions }`. It explicitly differentiates from the two siblings it could be confused with (fetch_account_summary, fetch_positions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit preference rule: use this instead of pairing fetch_account_summary with fetch_positions, and explains why (one coherent read so open_positions_count matches positions length). Also specifies retry behavior on 502 and that the error must not be read as an empty account.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_account_summaryA

Get the authenticated account's portfolio summary (equity, margin usage, PnL rollup) — a richer view than fetch_balance. Includes withdrawable: the engine-authoritative free margin floored at zero, i.e. exactly what can leave the account (never negative). Because withdrawable comes from that authoritative margin view, this call fails closed with a 502 (authoritative_margin_unavailable) when the view is unavailable rather than returning a local estimate: retry after a short delay, do NOT read the error as a flat or empty account. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the fail-closed 502 `authoritative_margin_unavailable` behavior, instructs a retry rather than misreading the error as an empty account, defines `withdrawable` (engine-authoritative free margin floored at zero, never negative), and notes the API-credential requirement. This is exactly the kind of context annotations would otherwise supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the differentiating detail and the failure-mode warning. The prose is dense and occasionally parenthetical-heavy, but every sentence carries operational value; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must explain return values — and it does, naming the equity/margin/PnL rollup and precisely defining `withdrawable`. Combined with the 502 failure disclosure and credential note, an agent has everything needed to call and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which sets the baseline at 4; there is nothing in the schema for the description to clarify or compensate for. The descriptions of returned fields (`withdrawable`) are a bonus but belong to transparency, not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (authenticated account's portfolio summary), enumerates its contents (equity, margin usage, PnL rollup), and explicitly positions it against the sibling `fetch_balance` as a richer view. An agent can select it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative (`fetch_balance`) and characterizes when this tool wins (richer portfolio view). It stops short of stating when NOT to use it or spelling out a decision rule, but the comparative framing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_adl_eventsA

Get the auto-deleveraging (ADL) settlement history for one market — the events where the engine force-closed positions to cover a shortfall. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events to return (max 1000).
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose one genuinely useful fact: API credentials are required. It does not say whether the operation is read-only (implied by 'history'), how results are ordered, whether the limit paginates, or how far back history extends — gaps that matter for a data-retrieval call with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the purpose, spends a few words defining ADL accurately, then appends the hard constraint (credentials). Every clause earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only history lookup with no output schema, the description covers what the data is and the auth requirement. It leaves the relationship to the three sibling ADL tools unresolved and says nothing about result ordering or pagination, which is the main remaining ambiguity for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with market_id documented (including an example format) and limit documented with its max. The description adds only the 'one market' scoping, which the schema already enforces via the required market_id; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (ADL settlement history) and even explains the domain concept — force-closed positions covering a shortfall — so an agent unfamiliar with ADL still understands the return. The scope phrase 'for one market' implicitly separates it from account-scoped siblings like fetch_adl_history and get_adl_history, but it never names them, which matters given three near-identical ADL tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'for one market' scope constraint implies when this variant applies rather than the account-wide ones, which is some inferred guidance. There is no explicit statement of when to use this versus fetch_adl_history, get_adl_history, or get_market_adl_events, and no exclusion criteria or prerequisites beyond credentials.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_adl_historyA

Get the auto-deleveraging (ADL) events that touched a given account. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 1000, default 100).
addressYesAccount address (0x-prefixed hex).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden; it does disclose the authentication requirement, which is genuinely valuable and not derivable from the schema. It still omits any hint of result ordering, pagination semantics beyond the schema's limit field, or whether history is bounded in time.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the core purpose front-loaded before the credential prerequisite. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter account-scoped read tool with no output schema and no annotations, the description covers what it fetches, whom it fetches for, and the auth requirement. Minor gaps remain around result ordering/volume and how it relates to the account-vs-market ADL siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (both 'address' and 'limit' are documented with format and bounds), so the schema already does the heavy lifting and the baseline is 3. The description adds no parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') plus the exact resource (auto-deleveraging events) and scopes it to 'a given account', which implicitly separates it from the market-wide siblings fetch_adl_events and get_market_adl_events. It does not, however, name those siblings or explain how it differs from the near-duplicate get_adl_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The prerequisite ('Requires API credentials') is disclosed, which is useful context, but there is no explicit when-to-use guidance and no mention of when to prefer fetch_adl_events or get_adl_history instead. Usage is only implied by the account-scoped framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_agentsA

List the delegated agent keys registered for the authenticated wallet (address, label, expiry). Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose the auth prerequisite and the shape of the returned data, which is genuinely useful, but it says nothing about pagination, ordering, rate limits, or whether the listing is scoped beyond the authenticated wallet.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the operation and resource, with the returned fields tucked into a compact parenthetical. No filler text and nothing redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description appropriately compensates by naming the returned fields (address, label, expiry) and the auth requirement. The one substantive omission is any resolution of its overlap with the sibling `list_agents`.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is an empty object, so there is nothing for the description to disambiguate. Baseline 4 applies per the rubric for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the delegated agent keys registered for the authenticated wallet') and even enumerates the returned fields (address, label, expiry). It is clear on its own, but it does nothing to distinguish itself from the sibling `list_agents`, which appears to overlap heavily and leaves an agent guessing which to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is 'Requires API credentials,' which is a precondition rather than a when-to-use rule. With closely-named siblings like `list_agents`, `register_agent`, and `revoke_agent` present, the description should say when this tool is preferred over `list_agents`; it does not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_api_keysA

List the HMAC API keys for the authenticated wallet (key ids and metadata; never the secrets). Authenticates with the session token from login, or NEXUS_EXCHANGE_SESSION_TOKEN.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully states that secrets are never returned and how authentication works, but it omits read-only explicitness, pagination behavior, rate limits, and ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no waste. The primary listing behavior and security constraint are front-loaded, with authentication details following immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with no output schema, the description covers scope, returned content, secret exclusion, and authentication. It lacks sibling differentiation and pagination or limit details, but the core invocation needs are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4. The empty schema offers no additional parameter semantics to document or explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (HMAC API keys for the authenticated wallet), and clarifies the returned fields as key ids and metadata. It does not differentiate itself from sibling tools such as list_api_keys, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by scoping the result to the authenticated wallet and supplies an authentication prerequisite (session token from login or NEXUS_EXCHANGE_SESSION_TOKEN). However, it gives no explicit when-to-use guidance or comparison against key-listing siblings like list_api_keys.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_balanceA

Get the authenticated account snapshot: collateral balance, equity, and positions. Positions carry per-position risk detail. notional_value, margin_used, roe, max_leverage, and leverage are derived from mirrored state, so any of them can be null with a companion <field>_error naming the reason (e.g. mark_price_unavailable); treat null as UNKNOWN, never as zero. leverage is currently always null (leverage_error: margin_state_not_mirrored) — do not infer it from margin_used. funding_paid is NOT one of those: it is always present and has no _error companion, so its "0" is a real zero (no funding accrued), not unknown. It is paid-positive — a negative value means funding was received. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses the auth requirement, that several fields are derived from mirrored state and may be null with a companion <field>_error, that null means UNKNOWN not zero, that leverage is always null, and that funding_paid is always present and paid-positive. This is unusually rich semantic disclosure that goes well beyond field naming.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by progressively finer caveats about null handling and sign conventions. Dense but each sentence carries non-obvious information; the funding_paid contrast may reiterate a point, keeping it just short of fully tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description must explain the tricky return fields, and it covers the highest-risk ones (null semantics, leverage always null, funding_paid sign). It does not describe the overall shape of 'positions' or equity composition, and offers no routing against sibling snapshots, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so per the rules the baseline is 4 and there is nothing for the description to clarify. The description's detailed semantics instead cover the return fields, which is appropriate given the absence of both a schema and an output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Get the authenticated account snapshot: collateral balance, equity, and positions.' An agent immediately knows this is a read of account state. However, it never distinguishes itself from the many overlapping siblings (fetch_account_summary, fetch_account_state, get_balance, fetch_positions, get_account_state), so the agent cannot tell which near-duplicate to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage signal is 'Requires API credentials.' There is no when-to-use vs when-not guidance, no mention of alternatives like fetch_account_state or fetch_positions, and no scenario that selects this tool over its many lookalike siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_bridge_assetsA

List the bridgeable chains and, per chain, the depositable assets (USDC, USDX) and withdrawable assets (USDX) with their decimals, minimum amounts, required confirmations, and fees. Public catalog — no credentials needed. Use it to discover valid chain values for the other bridge tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose the key behavioral traits: it is a public catalog requiring no credentials, and it enumerates what is returned (decimals, minimums, confirmations, fees). It does not mention rate limits, caching, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the resource and its payload, followed by the auth model and the discovery use case. The parenthetical asset lists are dense but each detail earns its place by documenting an otherwise-unspecified return shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must document the return value, and it does: chains, per-chain depositable/withdrawable assets, decimals, minimum amounts, confirmations, and fees. Nothing an agent needs to call a zero-param catalog tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no parameter semantics for the description to add. The description appropriately spends its words on the return content instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('bridgeable chains ... depositable/withdrawable assets'), and enumerates the per-chain fields returned. It does not differentiate from the near-identical sibling get_bridge_assets, which appears in the sibling list, so an agent has no stated basis for choosing between the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear selection context: 'Use it to discover valid chain values for the other bridge tools,' which tells the agent exactly when to reach for it. It stops short of naming when-not to use it or explicitly routing against the duplicate get_bridge_assets sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_bridge_depositB

Fetch a single cross-chain (bridge) deposit by id. Only deposits owned by the authenticated account are returned. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDeposit identifier.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose two useful behavioral traits: results are scoped to deposits owned by the authenticated account, and API credentials are required. However, it says nothing about error behavior (e.g., not-found vs not-owned deposits), rate limits, or what a successful response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the ownership scope and auth requirement. Every sentence carries information and there is no padding, though the structure is plain prose rather than a tight single statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-resource read with no output schema, the description covers purpose, scope, and auth, which is most of what is needed. It stops short of describing the returned deposit shape or failure modes, leaving a gap an agent might need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'id' parameter is fully documented in the schema. The description merely restates 'by id' without adding format, prefix, or validity semantics, so it does not go beyond structured data. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: fetch a single cross-chain (bridge) deposit. The word 'single' implicitly differentiates it from the list-style siblings (fetch_bridge_deposits, list_bridge_deposits), but no sibling is named explicitly, so an agent must still infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'single ... by id' suggests this is the lookup-by-identifier counterpart to the listing tools, but there is no explicit statement of when to use this instead of fetch_bridge_deposits/list_bridge_deposits, nor any prerequisite or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_bridge_depositsA

List the authenticated account's cross-chain (bridge) deposits, newest first. Optionally filter by source chain, asset (USDC|USDX), or status (detected|confirming|credited|failed). Distinct from fetch_deposits, which lists the account's ledger deposits. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoFilter by deposited asset. Optional.
chainNoFilter by source chain. Optional.
limitNoMaximum number of records to return (max 100).
statusNoFilter by deposit status. Optional.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and it does disclose the read semantics ('List'), result ordering ('newest first'), and an auth requirement ('Requires API credentials'). It does not cover pagination/truncation behavior or error conditions, which is the remaining gap for a paginated list endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the primary purpose plus ordering are front-loaded before the optional filters and the sibling disambiguation. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, zero-required list tool with no annotations and no output schema, the description covers purpose, filtering, ordering, auth, and sibling differentiation. The only shortfall is that return contents and pagination limits (`limit` max 100) are left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters and both enums are already documented. The description restates the filter values (chain, asset USDC|USDX, status detected|confirming|credited|failed) but adds no syntax or semantics beyond the schema, and never mentions `limit`. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List ... cross-chain (bridge) deposits') and adds scope detail ('authenticated account's', 'newest first'). It explicitly names the sibling it is not (`fetch_deposits`) and explains the distinction (ledger vs bridge), so an agent can disambiguate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the selection context directly: use this for bridge deposits, not ledger deposits, which is called out by name via `fetch_deposits`. The optional filter dimensions (chain, asset, status) further describe when to narrow results. It also states the prerequisite ('Requires API credentials').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_cancel_on_disconnectA

Get the authenticated account's cancel-on-disconnect (COD) status. COD is an opt-in dead man's switch: when the account's last authenticated WebSocket connection drops and does not reconnect within the grace window, the exchange cancels all of the account's resting orders. Returns enabled (the account's own opt-in), active (whether it will actually fire — the opt-in AND the exchange-side feature switch), and grace_secs (the reconnect window in seconds, null when the feature is unavailable). Clients that trade purely over REST and never open a WebSocket are not covered. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and does so well: it explains the dead man's switch semantics, states the credential requirement, distinguishes `enabled` (account opt-in) from `active` (opt-in AND exchange switch), and clarifies that `grace_secs` is null when the feature is unavailable. It omits rate-limit and caching behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then structured to explain the concept and the three returned fields in order. The sentences are dense but each carries information; the COD explainer is slightly long for a status getter, but nothing is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe the return shape, and it does so explicitly for all three fields including the null case. It also covers auth requirements and the scope caveat for REST-only clients, leaving nothing an agent needs before calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter surface for the description to clarify. Baseline 4 applies; no parameter-level ambiguity exists to penalize.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Get the authenticated account's cancel-on-disconnect (COD) status,' and then defines what COD actually is. An agent can grasp the purpose immediately. It falls short of a 5 only because the sibling list contains a near-identical `get_cancel_on_disconnect`, and the description never distinguishes itself from that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied ('Requires API credentials,' plus the note that REST-only traders are not covered), which scopes who this is relevant for. However, there is no explicit when-to-use/when-not statement and neither `set_cancel_on_disconnect` nor `get_cancel_on_disconnect` is named as a counterpart, so the agent must infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_depositsB

List the authenticated account's deposit history. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 100).

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does add genuine behavioral context by noting API credentials are required (useful given public siblings like fetch_markets), but it says nothing about pagination behavior, default ordering, rate limits, or result shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the operation and followed by the auth caveat; no filler. It is appropriately terse for a one-parameter list tool, though the brevity leaves disambiguation gaps that could have been closed in the same space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool this would nearly suffice, but the presence of a near-duplicate sibling ('list_deposits') and no output schema means the description should clarify how this differs and what the records contain. Neither is addressed, leaving the agent unable to confidently choose or interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'limit' parameter is fully documented in the schema (max 100), so the baseline of 3 applies. The description adds no format, default, or semantics beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (deposit history) scoped to the authenticated account, plus the credential requirement. However, it does nothing to distinguish itself from the near-identical sibling 'list_deposits' (and the withdrawals counterparts), so an agent cannot tell the two apart from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use, when-not-to-use, or alternative routing. With a sibling 'list_deposits' that appears functionally equivalent in the same toolset, the absence of any disambiguation guidance is a real selection hazard.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_equity_historyA

Get the authenticated account's equity time-series (5s cadence, ~1h window), oldest first. For a longer window, or for PnL and volume series alongside equity, use fetch_portfolio_history. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of points per page (max 720).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden and does it well: it discloses the ~1h window bound, the 5s sampling cadence, ordering, the credential requirement, and the exact pagination termination condition. These are non-obvious behavioral traits an agent could not infer from the name or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the most decision-relevant fact (the narrow ~1h window) and the alternative before the pagination detail. Every sentence carries information, though the pagination explanation runs slightly long relative to what the schema cursor description already states.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description fully documents the return shape (`{ items, next_cursor }`) and the meaning of each field, plus the loop needed to consume it. For a two-parameter read tool, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it clarifies that `limit` sizes ONE page rather than a total, and frames `cursor` as the value passed back from the previous response. The mechanics of the pagination loop are the notable addition beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (the authenticated account's equity time-series) with its defining constraints: 5s cadence, ~1h window, oldest-first ordering. It explicitly distinguishes itself from the sibling `fetch_portfolio_history`, so an agent can disambiguate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use the alternative ('For a longer window, or for PnL and volume series alongside equity, use fetch_portfolio_history') and gives the operational procedure for exhausting history (call repeatedly with the previous next_cursor until null). Conditions and exclusions are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_funding_historyA

Get the authenticated account's funding-payment history, newest first, optionally filtered to a single market. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 1000).
market_idNoMarket id to filter to, e.g. "BTC-USDX-PERP". Optional.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses the auth requirement and that results are returned newest first, but says nothing about pagination/cursor behavior, rate limits, or what a record contains. For a read tool with zero annotation coverage, that is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; scope and ordering come first and the credential note closes it out. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does enough for a simple filtered read: it names the resource, the scope, the ordering, and the auth prerequisite. Missing only pagination/return-shape detail, a minor gap for a two-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented (limit cap of 1000, market_id example format). The description only restates the optional market filter and adds the 'newest first' ordering hint, adding little beyond the structured data. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'the authenticated account's funding-payment history', plus ordering and an optional market filter. It is clear what the tool returns, but it does nothing to distinguish itself from the near-identical siblings get_funding_history and get_funding_payments, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the selection context ('authenticated account's', 'optionally filtered to a single market') and a prerequisite ('Requires API credentials'), which implies when it applies. However, it never names or excludes its obvious alternatives (get_funding_history, get_funding_payments, fetch_funding_samples), leaving the agent to guess which funding tool to call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_funding_rate_historyA

Get the funding-rate history for one perpetual market. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of funding records to return (max 1000, default 300).
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does add one genuinely useful behavioral fact: no credentials are required. It is silent on rate limits, pagination/ordering of the history, and whether the series is bounded or continuous, so the disclosure is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the core purpose front-loaded and the auth caveat immediately after. Nothing here can be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple public read tool with 100% schema coverage and no output schema, the description covers purpose, subject scope, and auth requirements, which is close to sufficient. The one omission that matters is disambiguation from the many similarly named funding-history siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (both limit and market_id are documented in-schema, including the max-1000/default-300 behavior), so the baseline is 3. The description adds only the 'one market at a time' scoping constraint, which is meaningful but already implied by the required market_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Get the funding-rate history') and scopes it to 'one perpetual market', so the operation is unambiguous. It fails to differentiate from near-identically named siblings such as fetch_funding_history, get_funding_history, fetch_funding_samples and get_funding_samples, which is a real gap given the crowded namespace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the access condition ('Public — no credentials needed'), which tells the agent this can be called without auth. However, it never says when to prefer this over fetch_funding_history, get_funding_history, or fetch_funding_samples, leaving the agent to guess among several plausible alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_funding_samplesA

Get the dense per-tick funding premium-index samples for one perpetual market (60s cadence, up to 480 points = 8h). Finer-grained than fetch_funding_rate_history, which returns the settled hourly rates. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of samples to return (max 480).
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It states public/no credentials, 60s cadence, and max 480 points / 8h, which tells the agent this is a safe public read, but it does not explicitly state read-only/no side effects or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no waste. The key granularity and scope are front-loaded before the alternative-tool comparison.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter public read, it supplies cadence, time window, credential requirement, and alternative tool. The main missing piece is any description of returned sample structure, since no output schema exists, and it does not differentiate from get_funding_samples.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by tying the limit to 'up to 480 points = 8h' and scoping the market_id to one perpetual market.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Combines a specific verb ('Get') with a precise resource ('dense per-tick funding premium-index samples') and scope ('one perpetual market'). It clearly distinguishes itself from fetch_funding_rate_history by granularity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names fetch_funding_rate_history as the settled-hourly alternative and gives the selection condition (finer-grained per-tick samples), plus public/no-credentials context. However, it does not address the similarly named get_funding_samples sibling or state explicit when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_market_risk_paramsA

Get one market's risk parameters: margin requirements and maximum leverage, from the engine's market registry. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does usefully disclose the auth profile ('Public — no credentials needed') and the data source (engine's market registry), which implies a read-only, non-mutating call. It says nothing about behavior for invalid/delisted markets, caching, or rate limits, so the safety picture is only partially filled in.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight clauses, front-loaded with the verb and resource and followed by the scope and auth note. No filler or redundancy; every phrase carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly enumerates the return contents (margin requirements and maximum leverage), which is the key thing an agent needs. It is nearly complete for a simple single-parameter lookup, missing only failure/edge-case behavior for unknown market ids.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single market_id parameter, including a concrete format example ("BTC-USDX-PERP"). The description adds no syntax, casing, or validity rules beyond that, so the schema does all the work; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus a scoped resource ('one market's risk parameters') with the actual payload named: margin requirements and maximum leverage. It also names the source of truth (the engine's market registry), which differentiates it from neighbors such as list_market_specs, get_mark_price, and get_market_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes context ('one market', 'public — no credentials needed') so an agent can infer this is a per-market lookup on the read path. However it never says when to prefer this over list_market_specs or get_market_status, nor does it state what to do if the market id is unknown. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_marketsA

List all markets with their static specs (tick size, lot size, leverage, contract details) — the raw market definitions without live summary stats. Public — no credentials needed. (Use fetch_markets_summary for live mark price / volume / funding.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the key behavioral traits: this is a read-only public call needing no credentials, and it returns static definitions rather than live summary stats. It stops short of covering pagination, response size, or error behavior, which are minor for a zero-parameter listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: what it returns, the auth posture, and the routing hint. The most decision-relevant content (static specs vs live stats) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description should convey what comes back, and it does by naming the returned fields (tick size, lot size, leverage, contract details). Nothing essential is missing, though the field list is illustrative rather than exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to clarify beyond confirming the call is unconditional. Baseline of 4 applies for a 0-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all markets') and immediately enumerates what the listing contains (tick size, lot size, leverage, contract details). It explicitly separates itself from fetch_markets_summary, so an agent can pick the right tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both the positive condition (static specs, no live stats) and the explicit alternative ('Use fetch_markets_summary for live mark price / volume / funding'). It also states the auth posture (public, no credentials), which is actionable routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_markets_summaryA

List all tradable markets with their current summary (mark price, 24h change, volume, open interest, funding). Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden; it does usefully disclose that the endpoint is public and requires no credentials, and it names the returned fields. It does not say whether the call is rate-limited, paginated, or how large the response may be, and read-onlyness is only implied by 'List'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence plus an auth note, with no filler. The most useful information (what it lists and what fields it returns) comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial zero-param, no-auth listing tool with no output schema, the description adequately covers the return payload and access model. The remaining gap is sibling disambiguation, which no output schema or annotation would have supplied anyway.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4 and there is nothing for the description to compensate for. No parameter information is missing or required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (tradable markets) and enumerates the payload (mark price, 24h change, volume, open interest, funding), so the agent knows what data comes back. However, it does not distinguish this from near-identical siblings such as fetch_markets, list_markets, fetch_tickers, or fetch_mark_price, which is the main disambiguation need here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or named alternative guidance at all, despite a crowded sibling set of market-data tools. 'Public — no credentials needed' hints at the auth context but does not tell the agent why to pick this tool over fetch_tickers or fetch_markets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_market_statusB

Get a market's trading status and halt info (whether trading is open, halted, or in auction). Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses the auth profile (public, no credentials) and qualitatively describes what is returned, but says nothing about rate limits, caching, or response format. It adds genuine value over the bare name but does not fully cover behavior for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, purpose front-loaded and the access constraint second. Every clause carries information — nothing is filler or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with full schema coverage and no output schema, the description is close to complete: it conveys what is fetched, the possible states, and the no-auth property. The one omission is disambiguation from the 'get_market_status' sibling, which an agent selecting between the two would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the single 'market_id' parameter is already documented with an example ("BTC-USDX-PERP") in the schema. The description adds no parameter-level detail, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (a market's trading status) and enumerates the returned states (open, halted, auction), so the agent knows exactly what it retrieves. However, it does not differentiate from the near-identical sibling 'get_market_status', which also exists in the tool list, leaving ambiguity about which to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no routing to alternatives. Given a sibling 'get_market_status' with essentially the same purpose, the absence of any disambiguation is a real gap. The only contextual cue is 'Public — no credentials needed', which is a property, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_mark_priceA

Get the current mark price for one market. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose the key trait that this is a public, unauthenticated read, which is genuinely valuable; but it says nothing about error behavior for an invalid market_id, snapshot freshness, or whether the result reflects live or last-known state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and scope, followed by the access constraint. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read with a fully documented schema and no output schema, the description covers action, scope, and auth — nearly enough. The remaining gap is the absence of any disambiguation from get_mark_price, which matters in this densely populated sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents market_id with an example ("BTC-USDX-PERP"), so the baseline is 3. The description's "one market" phrasing adds no syntax or format detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get the current mark price") and constrains scope to "one market," which is clear. However, it does not distinguish itself from the near-identical sibling get_mark_price (or from fetch_tickers/get_ticker), so an agent cannot tell from the text alone which of these to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Public — no credentials needed" gives useful access context, but there is no when-to-use guidance and no routing versus the sibling get_mark_price or the broader ticker tools. Usage is only implied from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_my_tradesA

List the authenticated account's fills (executed trades), newest first. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of fills per page (max 1000).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the whole burden and mostly succeeds: it discloses the auth requirement, the sort order (newest first), the response shape, and the full pagination contract including that cursors are opaque and must not be constructed. It does not mention rate limits or explicitly confirm the operation is read-only, leaving minor gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool returns and how to page through it; every sentence either states scope, the return contract, or a usage rule. Slight overlap with the schema's `cursor` prose, but the description adds the loop-level view the per-field text cannot.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description takes on return-value documentation and does so completely — naming `items` and `next_cursor` and their roles. Auth, ordering, and pagination termination are all covered; nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema — notably that `limit` bounds ONE page rather than a total, and that the pagination loop terminates on a null `next_cursor`. That is exactly the kind of clarification a schema cannot easily express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'List the authenticated account's fills (executed trades)' — and the parenthetical resolves the ambiguous term 'fills'. The qualifier 'authenticated account's' cleanly separates it from the market-wide `fetch_trades`/`get_trades` siblings without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operational guidance for the pagination loop: keep calling with `cursor: <previous next_cursor>` until null, and warns that `limit` is per page, not a total. It states the credential requirement. It stops short of naming a specific alternative for public/market-wide trade history, so it lands at clear-context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_ohlcvA

Get OHLCV candles for one market. Public — no credentials needed. Timeframe is one of 1s, 1m, 5m, 1h (default 1m).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of candles to return (max 1000).
market_idYesMarket id, e.g. "BTC-USDX-PERP".
timeframeNoCandle interval. Defaults to 1m.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the key trait — it is a public, credential-free read — plus the default timeframe. It omits other relevant behavior: ordering of returned candles, how limit interacts with defaults, and whether older candles are truncated or rejected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action and the scoping constraint front-loaded ahead of the auth note and default timeframe.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must carry more weight, yet it says nothing about the shape of a candle record or pagination behavior. It covers market scope, auth, and timeframe adequately but is thin for a data-fetch tool with an opaque return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents market_id, limit (max 1000) and the timeframe enum plus its default. The description only restates the timeframe options and default without adding format, syntax, or edge-case meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get OHLCV candles") and narrows scope to "one market", so the agent knows it is a single-market candle fetch. However, it never distinguishes itself from the near-identical sibling get_candles, leaving the agent to guess which one to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Public — no credentials needed" tells the agent this is usable without auth, which is real usage context, but there is no when-to-use/when-not guidance and no mention of the alternative tools (get_candles, get_trades, fetch_trades) that overlap in scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_open_ordersB

Get the authenticated account's resting (open) orders. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does disclose one real constraint: the call requires API credentials. It does not mention pagination, ordering, rate limits, or the shape of the returned order records, which is the remaining gap for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the purpose leading and the auth prerequisite following. Nothing could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool this covers the essentials, but with no output schema, no annotations, and an indistinguishable sibling (get_open_orders), the description should say more about what is returned and how it differs from that sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No conflicting or undocumented inputs exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get ... resting (open) orders') and clarifies the scope as open rather than historical or all orders. However, it does not distinguish itself from the near-identical sibling get_open_orders, leaving an agent unable to choose between the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence implies authenticated-account usage but gives no when-to-use guidance, no exclusions, and no routing to the many alternatives (get_open_orders, fetch_orders, fetch_order, get_order_history). With a duplicate sibling present, this omission is costly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_orderA

Get a single order by its id (status, fills, remaining size). Pass market_id when known — the spec marks it required for routing, though the gateway currently resolves the order without it. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesOrder id to look up.
market_idNoMarket the order rests on (used for routing). Optional but recommended.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it does meaningful work: it declares API credentials are required and discloses a real behavioral quirk — the spec marks `market_id` required for routing while the gateway currently resolves without it. It omits error behavior and rate limiting, but the auth and spec-vs-implementation disclosure is above baseline for an unannotated read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses, front-loaded with what the tool returns, then the parameter nuance and the auth note. No filler; the em-dash aside is informative rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned fields, and with no annotations it covers auth and the parameter caveat. The main gap is sibling disambiguation against `get_order`, which matters given how many order-readers exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: it explains why `market_id` matters (routing) and clarifies the conflict between the spec's requirement and actual gateway behavior, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Get a single order by its id') plus the return surface (status, fills, remaining size). It does not distinguish itself from the near-identical sibling `get_order` or from `fetch_orders`/`get_open_orders`, leaving an agent to guess which order-reader to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit guidance for when to supply `market_id` and flags the credential requirement, but offers no when-to-use guidance relative to `get_order`, `fetch_orders`, or `get_open_orders`. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_order_bookB

Get the current order book (bids/asks with price + size) for one market. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the key behavioral fact that this is a public, credential-free endpoint plus the qualitative content of the response (bids/asks with price + size). It does not say whether the book is a snapshot or streamed, whether depth is limited, or how often it updates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the resource and scope and closed with the access requirement. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, public, single-parameter read tool with no output schema, the description supplies the essential missing pieces: access requirement and the shape of the returned data. It falls short only on depth/update characteristics an agent might want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required parameter, so the schema already documents market_id fully. The description's 'for one market' adds only a restatement of cardinality, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get the current order book) and constrains scope to one market, with a note on the returned fields. However, it never distinguishes itself from the near-identical sibling get_orderbook (or the ticker/trades tools), which an agent would plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as get_orderbook, even though a sibling with an almost identical name exists. 'Public — no credentials needed' gives a contextual cue but not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_ordersA

Get the authenticated account's terminal-status order history (filled / cancelled / rejected / expired), newest first. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records per page (max 500).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does it well: it discloses the read-only nature implicitly, the auth requirement, the ordering (newest first), the pagination termination rule, and the exact return envelope. It stops short of rate limits, error behavior, and what happens to non-terminal orders (error vs empty).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then the return shape, then the iteration procedure. Every sentence earns its place; nothing is redundant filler and the pagination instructions are placed after the reader knows what the fields mean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description correctly supplies the return contract ({ items, next_cursor }) and the termination condition, plus auth requirements. It is close to complete, with only error cases and the distinction from sibling history tools left uncovered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so baseline is 3, but the description adds a nuance the schema lacks: 'limit sets the size of ONE page, not a total', which prevents a common misuse. It also reinforces cursor opacity and the omit-for-first-page rule that the schema already states, so the added value is real but modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource scoped to 'terminal-status order history (filled / cancelled / rejected / expired), newest first', which tells the agent it excludes live/open orders. However, the sibling list contains near-duplicates (fetch_order_history, get_order_history) that are never mentioned, so the agent cannot tell from the description alone which of the three to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong operational guidance for iteration ('keep calling with cursor until next_cursor is null') and an auth prerequisite ('Requires API credentials'), but usage here is about how to page, not when to choose this tool over fetch_order_history, get_order_history, or fetch_open_orders. No explicit alternatives or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_portfolio_historyA

Get the authenticated account's portfolio time-series — equity, cumulative trading PnL, and cumulative traded volume — over a selectable window, oldest first. Richer than fetch_equity_history (equity only, 5s cadence, ~1h); both derive equity from the same source, so the two never disagree. Each window sets its own downsample cadence and point capacity: day 5m/288, week 1h/168, month 6h/120, all 1d/366. pnl is deposit-neutral (trading performance only) and volume is monotonically non-decreasing. This is a HEAVY read — the gateway charges it 5x an ordinary GET, so a single call draws about five requests' worth of budget and the remaining reported by fetch_rate_limit_status (counted in ordinary requests) drops by ~5. Poll it sparingly. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of points to return (1–366). Clamped server-side to the selected window's capacity. Omit for the full window.
windowNoTime window to return, which also selects the cadence and point capacity. Defaults to `day` server-side when omitted.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does so richly: it discloses the 5x gateway charge and the resulting ~5 drop in `remaining` from `fetch_rate_limit_status`, the credential requirement, the deposit-neutral semantic of `pnl`, the monotonic nature of `volume`, and the per-window cadence/capacity table. These are exactly the traits an agent cannot infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is front-loaded with purpose and output fields before qualifications, and every sentence carries information. It is dense — several facts are packed into single sentences and the cadence table sits mid-paragraph — but nothing is redundant padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, yet the description covers the returned fields, their ordering (oldest first), the cadence/capacity per window, the required credentials, and the rate-limit cost. Nothing an agent needs to call this correctly or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; however, the description adds meaning beyond the schema by mapping each window to its own downsample cadence and point capacity (day 5m/288, week 1h/168, month 6h/120, all 1d/366) and by explaining that `limit` is clamped to that capacity. This is genuinely additive rather than restated schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (authenticated account's portfolio time-series) and enumerates exactly what is returned: equity, cumulative trading PnL, and cumulative traded volume. It explicitly distinguishes itself from the closest sibling `fetch_equity_history` by scope, cadence, and window, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for choosing between this and `fetch_equity_history` (richer, same equity source, so never disagreeing) and warns to poll sparingly because of the 5x cost. It lacks an explicit conditional such as 'if you only need equity, prefer fetch_equity_history', but the sibling comparison effectively conveys the trade-off.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_positionsA

Get the authenticated account's open positions. Positions carry per-position risk detail. notional_value, margin_used, roe, max_leverage, and leverage are derived from mirrored state, so any of them can be null with a companion <field>_error naming the reason (e.g. mark_price_unavailable); treat null as UNKNOWN, never as zero. leverage is currently always null (leverage_error: margin_state_not_mirrored) — do not infer it from margin_used. funding_paid is NOT one of those: it is always present and has no _error companion, so its "0" is a real zero (no funding accrued), not unknown. It is paid-positive — a negative value means funding was received. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses that derived fields can be null with companion <field>_error reasons, warns to treat null as UNKNOWN rather than zero, declares leverage is currently always null with the explicit error name, and documents funding_paid's sign convention and why its '0' is real. This is behaviorally rich information an agent cannot get elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then dense but purposeful detail. Every sentence about null-vs-zero and field error companions earns its place for a financial endpoint. It is on the long side, but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must carry the return-value burden, and it does explain the tricky fields (null/error pairing, leverage, funding sign). It stops short of enumerating the full position payload, but covers the highest-risk ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. There is nothing to document, and the description sensibly spends its words on return semantics instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get the authenticated account's open positions.' That is unambiguous. However, it does not distinguish itself from the near-identical sibling get_positions (nor get_demo_positions / fetch_positions_history), so an agent cannot tell from the description which of the near-duplicate position tools to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the precondition 'Requires API credentials', which is real guidance, and it clearly implies the use case (inspect my open positions). But it gives no when-to-use-vs-alternative guidance against the many sibling position/account tools, leaving the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_positions_historyA

Get the authenticated account's closed positions (realized PnL per position). Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records per page (max 200).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses the auth requirement ('Requires API credentials'), the exact return shape (`{ items, next_cursor }`), the pagination contract, and the fact that `limit` is per-page. It omits whether the call is read-only framed explicitly and any rate-limit or error behavior, keeping it out of the top band.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then return shape, then the pagination loop, then the parameter caveat. Four tight sentences, no filler, and the most error-prone point (`limit` is per-page) is called out explicitly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly compensates by documenting the response envelope and cursor semantics, and it fully covers the 2-parameter surface. The remaining gap is sibling disambiguation against `get_closed_positions`/`fetch_positions`, which an agent selecting a tool would still need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: it clarifies that `limit` sizes ONE page and is not a total, and that `cursor` must be the previous `next_cursor` verbatim. This reinforces and contextualizes the schema rather than merely repeating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Get the authenticated account's closed positions') and clarifies the payload is realized PnL per position. However, the sibling list contains both `get_closed_positions` and `fetch_positions`, which appear near-duplicate, and the description offers no basis for choosing among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong usage mechanics for pagination — keep passing the previous `next_cursor` and stop when it is null — but never says when to use this tool versus `get_closed_positions`/`fetch_positions`, nor any when-not condition. Usage is implied by the pagination walkthrough rather than by selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_rate_limit_statusA

Get the authenticated account's current rate-limit status (remaining request budget). Useful for an agent to pace itself. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden, and it does add real value: it states the auth requirement ('Requires API credentials') and that the read returns a remaining request budget. However, it says nothing about the response shape (which limit windows, reset timing) or whether calling this endpoint itself consumes budget, which is exactly the context an agent needs to pace itself safely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, and the core purpose is front-loaded before the usage hint and the auth note. Slightly penalized only because 'Requires API credentials' is largely self-evident for an authenticated trading API.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-annotation, no-output-schema tool, the definition covers purpose, auth, and intended use. It stops short of describing what the status payload contains or how to interpret it, leaving a gap that neither annotations nor an output schema fills.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies; there is no parameter semantics for the description to explain. Nothing in the text contradicts or muddies the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the authenticated account's current rate-limit status') plus a parenthetical clarifying the resource as 'remaining request budget'. That is clear, but it offers no differentiation from the near-identical sibling get_rate_limit_status, so an agent cannot tell the two apart from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Useful for an agent to pace itself' implies the usage context (call before bursts of requests), but there is no explicit when-to-use trigger, no when-not-to-use guidance, and no naming of the get_rate_limit_status sibling as an alternative or the reason both exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_statsA

Get aggregate venue statistics (volume, trades, throughput) plus rolling unique-trader counts. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose the authentication profile (no credentials required), which is valuable, but says nothing about rate limits, caching, or what the response looks like for a read-only aggregate endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with what the tool returns, followed by the one access fact an agent needs. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless, unauthenticated read tool with no output schema and no annotations, the description covers what is returned and the auth requirement. Only the sibling-tool distinction (fetch_stats_history) is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; schema coverage is 100% and the empty schema is self-explanatory. Baseline 4 applies for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (Get) and resource (aggregate venue statistics) and enumerates the contents: volume, trades, throughput, and rolling unique-trader counts. It does not explicitly differentiate from the sibling fetch_stats_history, which it is easily confused with, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the access condition (public, no credentials needed), which is real guidance, but never says when to use this versus fetch_stats_history or get_stats. The usage context is implied by the name rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_stats_historyA

Get the venue's per-second throughput history (ring buffer, up to 3600 points). Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It usefully reveals that the endpoint is public and requires no credentials, and that data is stored in a ring buffer capped at 3600 points. It does not state rate limits, exact return shape, or explicitly confirm read-only safety, so it is not fully exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The primary purpose is front-loaded, followed immediately by the most relevant operational details (retention limit, public access). Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no annotations, and no output schema, the description supplies enough context to call it confidently: what it returns, the history depth, and that no authentication is needed. It could be slightly more complete by specifying the throughput unit or time window, but it is largely sufficient for a simple read endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and no input schema fields, so there are no parameter semantics to clarify. The baseline for a parameterless tool is 4, and the description appropriately avoids inventing or misrepresenting parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get the venue's per-second throughput history'. It is clear what data is returned and includes scope details (ring buffer, up to 3600 points). It does not explicitly differentiate itself from siblings like fetch_stats or get_stats_history, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by saying it returns throughput history and notes 'Public — no credentials needed', which helps an agent understand access requirements. However, it offers no explicit direction on when to choose this tool over alternatives such as fetch_stats or get_stats_history, leaving comparison to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_statusA

Aggregate service health of the exchange stack (indexer / engine / oracle / bots), as used by status pages. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It usefully discloses that the endpoint is public and credential-free, which is real added context. It says nothing about return shape, freshness/caching, or rate limits, which for a zero-parameter health endpoint are the remaining unknowns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core scope is front-loaded ahead of the access note. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial zero-param read tool this is nearly sufficient, but with no output schema the agent has no idea what the aggregate response contains (per-component statuses? overall boolean? severity levels?). A sentence on the return shape would close the only meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no filtering or input is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Aggregate') and resource ('service health of the exchange stack') and even enumerates the components (indexer / engine / oracle / bots), so the scope is clear. It stops short of explicitly distinguishing itself from the similarly named sibling get_service_status or fetch_market_status, leaving some ambiguity for an agent choosing between health-check tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies context with 'as used by status pages' and states the precondition 'Public — no credentials needed', which is genuinely useful for deciding whether to call it. However, it never says when to prefer this over get_service_status or fetch_market_status, so usage is only inferred rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_tickerA

Get the ticker (last price, bid/ask, 24h stats) for one market, e.g. "BTC-USDX-PERP". Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It adds useful context that the endpoint is public and requires no credentials, and it lists the data returned. It does not cover rate limits, error behavior, or idempotency, but for a simple public read those gaps are minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste. The core purpose and example are front-loaded, and the public/no-credentials note follows efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema or annotations, the description is complete enough: it states what is fetched, gives an example market id, and confirms no credentials are needed. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single market_id parameter. The description repeats the example 'BTC-USDX-PERP' already present in the schema and adds no format or validation details beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Get) and resource (ticker for one market), and enumerates the returned fields (last price, bid/ask, 24h stats). It implicitly distinguishes from plural siblings like fetch_tickers by saying 'for one market,' but it does not explicitly differentiate from the singular sibling get_ticker.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Public — no credentials needed,' giving a prerequisite context. However, it does not state when to use this tool versus alternatives such as fetch_tickers or get_ticker, leaving usage implied only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_tickersA

Get tickers (last price, bid/ask, 24h stats) for ALL markets in one call. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does add real value by disclosing that the endpoint is public and requires no credentials. It does not cover response size for an all-markets snapshot, rate limits, or pagination, which matter for a bulk read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the scope statement front-loaded and the auth note second; every clause earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description usefully enumerates the returned fields (last price, bid/ask, 24h stats), which is genuinely helpful. It remains incomplete on rate limits, expected payload size across all markets, and the ambiguity against the get_tickers sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; the description implicitly confirms this by stating all markets are returned in one call with no filters. Nothing further is needed on parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Get tickers') and states the scope ('for ALL markets in one call'), which separates it from single-market siblings like get_ticker/fetch_ticker. However it does not differentiate from the near-identically named sibling get_tickers, which appears to do the same thing, leaving the agent guessing which to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'for ALL markets in one call' implies the bulk-snapshot use case versus a single-ticker lookup, so usage is implied rather than stated. There is no explicit when-to-use/when-not guidance and no routing between this tool and the equally named get_tickers sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_tradesA

Get recent public trades (prints) for one market, newest first. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of trades per page (max 1000).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it discloses the return shape ('{ items, next_cursor }'), pagination semantics, and that the endpoint is public with no credentials. It does not mention rate limits or error behavior, but for a read-only public data tool this is a strong disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose and return shape, followed by pagination mechanics and an auth note. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description supplies all critical context: return shape, pagination traversal, page-size caveat, and auth requirements. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by clarifying that 'limit' sets the size of ONE page, not a total, and by explaining how 'cursor' relates to the returned 'next_cursor'. This extra context is valuable, though it does not add much about 'market_id' beyond the schema example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), resource ('recent public trades (prints)'), scope ('for one market'), and ordering ('newest first'). It implicitly distinguishes public trades from private 'my trades', but it does not explicitly differentiate from the sibling 'get_trades', leaving some ambiguity among similarly named tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to paginate ('keep calling with cursor...') and notes that no credentials are needed. However, it gives no explicit guidance on when to choose this tool over alternatives such as 'get_trades' or 'fetch_my_trades', so the usage guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_trading_feesA

Get the authenticated account's effective fee schedule: maker/taker rate in basis points (a NEGATIVE maker rate is a rebate paid TO the maker), fee tier, rolling 30-day traded volume, and any active discounts. This is the forward-looking schedule rate for the scope named by schedule (per-market rates differ), not a realized per-fill average; volume_30d_estimated: true means the 30-day volume may undercount. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does add real context: it flags that credentials are required, explains that a NEGATIVE maker rate is a rebate paid to the maker, and warns that `volume_30d_estimated: true` means the 30-day volume may undercount. It omits caching/rate-limit behavior and whether the schedule is account-scoped only, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single dense sentence, but the purpose and the two most valuable caveats (negative maker rate, estimated volume) are front-loaded and each clause earns its place. Slight run-on length is the only cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description does the work of describing the return fields and the auth requirement, which is what an agent needs. The dangling `schedule` reference and lack of any mention of refresh cadence keep it from being fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero input parameters means the baseline is 4, and the description usefully explains the meaning of a returned field (`volume_30d_estimated`) and a negative maker rate. However, it references a `schedule` scope parameter that does not exist in the empty input schema, which is a mild inconsistency for an agent trying to construct a call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ("Get the authenticated account's effective fee schedule") and enumerates the content returned: maker/taker bps, fee tier, 30-day volume, and active discounts. It conceptually separates itself from a realized per-fill average, but never names the very similar sibling `get_account_fees`, so an agent must still guess between the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase "effective fee schedule ... for the scope named by `schedule`" and the forward-looking-vs-realized clarification. There is no explicit when-to-use, when-not-to-use, or named alternative (e.g., per-trade fee data from fills), so the agent is left to infer the selection condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_withdrawalsB

List the authenticated account's withdrawal history. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 100).

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose one important trait: authentication is required. 'List ... history' implies a safe read, but nothing is said about ordering, time-window scoping, or whether results are paginated beyond the limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the resource and scope are front-loaded before the credential requirement. Nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations exist, so the description is the only source of behavioral context, and it stops at the auth requirement. For a history-listing tool it should at least note ordering or whether the credential is per-account, but it is adequate for a simple one-parameter read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional 'limit' parameter is fully documented in the schema (including the max 100 cap). The description adds no meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the authenticated account's withdrawal history'), which tells an agent exactly what data comes back. However, the sibling list contains 'get_withdrawals', an apparent near-duplicate, and the description offers no differentiation between the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is 'Requires API credentials', which is a prerequisite rather than a when-to-use rule. It never says how this differs from get_withdrawals, nor that it is the read counterpart to deposit/create_deposit, leaving alternative selection entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_feesA

Deprecated: use fetch_trading_fees. Get the authenticated account's effective fee schedule: maker/taker rate in basis points (a NEGATIVE maker rate is a rebate paid TO the maker), fee tier, rolling 30-day traded volume, and any active discounts. This is the forward-looking schedule rate for the scope named by schedule (per-market rates differ), not a realized per-fill average; volume_30d_estimated: true means the 30-day volume may undercount. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden and does so well: it discloses the API-credential requirement, explains that a NEGATIVE maker rate is a rebate paid TO the maker, and flags the `volume_30d_estimated: true` undercount caveat. These are non-obvious semantics an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation notice is correctly front-loaded as the first token, and every clause (rebate semantics, estimate caveat, auth requirement) earns its place. However, the second sentence is heavily overloaded with stacked parentheticals, making it dense to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read tool with no output schema and no annotations, the description covers auth requirements, return-field meaning, edge-case semantics, and identity of the replacement tool. Nothing essential to invoking or interpreting it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters, which normally sets a baseline of 4, but the description references a "scope named by `schedule`" that does not exist in the input schema. That stale reference could send an agent hunting for a parameter that isn't there, so it falls below the zero-param baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ("Get the authenticated account's effective fee schedule") and enumerates exactly what is returned: maker/taker bps, fee tier, rolling 30-day volume, active discounts. It is unmistakably distinct from siblings like fetch_balance or fetch_account_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit deprecation routing instruction: "Deprecated: use `fetch_trading_fees`." It further disambiguates the returned number's meaning (forward-looking schedule rate per `schedule` scope, not a realized per-fill average), which is exactly the kind of when-to-use nuance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_stateA

Deprecated: use fetch_account_state. Get the authenticated account's full state in ONE call: the portfolio summary aggregates plus every open position ({ summary, positions }). Prefer this over pairing fetch_account_summary with fetch_positions — both parts come from one coherent read, so summary.open_positions_count always matches the positions length. If the engine-authoritative margin view is unavailable this fails closed with a 502 (authoritative_margin_unavailable) rather than returning an estimate: retry after a short delay, do NOT read the error as a flat or empty account. Positions carry per-position risk detail. notional_value, margin_used, roe, max_leverage, and leverage are derived from mirrored state, so any of them can be null with a companion <field>_error naming the reason (e.g. mark_price_unavailable); treat null as UNKNOWN, never as zero. leverage is currently always null (leverage_error: margin_state_not_mirrored) — do not infer it from margin_used. funding_paid is NOT one of those: it is always present and has no _error companion, so its "0" is a real zero (no funding accrued), not unknown. It is paid-positive — a negative value means funding was received. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the fail-closed 502 (authoritative_margin_unavailable) with retry guidance, warns against misreading the error as a flat account, and documents that derived fields may be null with companion <field>_error fields while funding_paid is a real zero. The main omission is any statement about pagination or auth scope beyond 'Requires API credentials'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation notice and the one-call purpose are front-loaded, which is correct, but the body is a long, comma-heavy run of null-handling rules that is dense to parse in a single read. Every fact is arguably load-bearing given no output schema, yet the structure could be tighter (e.g., splitting the null/error rules into discrete clauses).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must explain return values and failure modes on its own. It does: payload shape, derived-field null semantics, per-field error companions, the permanently-null leverage case, funding_paid sign convention, and the 502 fail-closed behavior are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty with additionalProperties false, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter-level content could add value here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the authenticated account's full state in ONE call') and immediately enumerates the payload shape ({ summary, positions }). It also distinguishes itself from the sibling tools fetch_account_summary and fetch_positions by explaining what the combined read provides.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative pattern ('pairing fetch_account_summary with fetch_positions') and the condition that favors this tool (one coherent read, count always matches). It also flags its own deprecation and points to the successor fetch_account_state, so an agent knows exactly when to route elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_summaryA

Deprecated: use fetch_account_summary. Get the authenticated account's portfolio summary (equity, margin usage, PnL rollup) — a richer view than fetch_balance. Includes withdrawable: the engine-authoritative free margin floored at zero, i.e. exactly what can leave the account (never negative). Because withdrawable comes from that authoritative margin view, this call fails closed with a 502 (authoritative_margin_unavailable) when the view is unavailable rather than returning a local estimate: retry after a short delay, do NOT read the error as a flat or empty account. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses credential requirements, the exact failure mode (502 `authoritative_margin_unavailable`), the retry behavior, and a critical interpretation warning ('do NOT read the error as a flat or empty account'). It also explains the semantics of `withdrawable` (authoritative free margin, floored at zero, never negative).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation notice and primary purpose are front-loaded, which is correct. The `withdrawable` explanation runs long across two sentences and could be tightened, but every sentence carries substantive information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema, so the description must cover behavior and returns. It covers auth, failure mode, and key returned fields well, but a tool returning a portfolio summary without an output schema could benefit from a fuller enumeration of the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters and 100% schema coverage, so the baseline is 4. The description adds meaning about the returned `withdrawable` field, though that is return-value rather than parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get the authenticated account's portfolio summary) and enumerates the content (equity, margin usage, PnL rollup). It explicitly positions itself against two siblings, naming `fetch_account_summary` as the replacement and `fetch_balance` as the narrower alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Front-loads 'Deprecated: use `fetch_account_summary`', which is an unambiguous when-not-to-use directive, and explains why one might still pick this over `fetch_balance` (richer view including `withdrawable`). Nothing is left to inference about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_adl_historyA

Deprecated: use fetch_adl_history. Get the auto-deleveraging (ADL) events that touched a given account. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 1000, default 100).
addressYesAccount address (0x-prefixed hex).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose the auth requirement, which is genuinely useful, but says nothing about return contents, pagination behavior, or rate limits for an account-scoped history endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the deprecation warning front-loaded, followed by purpose and prerequisite. Every sentence earns its place; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple deprecated read tool with two well-documented params and no output schema, the description covers purpose, routing, and auth. The only remaining gap is the shape of returned ADL event data, which is minor given the limited parameter surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both `limit` (max 1000, default 100) and `address` fully documented in the schema, so the baseline is 3. The description adds no format, range, or filtering semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: retrieving auto-deleveraging (ADL) events for a given account, and explicitly identifies itself as deprecated in favor of the sibling `fetch_adl_history`. An agent can distinguish this from the many fetch_* siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear routing guidance ('Deprecated: use fetch_adl_history') plus a prerequisite ('Requires API credentials'). It does not state the condition under which this legacy variant should still be used, which keeps it short of a full when/when-not/alternatives treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balanceA

Deprecated: use fetch_balance. Get the authenticated account snapshot: collateral balance, equity, and positions. Positions carry per-position risk detail. notional_value, margin_used, roe, max_leverage, and leverage are derived from mirrored state, so any of them can be null with a companion <field>_error naming the reason (e.g. mark_price_unavailable); treat null as UNKNOWN, never as zero. leverage is currently always null (leverage_error: margin_state_not_mirrored) — do not infer it from margin_used. funding_paid is NOT one of those: it is always present and has no _error companion, so its "0" is a real zero (no funding accrued), not unknown. It is paid-positive — a negative value means funding was received. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so exceptionally: it explains that derived fields can be `null` with a companion `<field>_error`, that `null` means UNKNOWN not zero, that `leverage` is always null for a named reason, and that `funding_paid` is exempt from that rule and is paid-positive. It also discloses the auth requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation notice is front-loaded and every sentence adds behavioral value, but the null/`_error` discussion is dense and long. It earns its length through genuine edge-case detail rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must describe return semantics, and it covers the key fields, their null/error behavior, and sign conventions well. It does not describe the overall response envelope, so an agent still has a small gap about shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly adds no redundant parameter text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get the authenticated account snapshot: collateral balance, equity, and positions') and names its successor tool `fetch_balance`, so an agent can route away from it. It stops short of distinguishing itself from the many other account-state siblings (`fetch_account_state`, `get_account_summary`, `fetch_positions`), so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It front-loads 'Deprecated: use `fetch_balance`', giving an explicit alternative, and states the prerequisite 'Requires API credentials'. What is missing is positive guidance on when this legacy tool would still be the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bridge_assetsA

Deprecated: use fetch_bridge_assets. List the bridgeable chains and, per chain, the depositable assets (USDC, USDX) and withdrawable assets (USDX) with their decimals, minimum amounts, required confirmations, and fees. Public catalog — no credentials needed. Use it to discover valid chain values for the other bridge tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the access profile ('Public catalog — no credentials needed') and enumerates the returned fields (decimals, minimum amounts, confirmations, fees), which is meaningful behavioral context. It does not cover rate limits or caching, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste, and the most decision-relevant fact (deprecation and its replacement) is front-loaded before the payload description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description fully enumerates what the call returns and why an agent would call it, and it flags the deprecation. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. The description correctly signals a no-argument call by describing it as a public catalog rather than implying any filtering options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (bridgeable chains with per-chain depositable/withdrawable assets), and explicitly names the sibling that supersedes it (fetch_bridge_assets). An agent can distinguish it from fetch_bridge_assets and the deposit-address tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not guidance ('Deprecated: use fetch_bridge_assets') and explicit when-to-use guidance ('Use it to discover valid `chain` values for the other bridge tools'). The routing to alternatives and the purpose of the output are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bridge_depositA

Deprecated: use fetch_bridge_deposit. Fetch a single cross-chain (bridge) deposit by id. Only deposits owned by the authenticated account are returned. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDeposit identifier.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does useful work: it discloses the auth requirement ('Requires API credentials') and the access-scoping rule ('Only deposits owned by the authenticated account are returned'). It does not state read-only status explicitly or what happens when the id is unknown/not owned, leaving a modest gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, with the critical deprecation/routing information front-loaded before the substantive description. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description covers purpose, auth, and ownership scoping adequately. Missing only edge-case behavior (not-found/not-owned responses) and explicit read-only confirmation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole parameter 'id' is documented in the schema as 'Deposit identifier.' The description only restates 'by id' without adding format, prefix, or source-of-id guidance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch a single cross-chain (bridge) deposit by id') and immediately routes to the replacement sibling fetch_bridge_deposit. An agent can distinguish it from the plural list_bridge_deposits/fetch_bridge_deposits without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The deprecation notice explicitly names the alternative (fetch_bridge_deposit), which is strong routing guidance. It stops short of explaining why this variant is deprecated or under what circumstances (if any) it should still be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cancel_on_disconnectA

Deprecated: use fetch_cancel_on_disconnect. Get the authenticated account's cancel-on-disconnect (COD) status. COD is an opt-in dead man's switch: when the account's last authenticated WebSocket connection drops and does not reconnect within the grace window, the exchange cancels all of the account's resting orders. Returns enabled (the account's own opt-in), active (whether it will actually fire — the opt-in AND the exchange-side feature switch), and grace_secs (the reconnect window in seconds, null when the feature is unavailable). Clients that trade purely over REST and never open a WebSocket are not covered. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so thoroughly: it explains the COD dead man's switch, when it fires, the grace window, and what each returned field means. It also discloses the authentication requirement and the limitation for REST-only clients.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the deprecation notice and purpose, then efficiently explains the domain concept and return fields. Every sentence adds useful context, especially given the lack of annotations and output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, deprecated status endpoint with no output schema, the description is complete enough: it explains the purpose, auth requirement, return fields, and limitations. An agent can correctly decide whether to use this tool or its replacement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the schema baseline is 4. The description adds no parameter-level details because none exist, which is appropriate for a parameterless status endpoint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving the authenticated account's cancel-on-disconnect status. It also names the replacement tool (`fetch_cancel_on_disconnect`) and clearly distinguishes the read behavior from the sibling `set_cancel_on_disconnect`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says the tool is deprecated and directs the caller to use `fetch_cancel_on_disconnect`. It also clarifies that REST-only clients are not covered and that API credentials are required, giving clear usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_candlesA

Deprecated: use fetch_ohlcv. Get OHLCV candles for one market. Public — no credentials needed. Timeframe is one of 1s, 1m, 5m, 1h (default 1m).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of candles to return (max 1000).
market_idYesMarket id, e.g. "BTC-USDX-PERP".
timeframeNoCandle interval. Defaults to 1m.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the disclosure burden and does well: it states the tool is public and requires no credentials, discloses the deprecation status, and clarifies the timeframe default. It does not mention return shape or any limits, but the auth and lifecycle context is a meaningful addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler, and the deprecation warning — the most consequential fact — is front-loaded first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated read-only market-data tool with no output schema, the description covers auth requirements, scope, timeframe options, and the replacement path. Only the return shape is unstated, which is a minor gap given the tool is being retired in favor of `fetch_ohlcv`.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema, including the enum and the 1m default. The description restates the enum values and default rather than adding format or syntax beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get OHLCV candles for one market') and immediately names the replacement sibling `fetch_ohlcv`, so an agent can distinguish it from the many other market-data tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly marks the tool as deprecated and directs the agent to `fetch_ohlcv` instead, which is the strongest possible when/when-not guidance: it tells the agent which sibling to prefer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_closed_positionsA

Deprecated: use fetch_positions_history. Get the authenticated account's closed positions (realized PnL per position). Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records per page (max 200).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden, and it does: discloses that API credentials are required, describes the return shape (`{ items, next_cursor }`), the meaning of a null cursor, and that cursor is opaque/non-constructible. It stops short of rate-limit or error behavior, but for a read-only listing tool this is solid disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation notice, then purpose, return format, and pagination. Sentences largely earn their place, though the pagination explanation partially overlaps with the cursor schema description, adding some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description must explain return values and safety context on its own, and it does: it describes the payload, the pagination contract, and credential requirements. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond it: it stresses that `limit` sizes ONE page rather than a total, and frames cursor usage as a stop-when-null loop. These are semantic clarifications the schema alone states more tersely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the authenticated account's closed positions') with a clarifying parenthetical ('realized PnL per position'). It even differentiates itself from the sibling by flagging deprecation and pointing to `fetch_positions_history`, so an agent can tell it apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly marks the tool as deprecated and routes the agent to the replacement (`fetch_positions_history`), which is the clearest possible when-not-to-use guidance. It also explains the full-history pagination loop, so the agent knows how to drive the calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_demo_accountA

Get a live, public demo account snapshot (balance, equity, positions). No credentials needed — useful to show the account flow before API keys are wired up.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes the tool as a read operation on a live, public demo account. It does not disclose any side effects, rate limits, or data freshness, but for a simple read-only tool, the transparency is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose. No wasted words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description adequately explains what the tool returns (balance, equity, positions) and the context (no credentials, public demo). It is complete for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no parameters, and schema coverage is 100%. According to guidelines, 0 parameters yields baseline 4. The description adds value by explaining the output but is not required to parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it gets a live, public demo account snapshot with balance, equity, and positions. It distinguishes from sibling tools like get_balance and get_demo_positions by specifying the full snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'No credentials needed' and 'useful to show the account flow before API keys are wired up', providing clear context for when to use this tool. Does not explicitly mention when not to use, but the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_demo_ordersA

Get the public demo account's open orders. No credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It effectively discloses the authentication requirement (no credentials) and that it returns open orders from the demo account. However, it omits other behavioral traits such as real-time nature, response format, or rate limits, though the tool is simple and read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no wasted words. The purpose is front-loaded in the first sentence, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and no parameters, the description covers the essential aspects: what it does, relative to whom (demo account), and authentication requirement. It is nearly complete for the tool's simplicity, but could mention the read-only nature explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the input schema is empty with 100% coverage. The description adds meaning by specifying the resource and state, which is adequate given the absence of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Get), resource (public demo account's open orders), and scope (open orders). It distinguishes from the sibling tool 'get_open_orders' by specifying 'public demo account', making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly notes that no credentials are needed, which implies it is used for unauthenticated access. However, it does not directly contrast with the sibling tool 'get_open_orders' or state when not to use it, but provides sufficient context for typical usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_demo_positionsA

Get the public demo account's open positions. No credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description indicates it's a read operation on a public endpoint, but doesn't detail any behavioral aspects like rate limits or data freshness. Acceptable for a simple read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with purpose and key attribute (no credentials). Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only tool with no output schema, the description sufficiently covers the purpose and access requirements. No critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters in schema, so description doesn't need to add parameter info. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action 'Get' and the resource 'public demo account's open positions'. Distinguishes from sibling 'get_positions' by specifying demo account and no credentials needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'No credentials needed', implying it's for quick access without authentication. Implicitly contrasts with the sibling 'get_positions' which likely requires authentication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_deposit_targetB

Get the on-chain deposit target (address/memo) to fund the account. This legacy single-target lookup remains unbuilt server-side, and the bridge deposit-address tools that were to supersede it are deprecated because nothing serves them either.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoAsset to deposit, e.g. "USDX". Optional.

TDQS

B3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does disclose a critical trait: the server-side implementation is absent and the intended successors are also unserved. That is genuinely useful context an agent could not get elsewhere. It stops short of describing the failure mode (e.g. error vs empty response) or auth requirements, so it is not fully complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, with the core purpose front-loaded, so it is not bloated. The second sentence is convoluted, stacking 'unbuilt,' 'supersede,' and 'deprecated' into one clause, which makes it harder to parse than a tighter statement of non-functionality would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-annotation, no-output-schema lookup, the description does flag that the tool is non-functional, which is the single most important fact. Yet it never tells the agent which sibling to use instead among the many deposit-related tools, and gives no indication of the return shape, leaving the caller unsure how to proceed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single optional 'asset' parameter already documented in the schema. The description only alludes to the result shape ('address/memo') and adds no syntax or format detail for the asset argument, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a concrete verb and resource: retrieve the on-chain deposit target (address/memo) to fund an account. However, the second sentence immediately undercuts it by declaring the lookup 'remains unbuilt server-side,' so an agent cannot tell whether the tool is currently a working path or dead weight. The result is a defined but muddled purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool, and the siblings it names (bridge deposit-address tools) are dismissed as deprecated rather than offered as an actionable alternative. The only implicit guidance is a warning that nothing serves this path, leaving the agent with no working alternative surfaced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_equity_historyA

Deprecated: use fetch_equity_history. Get the authenticated account's equity time-series (5s cadence, ~1h window), oldest first. For a longer window, or for PnL and volume series alongside equity, use fetch_portfolio_history. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of points per page (max 720).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and largely meets it: it discloses the auth requirement (API credentials), the pagination contract (cursor round-tripping until next_cursor is null), and the return shape. It stops short of stating read-only safety or rate-limit behavior, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the critical deprecation notice, and the pagination prose earns its space since there is no output schema. Some of the cursor explanation duplicates the schema text, adding mild redundancy, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated, cursor-paginated read tool with no output schema, the description supplies the return shape, pagination loop, cadence, window, and auth requirement an agent needs. Only minor traits (rate limits, explicit read-only confirmation) are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both params (baseline 3). The description adds genuine meaning: it clarifies that `limit` sizes ONE page rather than a total, and ties `cursor` to the previous response's `next_cursor` in the read-full-history loop.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (equity time-series) plus its scope: 5s cadence, ~1h window, oldest-first ordering. It explicitly distinguishes itself from two siblings (`fetch_equity_history` as the replacement, `fetch_portfolio_history` for longer/PnL/volume windows).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with a deprecation directive naming the replacement tool, and names `fetch_portfolio_history` with the exact condition that selects it (longer window, or PnL/volume series). Both the when-to-use and when-to-use-something-else are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fillsA

Deprecated: use fetch_my_trades. List the authenticated account's fills (executed trades), newest first. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of fills per page (max 1000).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely meets it: it discloses the auth requirement ('Requires API credentials'), the newest-first ordering, the return shape, and the exact pagination loop with its termination condition. It omits rate limits and error/empty-page behavior, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation notice, then packs return shape, pagination mechanics and auth into a few tight sentences. Every sentence earns its place with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description documents the response shape (`{ items, next_cursor }`) and how to consume the cursor until exhaustion, which is exactly what an agent needs to page this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely useful meaning beyond the schema: '`limit` sets the size of ONE page, not a total', which clarifies a common misinterpretation the schema text alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the authenticated account's fills (executed trades)'), plus ordering ('newest first'). It also names its replacement sibling, fetch_my_trades, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with 'Deprecated: use `fetch_my_trades`', explicitly naming the alternative and the condition (deprecation) that should redirect the agent. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_funding_historyA

Deprecated: use fetch_funding_rate_history. Get the funding-rate history for one perpetual market. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of funding records to return (max 1000, default 300).
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It does add genuinely useful auth context ('Public — no credentials needed'), but says nothing about rate limits, pagination behavior, or the shape of returned funding records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, and the deprecation warning is front-loaded where an agent will read it first. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated, credential-free read tool this covers purpose, replacement, and auth. The only gap is the absence of any note on return format or pagination, which matters slightly since there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: `market_id` has a format example and `limit` documents max/default values. The description adds no parameter detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the funding-rate history for one perpetual market') with an explicit scope qualifier ('one perpetual market'). It also names the successor tool, so an agent can distinguish it from siblings like fetch_funding_rate_history and fetch_funding_samples immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The very first clause is a deprecation notice routing the agent to `fetch_funding_rate_history`, which is explicit when-not-to-use-this and which alternative to pick. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_funding_paymentsA

Deprecated: use fetch_funding_history. Get the authenticated account's funding-payment history, newest first, optionally filtered to a single market. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 1000).
market_idNoMarket id to filter to, e.g. "BTC-USDX-PERP". Optional.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses authentication requirements, newest-first ordering, optional market filtering, and deprecation. However, it does not describe pagination behavior beyond the limit parameter, response format, or error handling, leaving meaningful gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation notice is front-loaded, followed by a compact sentence covering authentication, ordering, and filtering. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated read-only history endpoint with a well-described schema and no output schema, the description covers the essential context: deprecation, replacement, authentication, ordering, and filter scope. It could say more about return fields, but the deprecation reduces the need for exhaustive detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `limit` and `market_id` are already documented in the schema. The description adds only that filtering is by a single market, which is marginal beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the authenticated account's funding-payment history'), including scope ('authenticated account'), ordering ('newest first'), and optional filtering. It also names the replacement sibling tool, making it easy to distinguish from other funding-history endpoints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly marks the tool as deprecated and directs the agent to `fetch_funding_history` instead, which is the strongest possible usage guidance. It also states that API credentials are required, so the agent knows the preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_funding_samplesA

Deprecated: use fetch_funding_samples. Get the dense per-tick funding premium-index samples for one perpetual market (60s cadence, up to 480 points = 8h). Finer-grained than fetch_funding_rate_history, which returns the settled hourly rates. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of samples to return (max 480).
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the auth profile (public, no credentials needed) and the data cadence/volume (60s sampling, up to 480 points = 8h), which is genuinely useful behavioral context. It stops short of rate-limit or error behavior, but for a read-only public endpoint this is solid coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste, and correctly front-loaded with the deprecation notice so an agent sees the routing instruction first. Purpose, sibling comparison, and auth note follow in priority order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must carry the full disclosure load, and it covers purpose, granularity, sample volume, and auth. It omits what a sample record actually contains and any pagination behavior, but there is no output schema to lean on, so this is a minor gap for a simple list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline would be 3, but the description adds interpretation beyond the schema: the 60s cadence and the 480-point/8-hour equivalence give `limit` a concrete temporal meaning. It does not document format expectations for `market_id`, which the schema already handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: dense per-tick funding premium-index samples for one perpetual market. It also explicitly differentiates itself from the closest sibling by noting it is finer-grained than `fetch_funding_rate_history`, which returns settled hourly rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is explicit on routing: it is deprecated in favor of `fetch_funding_samples`, and it names the distinction that selects it versus `fetch_funding_rate_history` (per-tick samples vs. settled hourly rates). An agent has no inference left to make.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_adl_eventsA

Deprecated: use fetch_adl_events. Get the auto-deleveraging (ADL) settlement history for one market — the events where the engine force-closed positions to cover a shortfall. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events to return (max 1000).
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It usefully discloses the auth requirement ("Requires API credentials"), which an agent needs before calling. However, it says nothing about pagination, ordering, retention window, or error behavior for missing/unauthorized markets, leaving gaps for a history-retrieval endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation notice, then one sentence for purpose and one for credentials. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated read endpoint with full schema coverage and no output schema, the description supplies purpose, scope, auth, and the migration path. Only minor operational details (pagination, event fields) are absent, which is acceptable given the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both market_id and limit are already documented, including the max-1000 bound. The description only reinforces that the query is scoped to a single market, adding marginal value beyond the schema — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (ADL settlement history) and scope (one market), and defines the domain term inline as events where the engine force-closed positions to cover a shortfall. It also names the replacement tool, so an agent can distinguish it from fetch_adl_events and the other adl siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The very first token is an explicit deprecation redirect to `fetch_adl_events`, giving an unambiguous when-not-to-use rule plus the alternative. An agent knows exactly which tool to prefer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_risk_paramsA

Deprecated: use fetch_market_risk_params. Get one market's risk parameters: margin requirements and maximum leverage, from the engine's market registry. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose two real traits: the deprecation status and that the endpoint is public with no credentials needed. It stops short of noting whether the response is cached or rate limited, but for a simple public getter the disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Deprecation warning is front-loaded, followed by a tight single sentence covering purpose, scope, and data returned. Zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema read tool, the description supplies the purpose, the returned fields, the data source, and the auth posture, which is enough to call it correctly. A note on response shape or error behavior would be the only remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter already documented as a market id with an example, so the schema does the work. The description adds only the notion of 'one market' and no format or identifier-syntax detail beyond the schema's example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get one market's risk parameters), enumerates what is returned (margin requirements, maximum leverage), and names the registry as source. It also names the successor tool fetch_market_risk_params, which cleanly separates it from that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly flags the tool as deprecated and directs the agent to use `fetch_market_risk_params` instead. The when-not-to-use case and the alternative are both stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_statusA

Deprecated: use fetch_market_status. Get a market's trading status and halt info (whether trading is open, halted, or in auction). Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does disclose the key behavioral fact: "Public — no credentials needed," which resolves the auth question for an agent. It also reveals the categorical result space (open/halted/auction). It does not cover failure behavior for an unknown market_id or rate limiting, so it falls short of fully compensating for the missing annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the deprecation warning — the single most decision-relevant fact — is front-loaded before the capability description. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, public, read-only lookup with no output schema, the description supplies everything needed: the migration target, the auth posture, and the range of statuses returned. No return-value documentation is required since the possible outcomes are enumerated inline.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single parameter with an example value ("BTC-USDX-PERP") already documented in the schema. The description adds no further format, casing, or validation detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get a market's trading status and halt info") and then enumerates the exact return semantics — open, halted, or in auction. This distinguishes it from generic status siblings like get_service_status or fetch_status, which cover service health rather than per-market trading state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with "Deprecated: use `fetch_market_status`", naming the replacement tool explicitly and unambiguously. The agent is told when not to use this tool and exactly which sibling to select instead, which is the strongest form of routing guidance in a crowded sibling list containing both `get_market_status` and `fetch_market_status`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_mark_priceA

Deprecated: use fetch_mark_price. Get the current mark price for one market. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses that the endpoint is public and requires no credentials, which is real behavioral value, but says nothing about error behavior for an invalid market_id, rate limits, or response shape. Adequate but clearly incomplete for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses with the deprecation warning front-loaded, the action second, and the auth profile last. Zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial one-parameter public read with no output schema the description is nearly sufficient, covering purpose, replacement, and auth. It falls slightly short only in not noting invalid-market handling, which is minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter market_id is fully documented in the schema with an example. The description only reinforces the single-market scope ('for one market') and adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the current mark price') scoped to one market, and explicitly distinguishes itself from its successor fetch_mark_price. An agent can immediately tell what it returns and that it is the legacy variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly marks the tool as deprecated and names the replacement ('use fetch_mark_price'), which is exactly the when-to-use guidance an agent needs on a duplicated sibling. No ambiguity about routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_open_ordersA

Deprecated: use fetch_open_orders. Get the authenticated account's resting (open) orders. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden; it discloses both the authentication requirement and the deprecated status, which are the highest-value behavioral facts here. It does not state pagination behavior or return shape, but for a no-argument read tool the coverage is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses with the deprecation warning placed first, so an agent that reads only the opening words still gets routed correctly. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema or annotations, but for a parameterless read of open orders the description covers purpose, auth, and the migration path. Only the return format/pagination detail is absent, which is a minor gap at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to add beyond noting the implicit account scoping ('authenticated account's'), which it does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get the authenticated account's resting (open) orders') and immediately names the sibling that supersedes it. An agent can distinguish it from fetch_open_orders without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent not to use this tool and routes it to `fetch_open_orders`, with the condition (deprecation) front-loaded. This is exactly the when/when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_orderA

Deprecated: use fetch_order. Get a single order by its id (status, fills, remaining size). Pass market_id when known — the spec marks it required for routing, though the gateway currently resolves the order without it. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesOrder id to look up.
market_idNoMarket the order rests on (used for routing). Optional but recommended.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does disclose the auth requirement ('Requires API credentials') and a genuine runtime nuance — the spec marks `market_id` required for routing while the gateway currently resolves without it. It does not cover error or failure behavior, but the disclosed quirks are exactly the kind of value structured fields cannot provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation warning is front-loaded, and every subsequent clause (returned fields, market_id nuance, auth) adds distinct information. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter single-entity lookup with no output schema, the description covers identity, returned fields, the ambiguous parameter, auth needs, and migration path. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the description adds meaning the schema does not: the schema frames `market_id` as merely 'Optional but recommended' whereas the description explains the spec-required-vs-gateway-actual discrepancy, which materially changes how an agent should treat the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single order by its id') and immediately differentiates itself from the nearly-identical sibling `fetch_order` by declaring itself deprecated. An agent can tell exactly what it returns (status, fills, remaining size) without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent away from this tool to `fetch_order`, and gives a conditional rule for `market_id` ('Pass when known'). Both the when-to-use and the primary alternative are named, leaving no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_orderbookA

Deprecated: use fetch_order_book. Get the current order book (bids/asks with price + size) for one market. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden; it discloses that the endpoint is public with no credentials required and describes the shape of the returned data (bids/asks with price + size), which is valuable given there is no output schema. It stops short of covering rate limits, depth/level caps, or whether the deprecated endpoint still functions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses with the deprecation warning front-loaded ahead of the functional description, which is the right priority order for a deprecated tool. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter public read tool with a fully covered schema, the description supplies the migration target, the access model, and the return shape. Nothing an agent needs to avoid or correctly call this endpoint is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is fully documented with an example id, so the schema already does the work. The description only implies the market scope ("for one market") without adding format or validity details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get the current order book") and specifies both scope ("for one market") and payload ("bids/asks with price + size"). It also explicitly names the sibling that supersedes it, so an agent can discriminate it from `fetch_order_book` without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause "Deprecated: use `fetch_order_book`" gives an explicit when-not-to-use and names the correct alternative, which is exactly the routing decision an agent needs. Nothing is left to inference about whether this tool should be selected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_historyA

Deprecated: use fetch_orders. Get the authenticated account's terminal-status order history (filled / cancelled / rejected / expired), newest first. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records per page (max 500).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does most of it: it discloses the auth requirement ('Requires API credentials'), result ordering (newest first), response shape, and the exact pagination loop. It does not mention rate limits or failure modes, but for a read-only listing it covers the behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the most decision-relevant fact (deprecation and successor) in the first clause, then spends its remaining sentences on scope, return shape, and pagination — none of which is redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description fully specifies the returned `{ items, next_cursor }` contract and the termination condition (next_cursor null). Combined with the auth note and deprecation routing, an agent can call this correctly and know when to stop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 and the schema already documents both parameters thoroughly. The description adds real meaning beyond it by clarifying that `limit` sets the size of ONE page rather than a total, a semantics point the schema does not make.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with precise scope: the authenticated account's terminal-status order history, enumerated as filled / cancelled / rejected / expired, newest first. It also names the sibling it is superseded by (`fetch_orders`), so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent away from this tool with 'Deprecated: use `fetch_orders`', naming the alternative directly. The scope clause (terminal-status only) further distinguishes it from open-order tools in the sibling set such as get_open_orders.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_portfolio_historyA

Deprecated: use fetch_portfolio_history. Get the authenticated account's portfolio time-series — equity, cumulative trading PnL, and cumulative traded volume — over a selectable window, oldest first. Richer than fetch_equity_history (equity only, 5s cadence, ~1h); both derive equity from the same source, so the two never disagree. Each window sets its own downsample cadence and point capacity: day 5m/288, week 1h/168, month 6h/120, all 1d/366. pnl is deposit-neutral (trading performance only) and volume is monotonically non-decreasing. This is a HEAVY read — the gateway charges it 5x an ordinary GET, so a single call draws about five requests' worth of budget and the remaining reported by fetch_rate_limit_status (counted in ordinary requests) drops by ~5. Poll it sparingly. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of points to return (1–366). Clamped server-side to the selected window's capacity. Omit for the full window.
windowNoTime window to return, which also selects the cadence and point capacity. Defaults to `day` server-side when omitted.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: it discloses credential requirements, a 5x rate-limit cost with concrete budget impact ('remaining drops by ~5'), the per-window cadence/capacity table, oldest-first ordering, deposit-neutral PnL semantics, and monotonic volume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the deprecation notice, then the description. It is dense and fairly long, but nearly every sentence conveys behavior an agent needs; the cadence table and rate-limit detail are load-bearing rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only history tool with no output schema, the description covers scope, return semantics, ordering, window trade-offs, cost, and auth — nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema by giving the concrete cadence/capacity values per window (day 5m/288, week 1h/168, etc.) that the window enum description only alludes to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get portfolio time-series) and enumerates exactly what it returns (equity, cumulative trading PnL, cumulative traded volume). It explicitly positions itself against siblings fetch_portfolio_history and fetch_equity_history, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The very first clause routes the agent away from this tool ('Deprecated: use fetch_portfolio_history'), which is the strongest possible when-not guidance. It also names fetch_equity_history as the narrower alternative and warns to poll sparingly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_positionsA

Deprecated: use fetch_positions. Get the authenticated account's open positions. Positions carry per-position risk detail. notional_value, margin_used, roe, max_leverage, and leverage are derived from mirrored state, so any of them can be null with a companion <field>_error naming the reason (e.g. mark_price_unavailable); treat null as UNKNOWN, never as zero. leverage is currently always null (leverage_error: margin_state_not_mirrored) — do not infer it from margin_used. funding_paid is NOT one of those: it is always present and has no _error companion, so its "0" is a real zero (no funding accrued), not unknown. It is paid-positive — a negative value means funding was received. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses auth requirements, the mirrored-state derivation of `notional_value`/`margin_used`/`roe`/`max_leverage`/`leverage`, the `<field>_error` companion convention, the specific always-null `leverage` case, the pitfall of inferring leverage from `margin_used`, and the paid-positive sign convention for `funding_paid`. This is exactly the kind of non-obvious context structured fields cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the deprecation notice, then dense but purposeful sentences about null semantics. Slightly long and clause-heavy, but with no output schema every sentence about return shape earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must document return semantics itself — and it does, covering null/error handling, sign conventions, and auth. For a zero-param read tool, nothing an agent needs in order to interpret the response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description instead spends its space on return-value semantics, which is the correct tradeoff.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the authenticated account's open positions') and immediately distinguishes itself from the sibling it is superseded by ('Deprecated: use `fetch_positions`'). An agent knows both what it does and that it should prefer another tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly declares the tool deprecated and names the replacement (`fetch_positions`), which is the clearest possible when-not-to-use signal plus alternative. The authentication requirement is also stated up front.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rate_limit_statusA

Deprecated: use fetch_rate_limit_status. Get the authenticated account's current rate-limit status (remaining request budget). Useful for an agent to pace itself. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose an auth precondition ('Requires API credentials') and the operational intent ('pace itself'), but says nothing about whether the deprecated endpoint still functions, the granularity or shape of the returned budget, or any per-endpoint behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Deprecation warning is correctly front-loaded and the whole definition is three short clauses. The line 'Useful for an agent to pace itself' is mildly redundant with the parenthetical budget explanation but still earns its place by stating the use case.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated, zero-parameter tool with no annotations or output schema, the description covers purpose, replacement, and auth need. The only real gap is whether the endpoint still works during deprecation, which an agent deciding between the two tools would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is an empty closed object, so there is nothing for the description to disambiguate; the baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the authenticated account's current rate-limit status') and clarifies the payload as 'remaining request budget'. It also distinguishes itself from the sibling fetch_rate_limit_status, which is rare and directly useful for selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first token is 'Deprecated: use `fetch_rate_limit_status`', which is an explicit when-not-to-use plus a named alternative — exactly the routing an agent needs to avoid calling a stale tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_service_statusA

Deprecated: use fetch_status. Aggregate service health of the exchange stack (indexer / engine / oracle / bots), as used by status pages. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden: it discloses the deprecation status and that the endpoint is public with no credentials required, which is genuinely useful auth context. It stops short of saying whether the deprecated tool still functions, how often it can be called, or how failures are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the deprecation notice that matters most, then the scope. The trailing 'as used by status pages' is mild context rather than filler, so the text earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a param-less, annotation-free tool with no output schema, the description covers identity, scope, auth profile, and replacement routing. The main remaining gap is that it does not gesture at what the returned aggregate health looks like, which matters somewhat given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there are no parameter semantics to explain; the baseline for a param-less tool is 4. Nothing in the description contradicts the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('aggregate service health of the exchange stack') and enumerates the covered components (indexer / engine / oracle / bots). It also immediately flags deprecation and names the replacement sibling, so an agent can distinguish it from fetch_status without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause explicitly tells the agent not to use this tool ('Deprecated: use `fetch_status`'), naming the exact alternative. That is an unusually direct when-not-to-use instruction with the correct routing target.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statsA

Deprecated: use fetch_stats. Get aggregate venue statistics (volume, trades, throughput) plus rolling unique-trader counts. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses a meaningful behavioral trait — the endpoint is public and requires no credentials — which is exactly the kind of auth context an agent needs. It does not, however, mention caching/freshness, rate limits, or the historical counterpart's distinction, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The deprecation warning — the single most decision-relevant fact — is front-loaded before the functional description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, deprecated aggregate-statistics call with no output schema, the description covers purpose, output contents, auth posture, and the migration path. It omits only how it differs in scope from the sibling fetch_stats_history, a minor gap given the deprecation notice.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to compensate for; the baseline of 4 applies. The description correctly adds no fabricated parameter syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get aggregate venue statistics') and enumerates the returned metrics (volume, trades, throughput, rolling unique-trader counts). It also immediately flags deprecation and names the replacement, so an agent can distinguish it from fetch_stats without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance: 'Deprecated: use `fetch_stats`.' This tells the agent both when not to use this tool and which sibling to use instead, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stats_historyA

Deprecated: use fetch_stats_history. Get the venue's per-second throughput history (ring buffer, up to 3600 points). Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden and does well: it states the data shape (per-second throughput, ring buffer capped at 3600 points) and the auth profile ('Public — no credentials needed'). It stops short of return-format or rate-limit detail, but for a read-only public stats endpoint that gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the most decision-relevant fact (deprecation) front-loaded, followed by what it returns and its auth profile. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by characterizing the returned data (per-second throughput history, ring buffer, up to 3600 points) and confirming no credentials are needed. Nothing an agent needs to call this zero-param tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no per-parameter semantics to explain and the baseline of 4 applies. The description correctly implies no input is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the venue's per-second throughput history') and adds scoping detail (ring buffer, up to 3600 points). It also distinguishes itself from the sibling get_stats via the 'history' framing and names its own replacement, so an agent can tell it apart from related stat tools without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with 'Deprecated: use `fetch_stats_history`', which is an explicit when-not-to-use plus a named alternative. This is exactly the routing an agent needs to avoid calling a deprecated endpoint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickerA

Deprecated: use fetch_ticker. Get the ticker (last price, bid/ask, 24h stats) for one market, e.g. "BTC-USDX-PERP". Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and adds two useful facts: it is public/no credentials required, and it is deprecated in favor of another tool. It does not cover rate limits, error behavior, or return shape, but for a simple read endpoint the auth and lifecycle disclosures are meaningful additions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the deprecation warning front-loaded, followed by scope, example, and auth note. No filler; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, non-destructive, deprecated read tool with no output schema, the description supplies purpose, replacement target, auth requirement, and input example. Nothing an agent needs in order to call or avoid it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already documents the market id with the same 'BTC-USDX-PERP' example used in the description, so the description adds no syntax or format meaning beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the ticker') plus the exact payload scope (last price, bid/ask, 24h stats) for a single market. It explicitly distinguishes itself from the plural sibling (get_tickers/fetch_tickers) and names its own replacement (fetch_ticker).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-not-to-use guidance is front-loaded ('Deprecated: use `fetch_ticker`'), naming the exact alternative an agent should select instead. This is the clearest possible routing instruction for a deprecated tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tickersA

Deprecated: use fetch_tickers. Get tickers (last price, bid/ask, 24h stats) for ALL markets in one call. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden, and it does add real behavioral context: deprecation status and 'Public — no credentials needed' (an auth trait an agent must know). It omits rate-limit and pagination behavior, but for a simple public read that is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly-packed sentences with zero waste, and the most decision-relevant fact (deprecation + replacement) is placed first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description enumerates the payload fields (last price, bid/ask, 24h stats), covering what an agent needs. No params and no nested structure mean little is left unstated; only rate-limit/caching behavior is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly adds no parameter noise.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get tickers'), enumerates the returned fields (last price, bid/ask, 24h stats), and scopes it to ALL markets. The contrast with the single-market sibling get_ticker is implicit and the ALL-markets scope is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Front-loads 'Deprecated: use fetch_tickers', which names the exact replacement sibling. An agent knows both when to use this and, more importantly, when not to — nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tradesA

Deprecated: use fetch_trades. Get recent public trades (prints) for one market, newest first. Returns { items, next_cursor }. items is this page of results; next_cursor is an opaque token for the next page, or null when this is the last page. To read the full history, keep calling with cursor: <previous next_cursor> until next_cursor is null. limit sets the size of ONE page, not a total. Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of trades per page (max 1000).
cursorNoOpaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.
market_idYesMarket id, e.g. "BTC-USDX-PERP".

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it declares the access profile ("Public — no credentials needed"), the ordering guarantee (newest first), the pagination contract (`next_cursor` opaque, null terminates), and clarifies that `limit` is per-page rather than a total. This is exactly the behavioral context annotations would otherwise need to supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation warning, then purpose, then return shape and pagination in a logical order. It is somewhat long and repeats the cursor story that the schema already tells, but every sentence still earns its place for a paging tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return shape (`{ items, next_cursor }`), the token semantics, and the termination condition, plus auth requirements. Nothing needed to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds a genuinely useful disambiguation by stating "`limit` sets the size of ONE page, not a total" and explaining the cursor round-trip. Most cursor text mirrors the schema, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get recent public trades (prints) for one market, newest first") and immediately flags itself as deprecated in favor of a named sibling (`fetch_trades`). An agent can distinguish it from `get_orderbook`, `get_candles`, and `fetch_my_trades` without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when NOT to use it ("Deprecated: use `fetch_trades`") and then explains exactly how to consume it (loop on `cursor` until `next_cursor` is null). Both the alternative and the operative condition are named, with nothing left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_withdrawalsA

Deprecated: use fetch_withdrawals. List the authenticated account's withdrawal history. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 100).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses deprecation status and the auth requirement, but says nothing about pagination, default limit behavior, or the shape of results. For a read-only list tool these gaps are moderate, not severe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the deprecation warning front-loaded ahead of the functional description – exactly the ordering an agent needs to avoid calling it by mistake. Zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the definition covers purpose, alternative, and auth prerequisite. It stops short of describing return format or pagination, but those gaps are minor given the tool's simplicity and deprecated status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single `limit` parameter is fully documented in the schema (100% coverage, including the max-100 cap), so the schema does the heavy lifting. The description adds nothing beyond it, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (the authenticated account's withdrawal history), and immediately flags that the tool is deprecated. An agent can distinguish it from the many sibling history/list tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the replacement (`fetch_withdrawals`) and tells the agent to use that instead, which is the strongest possible when-to-use guidance for a deprecated tool. It also states the prerequisite ('Requires API credentials').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ws_tokenA

Deprecated: use create_ws_token. Mint a short-lived (60s, single-use) token for an authenticated per-account WebSocket stream (order/fill/position updates). Uses the current /ws/token endpoint, which supports HMAC keys and registered agents. The response carries ws_endpoint — the URL to connect to for the configured network — so no host has to be guessed. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers: 60s lifetime, single-use semantics, the endpoint in use, HMAC/agent support, and an explicit credential requirement. It omits failure/expiry behavior, but for a zero-argument minting call this is substantially more than most definitions provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Deprecation warning is front-loaded where an agent will see it first, followed by purpose, then implementation and return detail. Every sentence adds a distinct fact with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating the response carries `ws_endpoint` for the configured network. Combined with lifetime, auth, and deprecation status, an agent has what it needs to call correctly; only error/expiry handling is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The only input-related fact added is the auth requirement ("Requires API credentials"), which is the one thing an agent must arrange before calling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Mint") plus resource ("short-lived token for an authenticated per-account WebSocket stream") and narrows scope further to "order/fill/position updates". It explicitly distinguishes itself from siblings by flagging deprecation and naming create_ws_token as the successor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with "Deprecated: use `create_ws_token`", giving an explicit when-not-to-use and naming the alternative. It does not explain the residual case in which an agent should still pick this tool, so it stops short of full routing guidance, but the deprecation directive is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ws_token_legacyA

Deprecated: use create_ws_token_legacy. Mint a short-lived (60s, single-use) token for the legacy public /stream endpoint via POST /ws-tokens. Prefer create_ws_token (/ws/token) for new code; this is kept for /stream compatibility. The response carries ws_endpoint for the configured network. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses token lifetime (60s), single-use semantics, the credential prerequisite, the HTTP method/path, and that the response carries `ws_endpoint`. It does not mention rate limits, whether minting invalidates prior tokens, or other side effects of the POST, so it stops short of complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation warning and endpoint, then the alternative, then auth requirements – sensible ordering with no filler sentences. Slight redundancy: the deprecation is restated ('Deprecated' ... 'Prefer ... for new code' ... 'kept for /stream compatibility') across three clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool this covers everything an agent needs: deprecation status, replacement routing, auth prerequisite, token lifetime/single-use, and the one response field (`ws_endpoint`). Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty with 100% coverage, so the baseline of 4 applies. The description adds no parameter detail, but none is needed since there is nothing to configure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource and transport: mint a short-lived token for the legacy public `/stream` endpoint via `POST /ws-tokens`. It is clearly distinguishable from `create_ws_token` (`/ws/token`) and from the plain `get_ws_token`. However, the opening 'Deprecated: use `create_ws_token_legacy`' is internally muddled, since a later sentence recommends `create_ws_token` for new code, so the primary directive is slightly ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit selection guidance: prefer `create_ws_token` for new code, keep this only for `/stream` compatibility. That is a real when-to-use/when-not statement. The caveat is that it names two competing replacements (`create_ws_token_legacy` and `create_ws_token`), leaving the agent to reconcile which one to route to.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agentsA

Deprecated: use fetch_agents. List the delegated agent keys registered for the authenticated wallet (address, label, expiry). Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. It discloses that API credentials are required, marks the tool as deprecated, and describes the returned fields, but does not mention rate limits, pagination, or other call constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no wasted words. The deprecation warning is front-loaded, followed by scope, return fields, and auth requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema deprecated list tool, the description is complete enough: it identifies the replacement, the required auth, and the returned fields. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to document. Baseline for zero parameters is 4; the description does not need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists delegated agent keys for the authenticated wallet. It also names the return fields and explicitly distinguishes this from the replacement sibling `fetch_agents`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Begins with a clear deprecation notice and names the alternative tool `fetch_agents`, which tells the agent not to use this tool for new work. This is explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_api_keysA

Deprecated: use fetch_api_keys. List the HMAC API keys for the authenticated wallet (key ids and metadata; never the secrets). Authenticates with the session token from login, or NEXUS_EXCHANGE_SESSION_TOKEN.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does useful work: it discloses that only key IDs and metadata are returned, never secrets, and that authentication uses a session token from `login` or `NEXUS_EXCHANGE_SESSION_TOKEN`. It does not mention rate limits, pagination, or error behavior, but covers the most important safety and auth context for a read-only list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation warning and replacement are front-loaded, followed by the purpose, scope, and authentication details in a compact space. Every sentence adds useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, zero-parameter list tool with no output schema and no annotations, the description supplies the key missing pieces: deprecation, replacement, return scope, and authentication method. An agent has enough to avoid using it incorrectly and to understand what it would return if called.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain. The description correctly avoids inventing or misstating parameters, and the baseline for a zero-parameter tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the HMAC API keys') and scopes it to the authenticated wallet. It explicitly distinguishes itself from the replacement sibling by opening with 'Deprecated: use `fetch_api_keys`', so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first sentence names the alternative tool explicitly ('use `fetch_api_keys`') and the condition (deprecation) that should route the agent away from this tool. This is exactly the when-not/alternative guidance needed for a deprecated operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bridge_deposit_addressesA

Deprecated: no server implements this route (its design was cancelled, ENG-11460), so every call fails. List the authenticated account's cross-chain deposit addresses across chains. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the failure mode (every call fails), the reason (cancelled design), and an auth requirement ('Requires API credentials'). It does not detail what the auth mechanism is, but that is a minor gap for a tool that is never callable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the actionable warning first, then the intended purpose, in two short sentences. Nothing is padded and the ordering prioritizes what the agent needs to decide not to call this.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, output-schema-less, deprecated stub, the description is complete: it tells the agent what the tool was meant to do, that it is unusable, why, and that credentials would be required. No further information would change agent behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters with 100% schema coverage, so the baseline of 4 applies. There is nothing for the description to clarify or compensate for on the parameter side.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List the authenticated account's cross-chain deposit addresses across chains.' This distinguishes it from the related write sibling create_bridge_deposit_address and the deposit-list siblings, though the deprecation notice dominates the opening.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It could not be clearer about when NOT to use the tool: 'Deprecated: no server implements this route... so every call fails.' An agent is unambiguously steered away from calling it, with a ticket reference (ENG-11460) as evidence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bridge_depositsA

Deprecated: use fetch_bridge_deposits. List the authenticated account's cross-chain (bridge) deposits, newest first. Optionally filter by source chain, asset (USDC|USDX), or status (detected|confirming|credited|failed). Distinct from fetch_deposits, which lists the account's ledger deposits. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoFilter by deposited asset. Optional.
chainNoFilter by source chain. Optional.
limitNoMaximum number of records to return (max 100).
statusNoFilter by deposit status. Optional.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that API credentials are required, that results are ordered newest first, and that the tool is deprecated. It does not mention rate limits, pagination beyond the limit parameter, or explicitly state that the operation is read-only, but the core behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, front-loaded with the deprecation notice and replacement tool. Each sentence adds distinct value: purpose, ordering, filters, sibling distinction, and auth requirement. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no annotations and no output schema, the description covers deprecation, replacement, auth, ordering, filters, and sibling differentiation. It omits any description of the return payload shape or pagination behavior beyond the limit parameter, which is a minor gap but not critical for a deprecated read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters fully. The description restates the asset and status enum values and mentions chain filtering, but adds no syntax, format, or interaction details beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (cross-chain bridge deposits) for the authenticated account, with ordering and optional filters. It also names the replacement tool and distinguishes itself from `fetch_deposits`, so an agent can identify its exact scope without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly marks the tool as deprecated and directs the agent to `fetch_bridge_deposits`, which is a clear when-not-to-use instruction. It also states the authentication requirement and contrasts the tool with `fetch_deposits`, leaving no ambiguity about when this tool is appropriate versus its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bridge_walletsA

List the authenticated account's registered withdrawal wallets. Wallets are not chain-scoped: one EVM address is valid on every supported EVM chain, and the chain is chosen per withdrawal. In this cut an account holds at most one wallet and both verified and is_default are always true on it, so do not branch on either — they start varying only with the wallet-lifecycle follow-up. An empty wallets array means nothing is registered yet; use create_bridge_wallet_challenge then register_bridge_wallet. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses chain-agnostic EVM address behavior, the 'at most one wallet' invariant in this cut, the constant values of verified and is_default, the intent to vary those fields later, and the meaning of an empty wallets array. This is substantial context beyond a generic 'list' command.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is a clear, front-loaded statement of purpose. Every subsequent sentence contributes meaningful operational context, but the explanation around verified and is_default could be tightened without losing information. Still, the description is appropriately sized for the amount of caveat it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with no output schema, the description is complete: it specifies the account scope, chain behavior, current field invariants, empty-array semantics, follow-up tools, and authentication requirement. An agent has everything needed to invoke it and interpret its result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero input parameters and the input schema is empty, so there is nothing for the description to add about parameter meaning. The baseline of 4 for parameterless tools applies. The field-level details in the description concern output semantics, not input semantics, so they don't affect this score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List the authenticated account's registered withdrawal wallets.' It further distinguishes this tool from sibling wallet-management tools by clarifying that these are withdrawal wallets and by framing create/register wallet tools as follow-ups rather than alternatives. This leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (to list registered withdrawal wallets) and what to do when the list is empty: use create_bridge_wallet_challenge then register_bridge_wallet. It also tells the agent not to branch on verified or is_default in the current cut and notes the API credentials requirement. This is strong, actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_depositsA

Deprecated: use fetch_deposits. List the authenticated account's deposit history. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (max 100).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does add two useful behavioral facts: this is a read of the authenticated account's own history, and it requires API credentials. However it says nothing about pagination behavior, ordering, or return shape for a list endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loading the deprecation warning before the purpose and the auth requirement. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, deprecated read tool with full schema coverage and no output schema, the description covers purpose, replacement, and auth. Only pagination/ordering details are absent, which is a minor gap given the tool is being retired.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single `limit` parameter (including the max-100 bound), so the schema already carries the semantics. The description adds no parameter detail beyond that, which is the baseline-3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the authenticated account's deposit history') and immediately flags its lifecycle status as deprecated with the named successor `fetch_deposits`. An agent can distinguish it from the many sibling listing tools (get_withdrawals, fetch_bridge_deposits) without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly redirects to `fetch_deposits` as the replacement, which is strong routing guidance and effectively constitutes a 'when not to use' instruction. It stops short of 5 because it doesn't say whether this deprecated tool still works, or under what conditions an agent might still legitimately call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_marketsA

Deprecated: use fetch_markets_summary. List all tradable markets with their current summary (mark price, 24h change, volume, open interest, funding). Public — no credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full behavioral burden, and it does the most important part: 'Public — no credentials needed' discloses the auth requirement explicitly. It also implies a safe read via 'List'. It does not mention pagination, rate limits, or whether the list is unbounded, which is the only real gap for a zero-parameter read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, and the most decision-relevant fact (deprecation plus replacement) is front-loaded before the descriptive content. Nothing is repeated from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param public listing tool with no output schema and no annotations, the description supplies the purpose, the returned fields, and the auth posture, which is enough to call it correctly. Minor omissions (pagination behavior, response size) are the only reason it is not a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema baseline of 4 applies. There is nothing parameter-level for the description to clarify, and it correctly avoids inventing filtering options that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all tradable markets') and enumerates exactly what each entry contains (mark price, 24h change, volume, open interest, funding). It goes further by naming the sibling that supersedes it, so an agent can distinguish it from fetch_markets and fetch_markets_summary without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description opens with 'Deprecated: use `fetch_markets_summary`,' which is the strongest possible usage guidance: an explicit when-not-to-use plus the named alternative. An agent reading only this line knows to route away from this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_market_specsA

Deprecated: use fetch_markets. List all markets with their static specs (tick size, lot size, leverage, contract details) — the raw market definitions without live summary stats. Public — no credentials needed. (Use fetch_markets_summary for live mark price / volume / funding.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that the tool is public and requires no credentials, and that it returns raw definitions without live summary stats. It does not mention read-only nature explicitly or discuss rate limits, but for a simple list endpoint this is mostly adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The deprecation notice is front-loaded, followed by what the tool returns, its public nature, and the alternative for live data. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with no output schema, the description sufficiently covers the returned content (static market specs), exclusions (live stats), and credential requirement. It stops short of describing pagination or exact response shape, but that is a minor gap for this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are not applicable. The baseline for zero-parameter tools is 4, and the description adds no misleading parameter information because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List all markets') and scopes it to static specs ('tick size, lot size, leverage, contract details') while excluding live summary stats. It also names the sibling tools it differs from, so an agent can distinguish it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly marks the tool as deprecated, names the replacement (`fetch_markets`), and routes live-data queries to `fetch_markets_summary`. This gives clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loginA

Sign in with an EVM wallet to get a 24h session token. Submit an EIP-191 personal_sign signature over the exact message "Sign in to Nexus Exchange", made in the wallet and passed as signature. Omit signature to have the stdio server sign with its own wallet (see create_wallet; play-funds targets only). The returned token is the Bearer credential for the *_api_key tools. The stdio server keeps it for the rest of this session and saves it for this network in the Nexus CLI config (saved_to names the file), so nothing has to be copied into the environment. No credentials needed to call this.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoSigned message. Must be exactly "Sign in to Nexus Exchange" (the default if omitted).
signatureNoEIP-191 personal_sign hex (0x-prefixed, 65 bytes) over the login message. Omit it to have this server sign with its own wallet.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden: EIP-191 personal_sign over the exact login message, optional server-wallet signing limited to play-funds, returned Bearer token for *_api_key tools, and session/CLI config persistence via saved_to. This is rich, actionable transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six sentences, front-loaded with the login outcome, then signing instructions, token usage, and persistence behavior. Each sentence earns its place without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a login tool with no annotations and no output schema, it covers credential requirements, signature generation, token use, session persistence, and network-specific config saving. An agent has enough information to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics beyond the schema: exact message requirement, EIP-191 signing workflow, and the consequence of omitting signature, though the schema already documents both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Sign in with an EVM wallet to get a 24h session token.' It also distinguishes the returned token's role for the *_api_key tools, making the tool's purpose self-contained among credential-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains how to call with or without a signature and notes that no credentials are needed. It names create_wallet for server-side signing and limits that path to play-funds targets, but does not explicitly contrast login with alternatives such as get_ws_token.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

place_orderA

Deprecated: use create_order. Place an order on a market, buy/sell. Supports limit, market, stop-loss (stop_limit / stop_market), take-profit (take_profit_limit / take_profit_market), and trailing (trailing_stop / trailing_limit) orders. Limit-family orders require a price; stop / take-profit orders require a trigger_price; trailing orders require trailing_offset_bps (and trailing_limit also limit_offset_bps). Requires API credentials. This submits a REAL order to the matching engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYesOrder side.
sizeYesOrder quantity in base units, as a positive decimal string (> 0).
typeYesOrder type. `limit` and `market` are unconditional. `stop_limit` / `stop_market` fire when the mark price crosses `trigger_price` in the adverse direction (stop-loss); `take_profit_limit` / `take_profit_market` fire on the favorable direction. `trailing_stop` fires a market order once the mark retraces from its best-seen extreme by `trailing_offset_bps`; `trailing_limit` fires the same way but rests a limit order priced off the fire price by `limit_offset_bps`. Field requirements: limit-family (`limit`, `stop_limit`, `take_profit_limit`) require `price`; stop / take-profit types require `trigger_price`; trailing types require `trailing_offset_bps`.
priceNoLimit price as a positive decimal string (> 0). Required for limit-family orders (`limit`, `stop_limit`, `take_profit_limit`); must be omitted for market, stop_market, take_profit_market, and trailing orders (which are priced by the engine or computed at fire time).
market_idYesMarket id, e.g. "BTC-USDX-PERP".
reduce_onlyNoIf true, only reduces an existing position.
time_in_forceNoTime in force. Defaults to GTC for limit, IOC for market. `PostOnly` rejects the order if it would take liquidity on entry, guaranteeing it rests as a maker.
trigger_priceNoTrigger threshold as a positive decimal string (> 0). Required for stop and take-profit orders (`stop_limit`, `stop_market`, `take_profit_limit`, `take_profit_market`): the order activates once the mark price crosses it — adversely for stops, favorably for take-profits. Must be omitted for other order types.
limit_offset_bpsNoFire-time limit-price offset in basis points (`trailing_limit` only; required together with `trailing_offset_bps`). The rested limit sits at fire_price * (1 + offset) for buys / * (1 - offset) for sells; 0 rests exactly at the fire price.
trailing_offset_bpsNoTrailing trigger offset in basis points (1 bp = 0.01%). Required for trailing orders (`trailing_stop`, `trailing_limit`); must be omitted otherwise. Fires once the mark price retraces from its best-seen extreme by this many bps (0 fires at the first evaluation).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses key traits: it requires API credentials, it submits a REAL order to the matching engine, and it explains trigger/fire semantics for stop, take-profit, and trailing orders. It stops short of stating rate limits, idempotency behavior, or error conditions, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation warning, then the operation, then the type/field matrix in dense, information-rich sentences. It is longer than ideal and duplicates some schema content, but nearly every clause earns its place for a complex 10-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers deprecation, credential requirements, real execution, and conditional parameter requirements for a complex tool with no output schema. It omits return values (order id/response shape) and any idempotency or rate-limit context, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter, including field requirements per order type. The description's parameter recap (which type requires which field) largely restates the schema rather than adding new meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Place an order on a market, buy/sell') and immediately flags deprecation in favor of `create_order`, distinguishing it from siblings like preview_order and create_order. An agent can identify both what it does and that a preferred replacement exists without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative ('Deprecated: use `create_order`') and gives the condition that selects it. It also specifies per-order-type usage rules (when `price`, `trigger_price`, `trailing_offset_bps`, and `limit_offset_bps` apply), so an agent knows exactly when and how to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

place_orders_batchA

Deprecated: use create_orders. Submit multiple orders in one request. Each order has the same shape as create_order (market_id, side, type, size, and the type-dependent price / trigger_price / trailing offsets / time_in_force / reduce_only). Requires API credentials. This submits REAL orders to the matching engine.

ParametersJSON Schema
NameRequiredDescriptionDefault
ordersYesOrders to submit (1–100). Each uses the create_order arg shape.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does disclose two critical traits: 'Requires API credentials' (auth prerequisite) and 'This submits REAL orders to the matching engine' (real-money mutation, not a preview). It stops short of batch-specific behavior such as atomicity or what happens if one order in the batch is rejected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the deprecation warning so the agent sees the most decision-relevant fact first. The field-shape sentence is partly redundant with the schema, but the rest earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers auth, real-order impact, and item shape, but for a batch mutation tool with no annotations and no output schema it omits partial-failure semantics (all-or-nothing vs per-order rejection), the 1–100 limit's consequence, and no indication of the return payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the nested `orders` schema already documents every field, including type-dependent requirements. The description's field recap ('market_id, side, type, size, and the type-dependent price / trigger_price / trailing offsets...') restates the schema rather than adding format or constraint meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Submit multiple orders in one request') and distinguishes itself from both `create_order` (singular) and its named replacement `create_orders`. The deprecation prefix immediately classifies the tool's standing among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent away from this tool ('Deprecated: use `create_orders`'), naming the alternative. That covers both the when-not and the alternative-selection guidance in one clause, leaving nothing to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_orderA

Preview an order without submitting it: projects the margin, equity, and fee impact of the order. Takes the same arguments as create_order. Nothing reaches the matching engine. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYesOrder side.
sizeYesOrder quantity in base units, as a positive decimal string (> 0).
typeYesOrder type. `limit` and `market` are unconditional. `stop_limit` / `stop_market` fire when the mark price crosses `trigger_price` in the adverse direction (stop-loss); `take_profit_limit` / `take_profit_market` fire on the favorable direction. `trailing_stop` fires a market order once the mark retraces from its best-seen extreme by `trailing_offset_bps`; `trailing_limit` fires the same way but rests a limit order priced off the fire price by `limit_offset_bps`. Field requirements: limit-family (`limit`, `stop_limit`, `take_profit_limit`) require `price`; stop / take-profit types require `trigger_price`; trailing types require `trailing_offset_bps`.
priceNoLimit price as a positive decimal string (> 0). Required for limit-family orders (`limit`, `stop_limit`, `take_profit_limit`); must be omitted for market, stop_market, take_profit_market, and trailing orders (which are priced by the engine or computed at fire time).
market_idYesMarket id, e.g. "BTC-USDX-PERP".
reduce_onlyNoIf true, only reduces an existing position.
time_in_forceNoTime in force. Defaults to GTC for limit, IOC for market. `PostOnly` rejects the order if it would take liquidity on entry, guaranteeing it rests as a maker.
trigger_priceNoTrigger threshold as a positive decimal string (> 0). Required for stop and take-profit orders (`stop_limit`, `stop_market`, `take_profit_limit`, `take_profit_market`): the order activates once the mark price crosses it — adversely for stops, favorably for take-profits. Must be omitted for other order types.
limit_offset_bpsNoFire-time limit-price offset in basis points (`trailing_limit` only; required together with `trailing_offset_bps`). The rested limit sits at fire_price * (1 + offset) for buys / * (1 - offset) for sells; 0 rests exactly at the fire price.
trailing_offset_bpsNoTrailing trigger offset in basis points (1 bp = 0.01%). Required for trailing orders (`trailing_stop`, `trailing_limit`); must be omitted otherwise. Fires once the mark price retraces from its best-seen extreme by this many bps (0 fires at the first evaluation).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the absence of side effects ("Nothing reaches the matching engine"), the auth prerequisite ("Requires API credentials"), and what the call returns conceptually (margin, equity, fee impact). It does not mention rate limits or the exact structure of the projection, leaving a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each load-bearing: purpose, output content, argument compatibility, side-effect guarantee, and auth requirement. The core purpose is front-loaded and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation-adjacent tool with no annotations and no output schema, the description supplies the essential behavior (no order submitted, credentials needed) and the argument-compatibility shortcut. It could say more about the shape of the preview response, but an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all ten parameters are already documented in the schema with enums, requirements, and conditional rules. The description adds only the meta-point that the argument set mirrors create_order, which is useful for reuse but not new per-parameter meaning. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Preview an order without submitting it" gives a specific verb and resource, and the follow-up names exactly what the projection contains (margin, equity, fee impact). It also implicitly distinguishes itself from create_order by noting it takes the same arguments and that nothing reaches the matching engine.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the use case clear: dry-run an order before submitting, mirroring create_order's arguments. It lacks an explicit "use this instead of create_order when ..." routing sentence and names no exclusion conditions, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_agentA

Register a delegated agent key so an AI agent can trade on a wallet's behalf without holding the wallet key. Authorized by an EIP-712 signature from the OWNER WALLET over RegisterAgent{agent, expiresAt, nonce} (domain Nexus Exchange v1). Sign it in the wallet and pass wallet and signature, or omit both to have the stdio server sign with its own wallet (see create_wallet; testnet and local only, expiry defaulting to now+30d). No API credentials are needed; the signature is the authorization.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYesAgent Ethereum address (0x-prefixed, 20 bytes) to delegate to.
labelNoOptional human-readable label for the agent.
nonceYesMonotonic nonce. Use the current Unix time in ms as a safe start.
walletNoOwner wallet address (0x-prefixed, 20 bytes). Required with `signature`; defaults to this server's wallet without one.
signatureNoEIP-712 signature over RegisterAgent{agent, expiresAt, nonce} from the wallet private key (0x-prefixed). Omit it to have this server sign with its own wallet.
expires_atNoExpiry as Unix ms. Optional — defaults to now+30d. Must be in [now+1d, now+90d].

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely meets it: it discloses the authorization mechanism (EIP-712 over a named struct/domain), that no API credentials are required, that the server-signing fallback is restricted to testnet/local, and the default expiry. It does not state that this is a state-mutating, persistent delegation, nor what happens on nonce reuse or how failure surfaces.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every sentence carries information (authorization, two signing paths, fallback constraints). It is dense in places — the third sentence packs the alternative mode, the create_wallet reference, the network restriction, and the expiry default into one clause chain — but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers authorization, the fallback path, network scoping, and expiry bounds. It leaves the agent guessing about the success response and error/undo behavior, and never ties itself to the revoke_agent counterpart.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it maps `agent`/`expiresAt`/`nonce` into the signed EIP-712 struct, defines the pairing rule for `wallet`+`signature` (both or neither), and names the default expiry source. That is semantic guidance the schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Register a delegated agent key') plus the outcome ('trade on a wallet's behalf without holding the wallet key'). This clearly separates it from siblings like revoke_agent, list_agents, and create_api_key without the agent needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains both invocation paths precisely: sign the EIP-712 payload and pass `wallet`+`signature`, or omit both to let the server sign (testnet/local only), and routes to `create_wallet`. It states the conditions that select each mode but does not contrast this tool against other auth/credential tools (e.g. create_api_key), so no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_bridge_walletA

Step 2 of registering a withdrawal wallet: submit the address, the message returned by create_bridge_wallet_challenge echoed back VERBATIM, and the EIP-191 signature over it. Omit signature to have the stdio server sign with its own wallet (see create_wallet; play-funds targets only, and address must be that wallet). The address recovered from the signature must equal address, and the challenge must name the authenticated account. The registered wallet is where withdrawals are paid, so getting it wrong matters: an account holds ONE wallet in this cut and replacement is not supported — registering a different address afterwards is refused with 409 wallet_already_registered rather than updating the record. Because of that you must pass confirm: true. Re-registering the SAME address is idempotent and returns the existing record. Errors: invalid_address, invalid_challenge, challenge_expired, signature_mismatch, account_mismatch on 400; wallet_registration_unavailable on 503 when the deployment has no challenge key (not transient — do not retry). Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesEVM address being registered (0x-prefixed, 20 bytes). Must match the address recovered from `signature`.
confirmNoMust be true to actually register. Guards a permanent choice: the account gets one withdrawal wallet and cannot swap it later.
messageYesThe `message` from `create_bridge_wallet_challenge`, echoed back byte-for-byte. Do not reformat, re-encode or trim it — the server re-derives the signed bytes and the integrity tag from this exact string.
signatureNo0x-prefixed 65-byte EIP-191 `personal_sign` signature over `message`, produced by the key for `address`. Optional when this server holds the wallet for `address`: it signs instead.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discharges it: idempotency on same-address re-registration, 409 `wallet_already_registered` on replacement refusal, the exact error codes with HTTP statuses, and the non-transient 503 `wallet_registration_unavailable` with an explicit do-not-retry instruction. It also states the auth requirement ('Requires API credentials') and the address-recovery invariant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded with the operation's identity and its step in the flow, and each sentence adds a distinct constraint (verbatim echo, signing fallback, one-wallet rule, confirm guard, error taxonomy). It is dense rather than padded, though the length is near the upper bound for comfortable scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description explains what a successful call returns (the existing record on idempotent re-registration) and enumerates failure modes with status codes. For a consequential one-shot mutation with four params, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics: `message` must be echoed VERBATIM or the integrity tag fails, `signature` is optional only when the server holds the wallet for `address`, and `confirm` guards a permanent choice. These relationships go beyond the per-field schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Step 2 of registering a withdrawal wallet') and names exactly what is submitted (address, message, signature). It clearly positions itself relative to the sibling `create_bridge_wallet_challenge`, so an agent can distinguish it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the prerequisite (the message from `create_bridge_wallet_challenge`), the conditional path (omit `signature` to have the stdio server sign, play-funds targets only), and the required `confirm: true`. It also tells the agent when registration is refused, which is strong when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_agentA

Revoke a previously registered delegated agent key by its address. Destructive: the agent can no longer trade on the wallet's behalf. To avoid an accidental revoke you must pass confirm: true. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesAgent address to revoke (0x-prefixed).
confirmNoMust be true to actually revoke (guards against typos).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the destructive effect (agent can no longer trade) and the precondition of API credentials, adding valuable behavioral context beyond the input schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action. Every sentence adds value with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple revocation tool: covers purpose, destructive nature, confirm guard, and credential requirement. No output schema is acceptable as return value is likely a success/error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description reinforces the confirm parameter's guard role ('To avoid an accidental revoke'), but does not add new syntax or format details beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Revoke a previously registered delegated agent key by its address') with a specific verb and resource, distinguishing it from siblings like register_agent and list_agents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context: destructive nature, requirement for confirm flag, and need for API credentials. Does not explicitly state when not to use, but the guard against accidental revoke is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_cancel_on_disconnectA

Enable or disable cancel-on-disconnect (COD) for the authenticated account. Pass enabled: true to arm the dead man's switch (the exchange cancels all resting orders when your authenticated WebSocket drops and does not reconnect within the grace window) or enabled: false to disable it. Off by default. enabled is required and explicit — there is no default — so every call states the intended state and an argless call is rejected rather than silently toggling. Returns the resulting COD status. Requires API credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYesTrue to enable COD for the account, false to disable.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and excels: it explains the dead man's switch behavior, the grace window, the explicit state requirement, that argless calls are rejected, that API credentials are required, and that it returns the resulting status. This is complete and transparent for a state-setting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized—every sentence adds value. It front-loads the purpose, explains the behavior, the reason for explicitness, the return, and the requirement, all in a well-structured paragraph without any fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-boolean-parameter tool with no output schema, the description is complete: it covers purpose, behavior, return value, authentication requirements, and edge cases (explicit value, argless rejection). Despite being simple, the description covers all relevant context needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the parameter already described. The description adds meaning beyond the schema by explaining the real-world effect (cancels orders on disconnect, grace window) and the rationale for the explicit required boolean. This goes beyond a simple repetition, justifying a score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (enable or disable cancel-on-disconnect) and the resource (COD for the authenticated account). It distinguishes from the sibling get_cancel_on_disconnect by explicitly focusing on the set operation, and explains the behavioral effect of arming the switch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use it (to arm or disarm the dead man's switch) and explicitly notes that the enabled parameter is required with no default. While it doesn't explicitly name alternatives, the sibling get_cancel_on_disconnect makes the distinction obvious, so the usage guidance is strong but could be more explicit about exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_depositA

Deprecated: use create_deposit. Submit a (testnet/synthetic) deposit for the authenticated account via the deposits ledger (POST /deposits — unlike deposit, the deposit is recorded and listable with fetch_deposits). amount is a positive decimal string; asset defaults to USDX. Requires API credentials. This moves REAL collateral on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoAsset symbol. Optional; defaults to "USDX".
amountYesAmount to deposit, as a positive decimal string (> 0).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses API-credential requirements, that the deposit is persisted/recorded, and that it moves REAL collateral on the account. It does not cover reversibility, rate limits, or error behavior, and the 'testnet/synthetic' vs 'REAL collateral' framing is slightly tension-laden, keeping it just below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deprecation notice and the correct alternative before the mechanism detail, so the most actionable information comes first. Slightly dense with parenthetical asides, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, yet the description supplies the safety profile (auth required, real collateral moved, recorded) and routing. It is complete enough to invoke correctly, with only minor gaps around failure/reversal behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description's restatement that `amount` is a positive decimal string and `asset` defaults to USDX adds no meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (submit a deposit via the deposits ledger) and immediately distinguishes itself from siblings: it is deprecated in favor of `create_deposit`, and it differs from `deposit` in that the deposit is recorded and listable via `fetch_deposits`. An agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says the tool is deprecated and names the replacement (`create_deposit`), and clarifies the alternative `deposit` it is not equivalent to. The condition that selects each sibling is stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 55 tool updatesv0.4.0
    • Addedadd_margin
    • Addedcancel_all_orders
    • Changedcancel_order4 fields changed
      • removedInput schema / properties / cancel_all
        Removed value: -{
        -  "description": "Set true to cancel ALL open orders. Required (and the only way) to trigger a mass-cancel; ignored when `order_id` is given.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / market_id / description
        Previous value: -"Market id. REQUIRED when cancelling a single order (`order_id`); optional with `cancel_all` to scope the mass-cancel to one market."New value: +"Market the order rests on (required for routing)."
      • changedInput schema / properties / order_id / description
        Previous value: -"Order id to cancel a single order."New value: +"Id of the order to cancel."
      • changedInput schema / required
        Previous value: -[]New value: +[
        +  "order_id",
        +  "market_id"
        +]
    • Changedcreate_bridge_deposit_address1 field changed
      • changedInput schema / properties / chain / description
        Previous value: -"Chain to get-or-create a deposit address on, e.g. \"ethereum\". Use `get_bridge_assets` to discover supported chains."New value: +"Chain to get-or-create a deposit address on, e.g. \"ethereum\". Use `fetch_bridge_assets` to discover supported chains."
    • Addedcreate_deposit
    • Addedcreate_order
    • Addedcreate_orders
    • Addedcreate_wallet
    • Addedcreate_ws_token
    • Addedcreate_ws_token_legacy
    • Addeddeposit
    • Addededit_order
    • Addedfetch_account_state
    • Addedfetch_account_summary
    • Addedfetch_adl_events
    • Addedfetch_adl_history
    • Addedfetch_agents
    • Addedfetch_api_keys
    • Addedfetch_balance
    • Addedfetch_bridge_assets
    • Addedfetch_bridge_deposit
    • Addedfetch_bridge_deposits
    • Addedfetch_cancel_on_disconnect
    • Addedfetch_deposits
    • Addedfetch_equity_history
    • Addedfetch_funding_history
    • Addedfetch_funding_rate_history
    • Addedfetch_funding_samples
    • Addedfetch_mark_price
    • Addedfetch_market_risk_params
    • Addedfetch_market_status
    • Addedfetch_markets
    • Addedfetch_markets_summary
    • Addedfetch_my_trades
    • Addedfetch_ohlcv
    • Addedfetch_open_orders
    • Addedfetch_order
    • Addedfetch_order_book
    • Addedfetch_orders
    • Addedfetch_portfolio_history
    • Addedfetch_positions
    • Addedfetch_positions_history
    • Addedfetch_rate_limit_status
    • Addedfetch_stats
    • Addedfetch_stats_history
    • Addedfetch_status
    • Addedfetch_ticker
    • Addedfetch_tickers
    • Addedfetch_trades
    • Addedfetch_trading_fees
    • Addedfetch_withdrawals
    • Changedlogin2 fields changed
      • changedInput schema / properties / signature / description
        Previous value: -"EIP-191 personal_sign hex (0x-prefixed, 65 bytes) over the login message."New value: +"EIP-191 personal_sign hex (0x-prefixed, 65 bytes) over the login message. Omit it to have this server sign with its own wallet."
      • changedInput schema / required
        Previous value: -[
        -  "signature"
        -]New value: +[]
    • Changedplace_orders_batch1 field changed
      • changedInput schema / properties / orders / description
        Previous value: -"Orders to submit (1–100). Each uses the place_order arg shape."New value: +"Orders to submit (1–100). Each uses the create_order arg shape."
    • Changedregister_agent3 fields changed
      • changedInput schema / properties / signature / description
        Previous value: -"EIP-712 signature over RegisterAgent{agent, expiresAt, nonce} from the wallet private key (0x-prefixed)."New value: +"EIP-712 signature over RegisterAgent{agent, expiresAt, nonce} from the wallet private key (0x-prefixed). Omit it to have this server sign with its own wallet."
      • changedInput schema / properties / wallet / description
        Previous value: -"Owner wallet address (0x-prefixed, 20 bytes)."New value: +"Owner wallet address (0x-prefixed, 20 bytes). Required with `signature`; defaults to this server's wallet without one."
      • changedInput schema / required
        Previous value: -[
        -  "wallet",
        -  "agent",
        -  "nonce",
        -  "signature"
        -]New value: +[
        +  "agent",
        +  "nonce"
        +]
    • Changedregister_bridge_wallet2 fields changed
      • changedInput schema / properties / signature / description
        Previous value: -"0x-prefixed 65-byte EIP-191 `personal_sign` signature over `message`, produced by the key for `address`."New value: +"0x-prefixed 65-byte EIP-191 `personal_sign` signature over `message`, produced by the key for `address`. Optional when this server holds the wallet for `address`: it signs instead."
      • changedInput schema / required
        Previous value: -[
        -  "address",
        -  "message",
        -  "signature"
        -]New value: +[
        +  "address",
        +  "message"
        +]
  2. 3 tool updatesv0.3.1
    • Addedcreate_bridge_wallet_challenge
    • Addedlist_bridge_wallets
    • Addedregister_bridge_wallet
  3. 23 tool updatesv0.2.0
    • Addedcreate_bridge_deposit_address
    • Addedget_account_fees
    • Addedget_account_state
    • Changedget_adl_history1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of records to return."New value: +"Maximum number of records to return (max 1000, default 100)."
    • Addedget_bridge_assets
    • Addedget_bridge_deposit
    • Addedget_cancel_on_disconnect
    • Changedget_closed_positions2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of records to return (max 200)."New value: +"Maximum number of records per page (max 200)."
    • Changedget_equity_history2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of points to return (max 720)."New value: +"Maximum number of points per page (max 720)."
    • Changedget_fills2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of fills to return."New value: +"Maximum number of fills per page (max 1000)."
    • Changedget_funding_history1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of funding records to return."New value: +"Maximum number of funding records to return (max 1000, default 300)."
    • Removedget_health
    • Changedget_order_history2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of records to return (max 500)."New value: +"Maximum number of records per page (max 500)."
    • Addedget_portfolio_history
    • Removedget_readiness
    • Changedget_trades2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque pagination cursor. Omit for the first page; to get the next page, pass back the `next_cursor` from the previous response verbatim. Stop when `next_cursor` is null — that means there are no more results. Never construct or edit a cursor: the format is not part of the contract.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of trades to return."New value: +"Maximum number of trades per page (max 1000)."
    • Changedget_withdrawals1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of records to return."New value: +"Maximum number of records to return (max 100)."
    • Addedlist_bridge_deposit_addresses
    • Addedlist_bridge_deposits
    • Changedplace_order6 fields changed
      • addedInput schema / properties / limit_offset_bps
        Added value: +{
        +  "description": "Fire-time limit-price offset in basis points (`trailing_limit` only; required together with `trailing_offset_bps`). The rested limit sits at fire_price * (1 + offset) for buys / * (1 - offset) for sells; 0 rests exactly at the fire price.",
        +  "maximum": 9999,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / price / description
        Previous value: -"Limit price as a positive decimal string (> 0). Required for limit orders, ignored for market."New value: +"Limit price as a positive decimal string (> 0). Required for limit-family orders (`limit`, `stop_limit`, `take_profit_limit`); must be omitted for market, stop_market, take_profit_market, and trailing orders (which are priced by the engine or computed at fire time)."
      • addedInput schema / properties / trailing_offset_bps
        Added value: +{
        +  "description": "Trailing trigger offset in basis points (1 bp = 0.01%). Required for trailing orders (`trailing_stop`, `trailing_limit`); must be omitted otherwise. Fires once the mark price retraces from its best-seen extreme by this many bps (0 fires at the first evaluation).",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / trigger_price
        Added value: +{
        +  "description": "Trigger threshold as a positive decimal string (> 0). Required for stop and take-profit orders (`stop_limit`, `stop_market`, `take_profit_limit`, `take_profit_market`): the order activates once the mark price crosses it — adversely for stops, favorably for take-profits. Must be omitted for other order types.",
        +  "type": "string"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Order type."New value: +"Order type. `limit` and `market` are unconditional. `stop_limit` / `stop_market` fire when the mark price crosses `trigger_price` in the adverse direction (stop-loss); `take_profit_limit` / `take_profit_market` fire on the favorable direction. `trailing_stop` fires a market order once the mark retraces from its best-seen extreme by `trailing_offset_bps`; `trailing_limit` fires the same way but rests a limit order priced off the fire price by `limit_offset_bps`. Field requirements: limit-family (`limit`, `stop_limit`, `take_profit_limit`) require `price`; stop / take-profit types require `trigger_price`; trailing types require `trailing_offset_bps`."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "limit",
        -  "market"
        -]New value: +[
        +  "limit",
        +  "market",
        +  "stop_limit",
        +  "stop_market",
        +  "take_profit_limit",
        +  "take_profit_market",
        +  "trailing_stop",
        +  "trailing_limit"
        +]
    • Changedplace_orders_batch6 fields changed
      • addedInput schema / properties / orders / items / properties / limit_offset_bps
        Added value: +{
        +  "description": "Fire-time limit-price offset in basis points (`trailing_limit` only; required together with `trailing_offset_bps`). The rested limit sits at fire_price * (1 + offset) for buys / * (1 - offset) for sells; 0 rests exactly at the fire price.",
        +  "maximum": 9999,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / orders / items / properties / price / description
        Previous value: -"Limit price as a positive decimal string (> 0). Required for limit orders, ignored for market."New value: +"Limit price as a positive decimal string (> 0). Required for limit-family orders (`limit`, `stop_limit`, `take_profit_limit`); must be omitted for market, stop_market, take_profit_market, and trailing orders (which are priced by the engine or computed at fire time)."
      • addedInput schema / properties / orders / items / properties / trailing_offset_bps
        Added value: +{
        +  "description": "Trailing trigger offset in basis points (1 bp = 0.01%). Required for trailing orders (`trailing_stop`, `trailing_limit`); must be omitted otherwise. Fires once the mark price retraces from its best-seen extreme by this many bps (0 fires at the first evaluation).",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / orders / items / properties / trigger_price
        Added value: +{
        +  "description": "Trigger threshold as a positive decimal string (> 0). Required for stop and take-profit orders (`stop_limit`, `stop_market`, `take_profit_limit`, `take_profit_market`): the order activates once the mark price crosses it — adversely for stops, favorably for take-profits. Must be omitted for other order types.",
        +  "type": "string"
        +}
      • changedInput schema / properties / orders / items / properties / type / description
        Previous value: -"Order type."New value: +"Order type. `limit` and `market` are unconditional. `stop_limit` / `stop_market` fire when the mark price crosses `trigger_price` in the adverse direction (stop-loss); `take_profit_limit` / `take_profit_market` fire on the favorable direction. `trailing_stop` fires a market order once the mark retraces from its best-seen extreme by `trailing_offset_bps`; `trailing_limit` fires the same way but rests a limit order priced off the fire price by `limit_offset_bps`. Field requirements: limit-family (`limit`, `stop_limit`, `take_profit_limit`) require `price`; stop / take-profit types require `trigger_price`; trailing types require `trailing_offset_bps`."
      • changedInput schema / properties / orders / items / properties / type / enum
        Previous value: -[
        -  "limit",
        -  "market"
        -]New value: +[
        +  "limit",
        +  "market",
        +  "stop_limit",
        +  "stop_market",
        +  "take_profit_limit",
        +  "take_profit_market",
        +  "trailing_stop",
        +  "trailing_limit"
        +]
    • Changedpreview_order6 fields changed
      • addedInput schema / properties / limit_offset_bps
        Added value: +{
        +  "description": "Fire-time limit-price offset in basis points (`trailing_limit` only; required together with `trailing_offset_bps`). The rested limit sits at fire_price * (1 + offset) for buys / * (1 - offset) for sells; 0 rests exactly at the fire price.",
        +  "maximum": 9999,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / price / description
        Previous value: -"Limit price as a positive decimal string (> 0). Required for limit orders, ignored for market."New value: +"Limit price as a positive decimal string (> 0). Required for limit-family orders (`limit`, `stop_limit`, `take_profit_limit`); must be omitted for market, stop_market, take_profit_market, and trailing orders (which are priced by the engine or computed at fire time)."
      • addedInput schema / properties / trailing_offset_bps
        Added value: +{
        +  "description": "Trailing trigger offset in basis points (1 bp = 0.01%). Required for trailing orders (`trailing_stop`, `trailing_limit`); must be omitted otherwise. Fires once the mark price retraces from its best-seen extreme by this many bps (0 fires at the first evaluation).",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / trigger_price
        Added value: +{
        +  "description": "Trigger threshold as a positive decimal string (> 0). Required for stop and take-profit orders (`stop_limit`, `stop_market`, `take_profit_limit`, `take_profit_market`): the order activates once the mark price crosses it — adversely for stops, favorably for take-profits. Must be omitted for other order types.",
        +  "type": "string"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"Order type."New value: +"Order type. `limit` and `market` are unconditional. `stop_limit` / `stop_market` fire when the mark price crosses `trigger_price` in the adverse direction (stop-loss); `take_profit_limit` / `take_profit_market` fire on the favorable direction. `trailing_stop` fires a market order once the mark retraces from its best-seen extreme by `trailing_offset_bps`; `trailing_limit` fires the same way but rests a limit order priced off the fire price by `limit_offset_bps`. Field requirements: limit-family (`limit`, `stop_limit`, `take_profit_limit`) require `price`; stop / take-profit types require `trigger_price`; trailing types require `trailing_offset_bps`."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "limit",
        -  "market"
        -]New value: +[
        +  "limit",
        +  "market",
        +  "stop_limit",
        +  "stop_market",
        +  "take_profit_limit",
        +  "take_profit_market",
        +  "trailing_stop",
        +  "trailing_limit"
        +]
    • Addedset_cancel_on_disconnect
  4. 45 tool updates
    • Addedadjust_isolated_margin
    • Addedamend_order
    • Changedcancel_order3 fields changed
      • addedInput schema / properties / cancel_all
        Added value: +{
        +  "description": "Set true to cancel ALL open orders. Required (and the only way) to trigger a mass-cancel; ignored when `order_id` is given.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / market_id / description
        Previous value: -"Market id (recommended when cancelling a single order)."New value: +"Market id. REQUIRED when cancelling a single order (`order_id`); optional with `cancel_all` to scope the mass-cancel to one market."
      • changedInput schema / properties / order_id / description
        Previous value: -"Order id to cancel. Omit to cancel ALL open orders."New value: +"Order id to cancel a single order."
    • Addedclaim_credit
    • Addedclaim_faucet
    • Addedcreate_api_key
    • Addeddelete_api_key
    • Addeddeposit_collateral
    • Addedget_account_summary
    • Addedget_adl_history
    • Addedget_candles
    • Addedget_closed_positions
    • Addedget_equity_history
    • Addedget_fills
    • Addedget_funding_history
    • Addedget_funding_payments
    • Addedget_funding_samples
    • Addedget_health
    • Addedget_mark_price
    • Addedget_market_adl_events
    • Addedget_market_risk_params
    • Addedget_market_status
    • Addedget_order
    • Addedget_order_history
    • Addedget_rate_limit_status
    • Addedget_readiness
    • Addedget_service_status
    • Addedget_stats
    • Addedget_stats_history
    • Addedget_tickers
    • Addedget_trades
    • Addedget_withdrawals
    • Addedget_ws_token
    • Addedget_ws_token_legacy
    • Addedlist_agents
    • Addedlist_api_keys
    • Addedlist_deposits
    • Addedlist_market_specs
    • Addedlogin
    • Changedplace_order4 fields changed
      • changedInput schema / properties / price / description
        Previous value: -"Limit price as a string. Required for limit orders, ignored for market."New value: +"Limit price as a positive decimal string (> 0). Required for limit orders, ignored for market."
      • changedInput schema / properties / size / description
        Previous value: -"Order quantity in base units, as a string."New value: +"Order quantity in base units, as a positive decimal string (> 0)."
      • changedInput schema / properties / time_in_force / description
        Previous value: -"Time in force. Defaults to GTC for limit, IOC for market."New value: +"Time in force. Defaults to GTC for limit, IOC for market. `PostOnly` rejects the order if it would take liquidity on entry, guaranteeing it rests as a maker."
      • changedInput schema / properties / time_in_force / enum
        Previous value: -[
        -  "GTC",
        -  "IOC",
        -  "FOK"
        -]New value: +[
        +  "GTC",
        +  "IOC",
        +  "FOK",
        +  "PostOnly"
        +]
    • Addedplace_orders_batch
    • Addedpreview_order
    • Changedregister_agent7 fields changed
      • changedInput schema / properties / agent / description
        Previous value: -"Agent public key/address to delegate to. Optional."New value: +"Agent Ethereum address (0x-prefixed, 20 bytes) to delegate to."
      • addedInput schema / properties / expires_at
        Added value: +{
        +  "description": "Expiry as Unix ms. Optional — defaults to now+30d. Must be in [now+1d, now+90d].",
        +  "type": "integer"
        +}
      • addedInput schema / properties / label
        Added value: +{
        +  "description": "Optional human-readable label for the agent.",
        +  "type": "string"
        +}
      • addedInput schema / properties / nonce
        Added value: +{
        +  "description": "Monotonic nonce. Use the current Unix time in ms as a safe start.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / signature
        Added value: +{
        +  "description": "EIP-712 signature over RegisterAgent{agent, expiresAt, nonce} from the wallet private key (0x-prefixed).",
        +  "type": "string"
        +}
      • changedInput schema / properties / wallet / description
        Previous value: -"Owner wallet address (0x...). Optional."New value: +"Owner wallet address (0x-prefixed, 20 bytes)."
      • changedInput schema / required
        Previous value: -[]New value: +[
        +  "wallet",
        +  "agent",
        +  "nonce",
        +  "signature"
        +]
    • Addedrevoke_agent
    • Addedsubmit_deposit
  5. 13 tool updatesv0.1.0
    • First observedcancel_order
    • First observedget_balance
    • First observedget_demo_account
    • First observedget_demo_orders
    • First observedget_demo_positions
    • First observedget_deposit_target
    • First observedget_open_orders
    • First observedget_orderbook
    • First observedget_positions
    • First observedget_ticker
    • First observedlist_markets
    • First observedplace_order
    • First observedregister_agent

TDQS

B3.2/5.0

Scored across 115 tools

Disambiguation1/5

Roughly half the surface consists of deprecated aliases that duplicate a live tool one-to-one (get_balance/fetch_balance, get_orderbook/fetch_order_book, place_order/create_order, amend_order/edit_order, list_deposits/fetch_deposits, etc.), so an agent must constantly resolve 'which of these two identical tools do I call?'. On top of that, several tools are admitted dead ends that always fail (create_bridge_deposit_address, list_bridge_deposit_addresses, get_deposit_target), and get_deposit vs create_deposit vs deposit_collateral add further near-miss overlap.

Naming Consistency2/5

Two competing conventions coexist: the modern set uses fetch_*/create_*/edit_*/cancel_*/register_* while the deprecated set uses get_*/list_*/place_*/amend_*/adjust_*. Within each family the verb_noun pattern is readable, but mixing get_/fetch_ and place_/create_ across the same resource is exactly the inconsistency the rubric penalizes.

Tool Count1/5

115 tools is an extreme mismatch for any single server. Even after removing the ~45 deprecated aliases, the live surface is 60+ tools, which far exceeds a well-scoped set and forces the agent to carry a large mental model of near-duplicates.

Completeness4/5

Domain coverage is actually broad and strong: markets/tickers/orderbook/OHLCV/funding, full order lifecycle (create, batch, preview, edit, cancel, cancel-all), account/positions/PnL/fees/history, deposits/withdrawals/bridge, API keys, agent keys, wallets, and WS tokens. The main gap is that a few advertised bridge/deposit-target tools have no working server implementation, leaving genuine dead ends.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives AI agents direct access to Polymarket Crypto prediction markets, enriched with live spot prices. Discover markets, analyze order books, paper trade strategies, track activity, and execute live trades — all through natural language.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables AI agents to scan the market, manage positions, and retrieve trading metrics for Bybit through natural language commands.
    1
    AGPL 3.0