nexus-exchange-mcp
OfficialThe Nexus Exchange MCP server enables AI agents to read real-time market data and manage trades on the Nexus Exchange using the Model Context Protocol.
Public Market Data (no credentials needed)
List all markets, get tickers, order books, mark prices, market status, recent trades, candlestick data, and funding history.
Demo Account (no credentials needed)
View a live demo account's balance, equity, open positions, and open orders.
Authenticated Account Management (requires API key)
Check real account balance, equity, open positions, open orders, order history, fills, withdrawals, ADL history, and rate limit status.
Deposit collateral and claim credit.
Trading Operations (requires API key)
Place limit or market orders (buy/sell), including reduce-only and time-in-force options.
Place batch orders or cancel orders by ID or cancel all open orders at once.
Agent & API Key Management
Log in using a wallet signature to obtain a session token.
Create, list, and delete API keys.
List and revoke delegated trading agents (registering agents requires an external EIP-712 signature).
WebSocket & Utility
Generate WebSocket authentication tokens for direct streaming connections.
Check server health status.
Admin Tools (opt-in, requires admin secret)
List, set, and delete account fee tiers.
Pending / Not Yet Available
get_deposit_target(on-chain deposit address) is pending server-side implementation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nexus-exchange-mcpWhat's the current BTC-USDX-PERP ticker on Nexus?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Nexus Exchange MCP Server
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
Most tools now target the direct-indexer /api/v1 surface, served under
the deployment's gateway path (ENG-4740 — the indexer serves its REST API
directly instead of via the gateway REST proxy — as corrected by ENG-6221:
…/api/exchange/api/v1/… on the public host, and at the origin on a bare
indexer such as local). The routes that have no /api/v1 equivalent stay on
the legacy /api/exchange gateway, which remains live dual-stack
(ENG-4751), so nothing breaks. See "Migration to /api/v1" below.
Tool | Status | Endpoint (surface) |
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (public) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (public) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + caller EIP-191 signature) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs caller EIP-712 signature) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs caller EIP-191 signature) |
|
| ✅ Live (needs session token) |
|
| ✅ Live (needs session token) |
|
| ✅ Live (needs session token) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (needs key + direct gateway) |
|
| ✅ Live (public) |
|
| 🔒 Admin (opt-in, see below) |
|
| 🔒 Admin (opt-in, see below) |
|
| 🔒 Admin (opt-in, see below) |
|
| 🚧 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. On the direct surface
it is superseded by the bridge deposit-address tools
(create_bridge_deposit_address / list_bridge_deposit_addresses), which
return real per-chain on-chain deposit addresses — prefer those; the legacy
single-target lookup is still unbuilt server-side.
Migration to /api/v1
Per ENG-4740 the gateway REST proxy is being eliminated: each backend
service exposes its own REST API and the indexer serves the exchange surface
directly under /api/v1. This server calls those routes for the v0.8.1
operations it exposes as tools (see
API-surface coverage below).
Both surfaces hang off the deployment base, which is the origin plus the network's gateway path —
https://exchange.nexus.xyz/api/exchangeon the public host, and the bare origin (http://localhost:9090) on an indexer that serves at its root, likelocal. So/api/v1/*resolves at…/api/exchange/api/v1/*on the public host and at the origin onlocal. ENG-6221 corrected this: the v1 base used to be composed at the bare host root, where the public site serves its marketing app, so every/api/v1tool answered 404 with a page of HTML. This deliberately diverges from the pinned spec, whose per-pathserversoverride still lists the bare root for/api/v1/*— measured, only the gateway path answers, so reality wins and the upstream fix belongs innexus-exchange-api. ANEXUS_EXCHANGE_API_URLthat still ends in/api/exchangeis 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 whenNEXUS_EXCHANGE_API_URLonly redirects the host, soNEXUS_EXCHANGE_NETWORK=localwith a URL still serves both surfaces at the origin.Two surfaces, one base — so "the base URL" differs per SDK by design. Both surfaces are derived from the same deployment base, and which one a request addresses is named by its path (
/api/v1/accountversus the bare/account) rather than by a different host. A sibling SDK whose single base URL reads…/api/v1and one whose reads…/api/exchangeare therefore not in conflict — they name different surfaces of the same deployment, and this server holds both at once. If you are comparing configs across the SDKs, compare the surface, not the string.HMAC signs the logical route — e.g.
/api/v1/ordersfor v1 routes, the bare route (/orders) for legacy ones. The gateway path is part of the base and is not signed over, so on a gatewayed deployment the signed path and the wire path differ; see Authentication.cancel_orderrequiresmarket_idwhen cancelling a single order (the v1 route marks it required);market_idis optional withcancel_allto scope a mass-cancel to one market.Stay on the legacy gateway (no
/api/v1route):list_market_specs,get_market_risk_params,get_order(v1 mounts only PATCH + DELETE on/orders/{id}),get_withdrawals,list_deposits,get_funding_payments,get_adl_history,get_market_adl_events,deposit_collateral,submit_deposit,claim_faucet,adjust_isolated_margin, the agent / api-key / admin-tier tools,get_ws_token*,get_service_status, and thedemo/*reads. (The cancel-on-disconnect and bridge tools are v1-native.)
API-surface coverage
69 registered tools covering 66 spec operations of Exchange API spec
v0.8.1. Those are two different numbers and neither substitutes for the
other: one tool can call several operations (cancel_order calls two) and one
calls 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) —
get_portfolio_history(GET /api/v1/account/portfolio-history: equity + PnL + volume series over aday/week/month/allwindow),get_account_state(GET /api/v1/account/state: summary + open positions from one coherent read), andget_account_fees(GET /api/v1/account/fees: effective maker/taker bps, tier, rolling 30d volume, discounts). The same release enriched thePositionschema —notional_value,margin_used,roe,max_leverage, andleverage, each nullable with a<field>_errorcompanion, plus the always-presentfunding_paid(no_errorcompanion: its"0"is a real zero, not unknown) — and addedwithdrawableto the portfolio summary; those are response-shape additions on already-mapped routes, so they change no route count — the tools that return them (get_balance,get_positions,get_account_state,get_account_summary) call them out in their descriptions instead.Account cancel-on-disconnect (v0.7.1) —
get_cancel_on_disconnect/set_cancel_on_disconnect(GET/PUT /api/v1/account/cancel-on-disconnect)./api/v1/bridgePhase A (v0.7.1) —get_bridge_assets(public catalog),create_bridge_deposit_address,list_bridge_deposit_addresses,list_bridge_deposits, andget_bridge_deposit(five operations).Registered withdrawal wallets (v0.7.3, ENG-8902) —
create_bridge_wallet_challenge,register_bridge_wallet, andlist_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, andregister_bridge_walletechoes 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 with409 wallet_already_registered— soregister_bridge_walletis funds-guarded and additionally requiresconfirm: true.Conditional order types (v0.7.0) —
place_order/place_orders_batch/preview_ordernow map all six conditionalorder_types in addition tolimit/market: stop-loss (stop_limit/stop_market), take-profit (take_profit_limit/take_profit_market), and trailing (trailing_stop/trailing_limit), via thetrigger_price,trailing_offset_bps, andlimit_offset_bpsfields. 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
(get_ws_token / get_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
place_order, place_orders_batch, 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. get_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
get_service_status (/status).
Pagination
Five list tools are cursor-paginated (spec v0.7.2, ENG-5506):
Tool | Endpoint |
|
|
| 1000 |
|
| 1000 |
|
| 500 |
|
| 200 |
|
| 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 get_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 + direct gateway) — account reads, trading, agent/funding actions. Uses
NEXUS_EXCHANGE_API_KEY/NEXUS_EXCHANGE_API_SECRET. See the "Authentication" note below about the public proxy.Caller signature —
login(EIP-191) andregister_agent(EIP-712) carry a wallet signature the caller produces externally; this server never holds a wallet key and cannot sign for you.Session token — the
*_api_keytools authenticate with a Bearer session token fromlogin, set asNEXUS_EXCHANGE_SESSION_TOKEN.Admin (opt-in) —
list_tiers/set_tier/delete_tieruse the operator admin secret and mutate other accounts' fee tiers. They are not registered unlessNEXUS_EXCHANGE_ENABLE_ADMIN_TOOLS=1is set (andNEXUS_EXCHANGE_ADMIN_SECRETprovided). Never enable these on an untrusted agent surface.
Destructive tools (revoke_agent, delete_api_key, delete_tier, and
cancel_order's mass-cancel) require an explicit confirm: true /
cancel_all: 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-mcpOr launch the stdio server directly (npx fetches the package on first run):
npx -y @nexus-xyz/exchange-mcpIt 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.
Environment variables
Copy .env.example and set as needed. Only trading/account tools need
credentials — never commit real secrets.
Variable | Required | Purpose |
| No | Network to target: |
| With | Explicit origin override — scheme + host, not a surface path; both surfaces hang off it plus the gateway path. Wins over |
| With | Name for a custom stage. Restricted to |
| With | Whose money is behind the URL: |
| No | Set to |
| No | Where a custom stage hangs off its host: |
| For account/trade tools | HMAC API key id ( |
| For account/trade tools | HMAC secret (hex). |
| For | Bearer session token from |
| For admin tools | Operator admin secret ( |
| No | Set to |
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 |
| Play (synthetic USDX) | Yes |
|
| Play (whatever you hold) | Yes |
|
| Real money | No | No reachable host yet — selecting it is an error |
| 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, notapi.mainnet.nexus.xyz— soapi.{network}.nexus.xyzwould 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.
localis 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/exchangeFour rules, and they are the same four in every Nexus client:
customcarries 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, orunknown. A staging deployment of mainnet is real-funds-shaped, so defaulting toplaywould make every guardrail lie in the direction that costs money, and defaulting torealwould 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; ENG-6221 moved the /api/v1 base 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 |
| funds declared |
| funds |
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 /api/v1
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 fundsThe 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
get_ws_token and get_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. The endpoints derive from the gateway base (/ws, /stream,
/ws/token, /ws-tokens carry no per-path servers override in the spec):
wss://exchange.nexus.xyz/api/exchange/ws # authenticated, connect with ?token=…
wss://exchange.nexus.xyz/api/exchange/stream # legacy public market dataOn local the gateway path is absent — ws://localhost:9090/ws — because the
indexer serves those routes at its root. That asymmetry is the spec's, not ours:
the root servers list carries /api/exchange on the public host and the bare
origin for local development, so the prefix is a per-network value
(gatewayPath in src/networks.ts), never appended unconditionally.
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 |
| Does the tool surface still match the spec it pins? |
|
| Is the pin behind the latest release? |
|
| A newer spec released — is the delta breaking? |
|
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:
every operation in
endpoints.txtexists in the pinned spec;endpoints.txtmatches the per-toolopsdeclarations byte-for-byte (it is a generated artifact, not a hand-maintained list);each tool's declared
opsmatch 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 defeatedAdding 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
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.
For /api/v1 routes the signed path includes the prefix (e.g. /api/v1/orders);
for legacy gateway routes it is the bare path (e.g. /orders). What is signed is
the logical route — the deployment's gateway path belongs to the base and is
not signed over. On a bare indexer (NEXUS_EXCHANGE_NETWORK=local) the two
coincide, so the client signs exactly what it sends. On a gatewayed
deployment they differ: the wire path is /api/exchange/api/v1/orders while the
signature covers /api/v1/orders, so verification rests on the gateway
stripping its own prefix before the indexer checks. That assumption is unverified
against real credentials (ENG-6221) — if signed calls 401 on a gatewayed host
and the same key works against a bare indexer, that stripping is the thing to
check.
Important: the public production host still fronts authenticated requests with a
proxy that signs with the site's own frontend key, so per-caller HMAC headers
are not honored there — authenticated tools resolve to the site account, not
yours. To trade as a specific account, target a direct indexer gateway that
verifies client HMAC — NEXUS_EXCHANGE_NETWORK=local for the
http://localhost:9090 from the exchange docker-compose, or a custom bundle
pointed at your own (declaring its funds unlocks the guarded tools; a bare
NEXUS_EXCHANGE_API_URL leaves them refused). Until then, use the public
get_demo_* tools to demo the account flow with no secrets.
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 and point it at a direct gateway (see
Authentication).
Demo script
Add the config above, restart Claude Desktop, and confirm
nexus-exchangeappears in the tools list.Ask: "Show me the BTC market on Nexus" — Claude calls
list_markets/get_tickerand reports the live BTC-USDX-PERP price.Ask: "What's in the demo account and its open positions?" — Claude calls
get_demo_accountandget_demo_positionsagainst 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 /healthzBehind 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/mcpIt 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>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 falls back to any server-env credentials. Open question for review: 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.
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 buildThen 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 smokeThe public host works as well, and needs no network named — the deprecated bare-URL form assumes the public-gateway shape, which is the right one there:
NEXUS_EXCHANGE_API_URL=https://exchange.nexus.xyz npm run smokeExpected output ends with list_markets OK -> N markets.
It requires an explicit NEXUS_EXCHANGE_API_URL and has no default
(ENG-8092) — list_markets is a read, and reads are never funds-guarded. The
URL names the host; the gateway path decides where /api/v1 lands under it
(ENG-6221), and that comes from the network. So NEXUS_EXCHANGE_API_URL alone
resolves …/api/exchange/api/v1/… and prints the bare-URL deprecation notice on
stderr before proceeding, while NEXUS_EXCHANGE_NETWORK=local alongside it
serves both surfaces 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
/api/v1/* 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
66 toolsadjust_isolated_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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | USDX amount to add or remove, as a positive decimal string (> 0). | |
| direction | Yes | Whether to add margin to or remove it from the position. | |
| market_id | Yes | Market of the open position, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses failure conditions (MarginModeNotIsolated, NoOpenPosition, margin floor), requires API credentials, and explicitly states 'moves REAL margin'. No annotations present, so description carries full burden and meets it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first covers purpose and failure conditions, second clarifies amount format and requirements. Efficient and front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, failure modes, parameter format, and real impact. No output schema, so return value is not addressed. For a 3-parameter tool with no annotations, provides sufficient completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds that 'amount' is a positive decimal string, which matches schema. No significant additional meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action (add/remove isolated margin), resource (margin on open position), and distinguishes from siblings like deposit_collateral. Includes failure conditions indicating scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides failure modes but does not explicitly state when to use this tool vs alternatives like deposit_collateral. Implies usage context but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amend_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.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | New order size in base units as a positive decimal string (> 0). Optional if `price` is given. | |
| price | No | New limit price as a positive decimal string (> 0). Optional if `size` is given. | |
| order_id | Yes | Id of the resting order to amend. | |
| market_id | Yes | Market the order rests on (required for routing). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses atomic cancel-replace, margin check, and that it modifies a real order. Since no annotations are provided, the description carries full burden and covers key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the main action, no unnecessary words. Efficiently communicates purpose and constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the operation, prerequisites, and constraints. It could mention that the response likely includes the amended order, but completeness is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds context about the margin check but does not significantly enhance understanding of individual parameters beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool amends a resting order's price and/or size in an atomic cancel-replace operation. It distinguishes itself from sibling tools like cancel_order and place_order by using specific verb+resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States that liquidation orders cannot be amended and requires API credentials, providing some usage context. However, it could more explicitly compare to cancel+place sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_orderA
Cancel a resting order. Pass order_id to cancel one order. To cancel ALL open orders you must explicitly pass cancel_all: true — an empty or argless call is rejected so a stray call can't mass-cancel by accident. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | No | Order id to cancel a single order. | |
| market_id | No | Market id. REQUIRED when cancelling a single order (`order_id`); optional with `cancel_all` to scope the mass-cancel to one market. | |
| cancel_all | No | Set true to cancel ALL open orders. Required (and the only way) to trigger a mass-cancel; ignored when `order_id` is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It reveals that the tool requires API credentials (authentication needs) and has a safety guard against accidental mass cancellation. This adds useful context beyond the schema, though it could mention side effects or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences) and front-loaded with the main action. Every sentence provides necessary information without redundancy. No fluff or extraneous details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description covers the core use cases, safety constraints, and authentication. It lacks details on return values or error handling, but for a cancellation tool, the provided information is fairly complete for an agent to understand correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter described in the input schema. The description adds value by explaining the interplay between parameters: 'order_id' vs 'cancel_all', and that 'market_id' is required for single order cancel but optional with 'cancel_all'. This clarifies conditional requirements beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cancels a resting order, and distinguishes between single-order and mass cancellation with specific parameter requirements. It uses precise verbs ('cancel') and identifies the resource ('resting order'), making its purpose unambiguous and distinct from siblings like 'amend_order' or 'place_order'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on when to use each mode: pass 'order_id' for single cancel, or 'cancel_all: true' for mass cancel. It warns that an empty call is rejected to prevent accidental mass cancellation. However, it does not explicitly state when not to use the tool (e.g., for modifying orders) or mention alternatives.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | USDX to credit, as a positive decimal string (> 0). Omit to claim the full remaining daily allowance. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 secret is returned ONCE and never shown again — store it immediately. Authenticates with a session token from login — set NEXUS_EXCHANGE_SESSION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden of behavioral disclosure. It critically warns that the secret is returned only once, which is a key behavioral trait. Adding details about key limits or replacement would strengthen it further, but current detail is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of three concise sentences, each serving a clear purpose: stating the action, highlighting a critical warning, and specifying authentication requirements. No unnecessary words or redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with zero parameters and no output schema, the description covers the essential aspects: purpose, critical behavior (secret shown once), and authentication requirement. It could mention the HMAC type more explicitly or describe the key's usage, but overall it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters and 100% coverage, so the baseline is 3. The description adds value by explaining the behavior and authentication context, which compensates for the lack of parameters and justifies a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new HMAC API key for the authenticated wallet', which is a specific verb and resource. It distinguishes itself from sibling tools like 'delete_api_key' and 'list_api_keys' by focusing solely on creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the prerequisite of a session token from 'login' but does not explicitly state when to use this tool versus alternatives like deleting or listing keys. However, the context of creation is clear, and siblings serve different purposes, providing implicit guidance.
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
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain to get-or-create a deposit address on, e.g. "ethereum". Use `get_bridge_assets` to discover supported chains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral details: idempotency (repeated calls return same address) and the effect of sending assets (credits the account). It also notes credential requirements. However, with no annotations, it doesn't disclose potential side effects like creation on first call or any rate limits, which would be useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loads the core purpose. Every sentence adds value - idempotency and credential requirements are relevant. It could be trimmed slightly, but it's well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description covers purpose, usage context, and idempotency. It lacks details about possible creation side effects or error conditions, but given simplicityholistically, it's adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the chain parameter. The description adds a hint to use get_bridge_assets for supported chains, which is helpful. But it doesn't add significant meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets or creates a cross-chain deposit address, specifying the resource (deposit address) and the verb (get-or-create), and distinguishes it from siblings like list_bridge_deposit_addresses and get_deposit_target by scoping to the authenticated account and a specific chain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on when to use (to obtain a deposit address for receiving assets) and explicitly mentions idempotency per (account, chain). However, it does not explicitly state when not to use it versus alternatives like get_deposit_target, leaving some ambiguity.
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. This server cannot sign for you — sign the message externally (in the wallet), then pass it and the signature to register_bridge_wallet. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | EVM address to register as the withdrawal wallet (0x-prefixed, 20 bytes). You must control its key — step 2 proves it. |
TDQS
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 so thoroughly: it discloses that the server cannot sign, the message must be signed externally, the message is opaque and must be echoed verbatim, the nonce is informational, the challenge is not single-use, and calling it changes no state. It also explains the 503 condition and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place—it covers purpose, signing method, opaque message handling, nonce clarification, single-use myth, safety, error handling, and auth. It front-loads the core purpose and flows logically without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully explains the return values (message, expires_at) and how to use them (sign externally, pass to register_bridge_wallet). It also covers error conditions and auth, making it complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the address parameter (100% coverage), setting a baseline of 3. The description adds value by explaining that you must control the key and that step 2 proves it, reinforcing the parameter's purpose beyond the schema's literal definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is Step 1 of registering a withdrawal wallet, returns the exact message to sign and its expiry, and differentiates itself from the sibling register_bridge_wallet by naming it as the next step. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage guidance: call this before deciding to register (safe due to no state change), then pass the result to register_bridge_wallet. It also explains the 503 error means registration is off and retrying won't help, effectively telling when NOT to use it.
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 a session token from login — set NEXUS_EXCHANGE_SESSION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | API key id to delete, e.g. "nx_a1b2c3d4e5f67890". | |
| confirm | No | Must be true to actually delete (guards against typos). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the destructive nature: 'any caller using that key stops working'. It also mentions the authentication requirement via session token. With no annotations provided, the description adequately conveys the key behavioral traits, though it could mention permission requirements or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences. The first sentence states the purpose, the second emphasizes destructiveness, and the third covers the required parameter and authentication. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema, no annotations), the description covers purpose, destructive impact, required parameter, and authentication. It could mention potential errors or the response, but it is largely complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and schema descriptions for both parameters (key_id and confirm) are already detailed. The tool description repeats the requirement to pass confirm: true but adds no new semantic information beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete (revoke)' and the resource 'HMAC API key by its key id'. It distinguishes this tool from sibling tools like create_api_key and list_api_keys by specifying the action and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 the tool (to revoke an API key) and includes a necessary requirement to pass confirm: true. It also mentions authentication via session token, which is essential for using the tool. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deposit_collateralB
Deposit USDX collateral into the authenticated account. amount is a positive decimal string. Requires API credentials. This moves REAL collateral on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | USDX amount to deposit, as a positive decimal string (> 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The phrase 'This moves REAL collateral on the account' discloses a critical behavioral trait (irreversible action). However, with no annotations provided, the description could further clarify side effects, error conditions, or confirmation steps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the action and followed by essential parameter guidance and a behavioral note. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the basic purpose and a key behavioral trait. However, it lacks information about return values, error handling, or post-action state, leaving the agent with incomplete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter, and the description merely restates what the schema already says (amount is a positive decimal string). No additional semantic context is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('deposit USDX collateral') and the target ('authenticated account'). However, it does not distinguish from the sibling tool 'submit_deposit', which may cause confusion about the specific step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'requires API credentials' but does not provide guidance on when to use this tool versus alternatives like 'submit_deposit' or 'claim_faucet'. No when-not-to-use or prerequisites are specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 explains the negative maker rate rebate semantics, the meaning of `volume_30d_estimated: true`, the forward-looking vs realized distinction, and the credential requirement. This is notable behavioral detail beyond the bare function name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, and every clause adds distinct value: content, rebate explanation, scope caveat, estimation caveat, and credential requirement. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, no-annotation read tool, the description fully covers what the tool returns, important interpretation caveats, and prerequisites. It gives the agent enough to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so the baseline is 4. The description adds meaningful context about what the returned fee schedule represents, even though there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Get the authenticated account's effective fee schedule.' It enumerates the exact contents (maker/taker rate, fee tier, rolling volume, discounts) and clarifies the forward-looking scope, distinguishing it from realized per-fill averages and per-market rates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when this tool is appropriate: it returns the effective, forward-looking schedule rate, not realized per-fill averages, and notes that per-market rates differ. It also states that API credentials are required. However, it does not explicitly name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 get_account_summary with get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 fail-closed behavior (502 authoritative_margin_unavailable), null semantics with companion error fields, the always-null leverage field, and the special case of funding_paid. This is rich behavioral detail beyond what annotations might provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds value. The primary purpose is front-loaded, and edge cases are explained without redundancy. It is long but justified given the complexity of the return state and potential null fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the return shape ({ summary, positions }), per-position risk details, null/value semantics for derived fields, funding_paid behavior, and error conditions. Since there is no output schema, the description covers all necessary context for an agent to understand what the tool returns and how to interpret edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is empty, so there are no parameter semantics to explain. The baseline for 0 params is 4; the description adds no param info but doesn't need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns the account's full state (summary + positions) in one call. The verb 'Get' plus the resource 'authenticated account's full state' is specific and distinguishes it from sibling tools like get_account_summary and get_positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends this tool over pairing get_account_summary with get_positions, noting the coherent read ensures summary.open_positions_count matches positions length. It also advises retry behavior on 502, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_summaryA
Get the authenticated account's portfolio summary (equity, margin usage, PnL rollup) — a richer view than get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 an excellent job. It discloses the fail-closed behavior with the specific 502 error code, exactly what withdrawable means, that it never goes negative, and importantly instructs not to misinterpret the error as an empty account—rich and specific behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries unique information: what the tool returns, how it differs from get_balance, the withdrawable definition, error semantics, retry behavior, and the credential requirement. It is dense but not redundant; the length is justified by the behavioral richness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 description is complete. It covers the purpose, return semantics, error conditions, proper handling, and authentication requirements. There are no undocumented input fields to worry about and the sibling context clarifies its niche relative to get_balance and other account tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so the baseline is 4 per the rubric. The description adds meaning by explaining the output fields (equity, margin usage, PnL rollup, withdrawable), which helps beyond schema since no parameter details are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: "Get the authenticated account's portfolio summary (equity, margin usage, PnL rollup)" — this clearly states what the tool does. It also explicitly distinguishes itself from the sibling get_balance by calling itself "a richer view", making it easy to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names get_balance as an alternative and positions this tool as the richer option, giving clear context for when to choose it. It also includes actionable guidance such as requiring API credentials and advising a retry after a delay on 502, though it stops short of a fully explicit when-not-to-use list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_adl_historyA
Get the auto-deleveraging (ADL) events that touched a given account. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (max 1000, default 100). | |
| address | Yes | Account address (0x-prefixed hex). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the behavioral disclosure burden. It communicates that credentials are required and the operation is a read ('Get'), but it does not mention ordering, pagination behavior beyond the schema, or what events exactly appear. It 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the purpose and the critical auth requirement. There is no redundant detail or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool with fully documented schema and no output schema, the description provides enough context: it names the resource, scope, and credential requirement. It could mention return format or ordering, but the phrase 'ADL events' makes the expected output reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to explain parameter formats. It adds minimal context by clarifying that the address refers to the account whose ADL events are fetched, but this is largely inferable from the tool name and purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource 'auto-deleveraging (ADL) events', scoped to 'a given account'. This distinguishes it from the sibling tool get_market_adl_events, which is market-level ADL data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies clear context: this is for account-level ADL history and requires API credentials. It does not explicitly name alternatives or exclusions, but the account-level scope implies when it should be used versus the market-level sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the minimal: it explains nullable fields and companion error fields, cautions that leverage is currently always null, and clarifies that funding_paid is a real zero rather than unknown. With no annotations provided, the description carries the full behavioral disclosure burden and handles it exceptionally well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is detailed, every sentence serves a purpose: scope, null semantics, format-specific caveats, and authentication. It is front-loaded with the core purpose and then elaborates only where ambiguity would otherwise cause incorrect agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description is remarkably complete. It covers the tool's inputs, output areas, edge-case semantics, authentication requirement, and even how to interpret signs on funding_paid. A no-parameter tool like this is fully usable based on the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter ambiguity. The description adds useful meaning about response-level field semantics, which exceeds the baseline for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an authenticated account snapshot including collateral balance, equity, and positions, which is specific and unambiguous. The exact scope also differentiates this from sibling tools like get_positions or get_account_summary, even without naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly communicates that this requires API credentials and is appropriate for getting a broad account snapshot rather than a focused detail like only positions. It does not explicitly mention when to prefer sibling tools, but its stated context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It adds valuable context beyond the empty schema by stating it's a 'Public catalog — no credentials needed,' and enumerates the output fields. It could mention read-only semantics explicitly, but 'List' and catalog nature imply a safe read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, followed by justification and usage. Every word earns its place—no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully covers what the tool returns (chains, assets, decimals, minimums, confirmations, fees) and notes public access without credentials. It's complete for a catalog-like endpoint with no input parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no information. The description adds no parameter semantics (unnecessary) but establishes the purpose of discovering chain values, which is parameter-adjacent. Per rubric, 0 params earns a baseline of 4, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists bridgeable chains and per-chain asset details (depositable/withdrawable, decimals, min amounts, confirmations, fees). It uses a specific verb+resource and distinguishes itself by noting it's a public catalog and a discovery mechanism for chain values used by other bridge tools, setting it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to 'Use it to discover valid `chain` values for the other bridge tools,' providing a clear when-to-use directive. While it doesn't enumerate alternatives, the reference to 'other bridge tools' implies its consultative role, which is sufficient for a discovery tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bridge_depositA
Fetch a single cross-chain (bridge) deposit by id. Only deposits owned by the authenticated account are returned. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It adds useful context beyond the schema: only deposits owned by the authenticated account are returned, and API credentials are required. However, it doesn't disclose behaviors like error handling, not-found responses, or the response format. This is a moderate level of disclosure, hence a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential information without any fluff. Every clause adds value: the action, the resource, the ownership constraint, and the credential requirement. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch-by-id tool with one parameter and no output schema, the description adequately states the operation and the ownership scoping. It could have explicitly mentioned the return type, but 'Fetch' implies the deposit object. It lacks details on error cases but is otherwise complete for the simplicity of the tool, hence a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'id' is already fully described in the schema as 'Deposit identifier.' The description adds no further semantic detail beyond reiterating that the tool fetches by id. With 100% schema coverage, the baseline is 3, and no additional information is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Fetch'), the resource ('a single cross-chain (bridge) deposit'), and the method ('by id'). It also distinguishes from sibling tools like list_bridge_deposits by emphasizing 'single' and adding an ownership constraint, making the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear when to use the tool—when you have a specific deposit id and need that deposit's details. It does not explicitly mention alternatives or when not to use it, but the scoping to 'single' and 'by id' provides a clear usage context. No exclusions are stated, so it earns a 4 rather than a 3.
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
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully discloses behavior: explains the dead man's switch, return fields, and the REST-only exclusion. Also notes credential requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact, well-structured description that packs detailed semantics without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a zero-parameter getter with no output schema; describes return fields, edge case, and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; baseline 4 applies, and description adds no parameter info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves the account's COD status, explains what COD is, and the verb 'Get' differentiates from 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context and a when-not caveat for REST-only clients, but does not explicitly reference the alternative setter tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_candlesB
Get OHLCV candles for one market. Public — no credentials needed. Timeframe is one of 1s, 1m, 5m, 1h (default 1m).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of candles to return (max 1000). | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". | |
| timeframe | No | Candle interval. Defaults to 1m. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It mentions public access and timeframe options, but lacks details on rate limits, data range, pagination, or caching. This is insufficient for a tool with no annotation safety net.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The first sentence states the core purpose, and the second adds critical context (public access, timeframe details). Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 simple parameters and no output schema. The description explains the core function and key parameter options, but omits response structure (e.g., array of candles) and ordering. Adequate for simplicity but missing some context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 context for the 'timeframe' parameter (e.g., default value of 1m), but adds nothing beyond schema for 'market_id' or 'limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get OHLCV candles for one market,' specifying the verb and resource. It also clarifies it's public and lists timeframe options, making the purpose distinct from sibling tools like get_ticker or get_orderbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating 'Public — no credentials needed,' but provides no explicit when-to-use or alternatives. It doesn't differentiate from similar data tools such as get_stats_history or get_ticker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_closed_positionsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records per page (max 200). | |
| cursor | No | 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. |
TDQS
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 pagination behavior, the opaque nature of the cursor, and the requirement for API credentials. It does not explicitly state whether this is a safe read operation, but the verb 'get' implies read-only. The description adds value beyond the schema by explaining the pagination loop and the meaning of 'next_cursor'. Missing explicit mention of rate limits or potential errors, but acceptable given the simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, clear, and well-structured. It starts with the purpose, then explains the output format and pagination flow. Every sentence provides necessary information without redundancy. The structure is logical: what it returns, how to paginate, and a note on credentials. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (pagination) and the absence of output schema, the description is complete. It explains the return format ('items' and 'next_cursor'), the pagination algorithm, and the semantics of each parameter. It even warns about not modifying cursors. The description covers all necessary aspects for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description adds extra semantics: 'limit' sets the size of ONE page, not a total, and 'cursor' should be passed verbatim, never constructed. This goes beyond the schema's basic description, providing operational context that helps correct usage. The clear explanation of cursor usage is particularly valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get the authenticated account's closed positions') and specifies the content ('realized PnL per position'). It distinguishes itself from sibling tools like get_positions (likely open positions) by explicitly including 'closed'. The pagination details further clarify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance on pagination: how to use the cursor, when to stop, and the meaning of 'limit' as per-page not total. It does not explicitly mention when to prefer this over alternatives, but the context ('closed positions') makes the use case clear. Slight deduction for not contrasting with other history-oriented tools like get_fills or get_order_history.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_targetA
Get the on-chain deposit target (address/memo) to fund the account. Superseded on the direct surface by the bridge deposit-address tools (create_bridge_deposit_address / list_bridge_deposit_addresses), which return per-chain on-chain deposit addresses — prefer those. This legacy single-target lookup remains unbuilt server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Asset to deposit, e.g. "USDX". Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral transparency. It discloses that the tool is superseded, legacy, and unbuilt server-side, which is critical. However, it does not describe what happens when the tool is called (e.g., likely error), nor any other behavioral details such as response format or potential 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the primary purpose, and includes a clear directive to use alternatives. Every sentence adds value, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is fairly complete for guiding selection, but it falls short in explaining the consequences of invoking an unbuilt tool. It would be more complete if it stated expected behavior (e.g., 'calling this returns an error') or explicitly recommended against use, given it's unbuilt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single optional parameter 'asset' with a clear description and example, so the description adds little beyond noting the purpose. Since schema coverage is 100%, a baseline of 3 is appropriate, and the description does not need to elaborate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the on-chain deposit target (address/memo) to fund the account, with a specific verb ('get') and resource ('deposit target'). It distinguishes itself from the sibling bridge deposit-address tools by explicitly noting they are preferred and that this is a legacy single-target lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs users to prefer the bridge deposit-address tools (`create_bridge_deposit_address` / `list_bridge_deposit_addresses`) over this tool, and clarifies this is a legacy tool. It does not, however, mention when this tool should still be used, if at all, since it remains unbuilt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of points per page (max 720). | |
| cursor | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses key behaviors: cadence, window, ordering (oldest first), return shape, opaque cursor semantics, per-page limit meaning, and credential requirement. This goes well beyond typical descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences with each sentence serving a distinct purpose: purpose, alternative, return shape, pagination, and limit clarification. It is slightly verbose but well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and only two optional parameters, the description covers purpose, alternatives, return format, pagination mechanics, limit semantics, and auth requirements. This is complete for a paginated read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with detailed descriptions (100% coverage), but the description adds operational nuance: limit is per page, not total, and cursor must be passed back verbatim with clear stopping condition. This complements the schema effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the authenticated account's equity time-series with specific cadence (5s) and window (~1h). It distinguishes itself from get_portfolio_history by explicitly naming the alternative for longer windows or additional series, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: use this for short-window equity data, and use get_portfolio_history for longer windows or PnL/volume. The pagination instructions (keep calling with cursor until next_cursor is null) give a concrete usage pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fillsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of fills per page (max 1000). | |
| cursor | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Notes that API credentials are required and explains the cursor-based pagination mechanism, adding behavioral detail beyond the basic read-only nature. No annotations were provided, so the description carries this burden effectively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured, with no redundant wording. Each sentence serves a purpose, covering purpose, pagination, and parameter semantics efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description explains the return shape ({ items, next_cursor }) and the meaning of each field, making the tool's behavior fully understood.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to both parameters: clarifies limit is per-page (not total) and explains cursor usage (opaque token, pass back verbatim). This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists the authenticated account's fills (executed trades) in newest-first order, distinguishing it from related tools like get_trades or get_order_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit pagination instructions (continue with cursor until null) and clarifies the per-page limit behavior, though it does not explicitly contrast when to use this over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funding_historyA
Get the funding-rate history for one perpetual market. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of funding records to return (max 1000, default 300). | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It adds useful context ('Public — no credentials needed') and scope, but does not describe the returned record structure, ordering, pagination, or any rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core action, and contains no filler. The public-access note is relevant and compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple public read endpoint with two well-documented parameters, the description is largely sufficient for selection and invocation. The lack of an output schema means a bit more detail about the returned history would improve completeness, but this is not a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters, including the market_id example and limit's max/default. The description adds no additional parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), identifies the resource ('funding-rate history'), and scopes it to 'one perpetual market', making the tool's purpose clear. This also distinguishes it from sibling tools like get_funding_payments and get_funding_samples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when you need funding-rate history for a single market—and notes that it is public. However, it does not explicitly state when to prefer this over related tools such as get_funding_samples or get_funding_payments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funding_paymentsA
Get the authenticated account's funding-payment history, newest first, optionally filtered to a single market. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (max 1000). | |
| market_id | No | Market id to filter to, e.g. "BTC-USDX-PERP". Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses ordering (newest first), optional filtering, and authentication requirement. However, it does not mention rate limits, default behavior, or error states. The transparency is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and result. Every word adds value: 'newest first' and 'optionally filtered' are essential. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description covers the key aspects: what it returns, ordering, filter option, and auth. Missing details like default limit or pagination are minor given the schema already specifies the limit parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the critical ordering context ('newest first') not present in the schema, which helps the agent understand the result format. It also confirms optional filtering, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the authenticated account's funding-payment history with newest-first ordering and optional market filtering. While it is specific to funding payments, it does not explicitly differentiate from siblings like get_funding_history or get_funding_samples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the requirement for API credentials, but provides no guidance on when to use this tool versus related tools (e.g., get_funding_history, get_funding_samples) or when not to use it. No alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 get_funding_history, which returns the settled hourly rates. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of samples to return (max 480). | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description correctly notes the tool is public (safe read) and specifies cadence and limit. However, it does not disclose error handling, side effects, or other behavioral details, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loading key information. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description is clear and includes sibling comparison, it omits the return value structure or formatting. For a data retrieval tool with no output schema, this gap reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add new meaning to the parameters beyond what the schema provides. Baseline score of 3 is appropriate as the schema already handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves dense per-tick funding samples for one perpetual market, with cadence and point limit specified. It explicitly distinguishes from sibling `get_funding_history`, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a specific alternative (`get_funding_history`) and notes the tool is public with no credentials needed. This gives clear context for when to use it versus the sibling, though it does not cover all exclusions.
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
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return (max 1000). | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It explains that ADL events involve force-closing positions to cover shortfalls, giving some behavioral context. However, it does not disclose read-only nature, rate limits, pagination behavior, or data freshness, leaving important behavioral traits unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence is front-loaded with the core purpose and an explanatory clause, and the second adds a necessary prerequisite. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description covers the basic functionality and prerequisite. However, it lacks details about the return format or structure of the events, which would help an agent understand the output. Without an output schema, the description should compensate more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds value by explaining the domain context (ADL settlement history) but does not add specific parameter details beyond what the schema already provides for 'market_id' and 'limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'auto-deleveraging (ADL) settlement history for one market', with an explanatory clause about what ADL events are. However, it does not differentiate from the sibling tool 'get_adl_history', which may have a different scope, leaving some ambiguity about when to choose this specific tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite ('Requires API credentials') and explains the tool's purpose, but it provides no guidance on when to use this tool versus alternatives, nor does it specify any exclusions or best practices. The usage context is implied by the resource description.
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
Get one market's risk parameters: margin requirements and maximum leverage, from the engine's market registry. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It discloses it's public and reads from engine's market registry. Beyond that, no details on rate limits, caching, or error behavior, which is acceptable for a simple query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose and immediate authentication context. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given single parameter, no output schema, and no annotations, description adequately explains purpose and public nature. Could briefly mention error handling for invalid market_id, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers market_id with example format. Description adds no extra meaning beyond the schema. Since schema coverage is high (100%), baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'get', resource 'one market's risk parameters', and specifies contents (margin requirements, maximum leverage). It distinguishes from sibling get tools by focusing on risk parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the tool is public and requires no credentials, but does not explicitly specify when to use vs alternatives or when not to use it. Implicitly clear due to specificity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_statusA
Get a market's trading status and halt info (whether trading is open, halted, or in auction). Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states the tool is public and requires no credentials, which is key behavioral info. It does not disclose potential errors or rate limits, but for a simple read operation, these may not be critical. The description adds transparency beyond what annotations would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the action and resource, no redundant words, and every part is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-checking tool with one parameter and no output schema, the description covers purpose and authentication. It lacks detail on return format or errors, but completeness is acceptable given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the only parameter market_id has a description with an example). The description text does not add additional meaning beyond the schema, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'market's trading status and halt info', and elaborates on what that includes (open, halted, auction). It distinguishes itself from siblings like get_ticker or get_mark_price by focusing on trading status and halt info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Public — no credentials needed', which implies usage without authentication. However, it does not explicitly state when to use this tool over siblings or provide any exclusions or alternatives. The guidance is implicit but not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mark_priceA
Get the current mark price for one market. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. It mentions the tool is public and requires no credentials, which is useful. However, it does not disclose other traits like idempotency or rate limits, which for a simple read are acceptable. Score 3 as it adds some value but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately conveys the action and scope. No extraneous words. Perfectly front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description is fully adequate. It specifies the operation, scope, and authentication requirement, leaving no ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter described. The description adds an example value 'BTC-USDX-PERP', which provides concrete context beyond the schema's generic description. This aids the agent in understanding the expected format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'current mark price', and the scope 'for one market'. It is specific and distinguishes from siblings like get_ticker by explicitly mentioning 'mark price'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that it is public and requires no credentials, but provides no guidance on when to use this tool versus alternatives such as get_ticker or get_orderbook. No when-not-to-use or explicit alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_ordersA
Get the authenticated account's resting (open) orders. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions authentication but not return format, pagination, or limits. Minimal but adequate for a read-only tool with no parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no redundancy, every word adds value. Efficient and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description covers purpose and precondition. Could specify that it returns a list of orders, but adequate for a simple fieldless tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters to describe, schema coverage is 100%. The description adds value by mentioning the authentication requirement, which is not a parameter but a precondition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool retrieves resting (open) orders for the authenticated account, with a specific verb and resource. It is distinct from sibling tools like cancel_order or get_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies the authentication requirement, which is key context. No explicit when-to-use guidance, but the straightforward purpose makes it clear this is for viewing open orders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order id to look up. | |
| market_id | No | Market the order rests on (used for routing). Optional but recommended. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist; description discloses required API credentials, return fields, and that market_id is optional despite the spec. This is sufficient transparency for a read-only lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences cover purpose, parameter nuance, and authentication requirement with no wasted words. Critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description includes return fields, parameter behavior nuance, and authentication requirement, making it fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already documents both parameters with 100% coverage. The description adds nuance about market_id's routing purpose and current gateway behavior, providing context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a single order'), specifies what fields are returned (status, fills, remaining size), and distinguishes from sibling tools like get_open_orders and get_order_history which handle multiple orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to include market_id and notes the gateway behavior. Does not explicitly list alternative tools for different contexts, but the sibling tool list itself helps agents select appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderbookA
Get the current order book (bids/asks with price + size) for one market. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
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 tool is public and requires no credentials, which is valuable. However, it does not explain behavior on invalid market_id, rate limits, or data freshness guarantees. The description is sufficient but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence plus a short clarification. It is front-loaded with the core purpose (getting the order book) and immediately adds the public context. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one simple parameter and no output schema. The description explains what the tool returns (bids/asks with price and size) and that it operates on a single market. This is sufficient for a straightforward read-only tool with no complex side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameters (only market_id) and provides a description and example. The description does not add extra semantic detail beyond the schema. With high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current order book (bids/asks with price + size) for one market.' The verb 'get' specifies the action, and the resource and scope are explicitly defined. It distinguishes itself from siblings like get_ticker (which provides different market data) and get_open_orders (which returns user-specific orders). The public nature is also highlighted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Public — no credentials needed,' implying it can be called without authentication, but it does not provide explicit guidance on when to use this tool versus alternatives like get_ticker or list_markets. No exclusions or prerequisites are stated, making it adequate but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_historyA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records per page (max 500). | |
| cursor | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: return shape ({ items, next_cursor }), pagination semantics (opaque token, null terminal, verbatim pass-back), limit semantics (per-page not total), auth requirement ('Requires API credentials'), and ordering. This is rich behavioral disclosure well beyond what structured fields provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, front-loaded with the core purpose, then efficiently covering return format, pagination, limit semantics, and auth. Every sentence earns its place with no fluff or verbatim schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list tool with no output schema and no annotations, the description is fully complete: it covers purpose, status filter, ordering, return shape, pagination loop, limit semantics, and credentials requirement. An agent has everything needed to invoke and iterate correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by tying both parameters into a coherent pagination loop and emphasizing the common misunderstanding that 'limit sets the size of ONE page, not a total.' The cursor mechanics are largely redundant with the schema, but the workflow integration and limit clarification justify a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource pair ('Get the authenticated account's terminal-status order history') and enumerates the exact statuses included (filled/cancelled/rejected/expired) plus ordering (newest first). The 'terminal-status' qualifier clearly distinguishes this from siblings like get_open_orders and get_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool — for terminal-status orders of the authenticated account — which implicitly separates it from get_open_orders (non-terminal) and get_demo_orders (demo account). It also explains the pagination workflow ('keep calling with cursor until next_cursor is null'). However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 get_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 get_rate_limit_status (counted in ordinary requests) drops by ~5. Poll it sparingly. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of points to return (1–366). Clamped server-side to the selected window's capacity. Omit for the full window. | |
| window | No | Time window to return, which also selects the cadence and point capacity. Defaults to `day` server-side when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses behavior: heavy read costing 5x budget, effect on `remaining` in rate-limit status, auth requirement, deposit-neutral PnL, monotonic volume, and per-window cadence/capacity. No contradictions with annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but efficient; front-loads purpose, then precise details without fluff. Every sentence contributes essential info such as capacities, comparisons, and cost implications.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description sufficiently describes return content, ordering, and key properties. Covers authentication, rate-limit impact, and window-specific constraints, making it complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters but description adds deep meaning: explains how `window` selects cadence and capacity, how `limit` clamps to capacity, and default behavior. This exceeds schema basics and clarifies interplay.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Get' with specific resource 'portfolio time-series' and enumerates content (equity, PnL, volume) and window behavior. Explicitly differentiates from sibling `get_equity_history`, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance by contrasting with `get_equity_history` and noting both derive from same source. Also warns about heavy rate-limit cost and advises polling sparingly, giving clear operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so excellently. It explains null semantics for mirrored fields, companion `_error` fields, the always-null `leverage`, and the funding_paid sign convention, which are all critical non-obvious behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: it front-loads the purpose, then systematically explains potentially confusing return-field semantics, and finishes with the auth requirement. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description is remarkably complete for a tool of this complexity. It preemptively answers likely questions about nulls, unknown values, mirroring failures, and funding sign, making the tool safe to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so there is no parameter documentation burden. The description still adds useful context by mentioning that API credentials are required, which is appropriate for the 0-parameter baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get the authenticated account's open positions.' The word 'open' distinguishes it from related tools like get_closed_positions and get_demo_positions, and it clearly scopes the operation to the authenticated account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when to use it: for the authenticated account's open positions, and it notes the API credential requirement. It does not explicitly name alternatives or exclusions such as demo or closed positions, but the context is clear enough.
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
Get the authenticated account's current rate-limit status (remaining request budget). Useful for an agent to pace itself. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes that API credentials are required, disclosing an important behavioral requirement. It also hints at the return value ('remaining request budget') despite the lack of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences and 17 words, containing only essential information without any waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 output schema, and a simple purpose, the description fully covers what the tool does, why to use it, and what is required (authentication).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no parameters and 100% schema coverage, the description cannot add parameter-level detail beyond what the schema already conveys. The description does not introduce any parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('rate-limit status'), clearly identifying the tool's function. It distinguishes itself from sibling tools, none of which provide rate-limit status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the tool is useful for pacing an agent, providing clear usage context. While it doesn't mention when not to use it or alternatives, the simplicity of the tool makes exclusions unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_statusA
Aggregate service health of the exchange stack (indexer / engine / oracle / bots), as used by status pages. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral trait: no credentials needed (public). Without annotations, the description carries the burden; it adds value by specifying the aggregate nature components, though lacks details on response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, front-loaded with purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, description covers scope, components, use case, and auth. Lacks response structure but sufficient for a simple health check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds no param info, but baseline 4 applies per rules for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it provides 'aggregate service health' of specific components (indexer/engine/oracle/bots), distinguishing it from sibling tools like get_health that may focus on individual systems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions it's 'as used by status pages' and 'Public — no credentials needed', implying a public health check. Does not explicitly contrast with siblings or provide 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.
get_statsA
Get aggregate venue statistics (volume, trades, throughput) plus rolling unique-trader counts. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description declares it's public and no credentials needed, which are key behavioral traits. The read-only nature is implicit from 'Get'. Adds value beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no waste. Front-loads the main action and then adds the public access trait.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fully explains what data is returned (volume, trades, throughput, rolling unique-trader counts) and access requirements. Complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline 4 applies. Description does not need to add param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get aggregate venue statistics' and lists specific fields (volume, trades, throughput) plus rolling unique-trader counts. Differentiates from siblings like get_stats_history and get_ticker by focus on current aggregate stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Public — no credentials needed', indicating no authentication required. Though it doesn't list when-not or alternatives, the context is clear for a simple read operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_historyA
Get the venue's per-second throughput history (ring buffer, up to 3600 points). Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the ring buffer nature (implying limited history) and the maximum number of points (3600). It also clarifies that no credentials are needed. Given no annotations, this is good transparency, though it could mention data freshness 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the main purpose and follows with key details. Every word adds value, making it highly concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description explains the ring buffer and point limit, it does not describe the output format (e.g., timestamps and throughput values). Given no output schema, this omission leaves the agent without full understanding of the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%. The description correctly indicates that no credentials are needed, which is the only relevant contextual info. Baseline score of 4 applies per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the venue's per-second throughput history, specifies it's a ring buffer with up to 3600 points, and notes it is public. This effectively distinguishes it from sibling tools like get_stats or get_service_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is public and requires no credentials, which provides some usage context. However, it does not explicitly state when to use this tool versus alternatives (e.g., get_stats), nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickerA
Get the ticker (last price, bid/ask, 24h stats) for one market, e.g. "BTC-USDX-PERP". Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
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 tool is public and returns specific data fields, but lacks details on rate limits, data freshness, or any side effects. Basic transparency is present but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the tool's purpose, the second adds public nature and an example. Every sentence provides essential information with no redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description covers the main aspects: purpose, public access, and example. It lacks explicit details about return format or data freshness, but the mention of 'last price, bid/ask, 24h stats' gives sufficient context for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'market_id' is fully described in the schema with an example. Schema description coverage is 100%, and the tool description reinforces the example. The description adds value by providing a concrete example format beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the ticker (last price, bid/ask, 24h stats) for a specific market. It includes an example market ID, distinguishes the tool from siblings (e.g., get_orderbook, list_markets), and notes the public nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Public — no credentials needed,' providing clear guidance on when to use it. It doesn't explicitly state when not to use it or list alternatives, but the context of sibling tools and the tool's specific purpose imply appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickersA
Get tickers (last price, bid/ask, 24h stats) for ALL markets in one call. Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool is public, requires no credentials, and returns ticker data for all markets in one call. This adequately informs the agent of the read-only, non-destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the key purpose and usage details. Every word is meaningful and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless tool, the description is complete. It explains what data is returned (ticker stats for all markets) and that it requires no authentication. No output schema is provided, but the description sufficiently covers the expected output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% coverage, so the baseline is 4. The description adds value by clarifying the scope (all markets) and the public access, though no parameter-level detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'tickers for ALL markets', specifying the data included (last price, bid/ask, 24h stats). This is distinct from the sibling 'get_ticker' which presumably retrieves a single ticker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes 'Public — no credentials needed', providing clear context for when to use the tool. While it does not specify when not to use it, the context effectively implies it is for broad market data without authentication requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of trades per page (max 1000). | |
| cursor | No | 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. | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". |
TDQS
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 it well: it exposes that the endpoint is public, no credentials needed, it returns paginated results, the cursor is opaque and must not be constructed, and the limit is per-page. This goes far beyond the bare minimum and gives the agent a solid mental model of runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is about four sentences, front-loaded with the core purpose, followed by output shape, pagination mechanics, and a public-access note. Every sentence contributes useful information with zero fluff; the structure logically progresses from what to how.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, no annotations, and a moderately complex pagination contract. The description fully explains the return structure, cursor lifecycle, and public context, which is sufficient for the agent to invoke and interpret results without surprises. Nothing critical is left dangling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description still adds value by emphasizing the cursor lifecycle (pass 'previous next_cursor' verbatim until next_cursor is null) and clarifying that limit controls one page, not the total history, which the schema does not explicitly contrast. This subtle extra semantic justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific, unambiguous verb-resource-scope statement: 'Get recent public trades (prints) for one market, newest first.' It clearly identifies what the tool does, including ordering and scope, and distinguishes it from sibling market-data tools like get_ticker or get_orderbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on pagination usage: how to walk the full history with next_cursor, when to stop, and that limit controls page size not total results. It also states the public access requirement ('no credentials needed'). It does not explicitly name alternatives or state when not to use it, but the usage context is well established.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_withdrawalsA
List the authenticated account's withdrawal history. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It adds the requirement for authentication and implies a read-only operation via 'List', but does not disclose return format, pagination details, or side-effect-free confirmation. Minimal additional behavioral context is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundancy. It conveys the essential purpose and a key requirement without excess, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and no output schema. The description covers the purpose and authentication requirement, which is adequate for a basic read operation. It could mention whether results are chronological or paginated, but the schema already caps the limit, so the level of detail is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'limit', which is already described with a maximum cap. The description adds no additional meaning or usage nuance beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('the authenticated account's withdrawal history'), distinguishing it from sibling tools like get_trades and list_deposits. The scope is explicit, ensuring no ambiguity about which data is retrieved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a prerequisite (API credentials) but lacks guidance on when to use this tool versus alternatives. It does not mention exclusions or recommend it over similar tools for specific scenarios, making usage context only partially clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 60-second single-use nature, the endpoint compatibility, the requirement of API credentials, and that the response includes ws_endpoint to avoid host guessing. It does not cover edge cases like timeout behavior or error conditions, but it provides strong behavioral context for a no-parameter token-minting operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: it front-loads the core purpose, then explains endpoint/response details, and closes with the credential requirement. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no input schema and no output schema, the description is remarkably complete. It explains why the tool exists, what it returns (including the ws_endpoint field), what credentials are needed, and how it relates to the endpoint version. The agent has enough information to invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the schema has nothing to document; the baseline for zero-parameter tools is 4. The description adds relevant context about authentication and the response payload, which helps the agent understand what the call produces even though no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool mints a short-lived, single-use token for an authenticated per-account WebSocket stream, with the specific use case of order/fill/position updates. It differentiates from siblings like get_ws_token_legacy by noting it uses the current /ws/token endpoint, and from market-data tools by scoping to authenticated account streams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this tool when you need a WebSocket token for per-account real-time updates, and it requires API credentials. It implicitly contrasts with the legacy sibling via 'current /ws/token endpoint,' but it does not explicitly state exclusions or name alternatives beyond that implication.
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
Mint a short-lived (60s, single-use) token for the legacy public /stream endpoint via POST /ws-tokens. Prefer get_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It covers token lifetime (60s), single-use nature, the endpoint, and the ws_endpoint in the response, plus credential requirement. It does not mention side effects like token invalidation or rate limits, but these are implied and minimal for a token mint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each dense with relevant information: the first defines the action and endpoint; the second gives usage guidance and response detail. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless tool with no output schema, the description is complete: it explains the token's purpose, lifetime, usage guidance, the ws_endpoint in the response, and prerequisites. Agents have enough to invoke correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters in the schema, so baseline is 4. The description adds no parameter details (none exist), but it does clarify the HTTP endpoint and token characteristics, which is sufficient given the parameterless interface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool mints a short-lived, single-use token for the legacy /stream endpoint via POST /ws-tokens, immediately distinguishing it from the sibling get_ws_token tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to prefer get_ws_token for new code and only use this for legacy /stream compatibility, providing clear alternative 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.
list_agentsA
List the delegated agent keys registered for the authenticated wallet (address, label, expiry). Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 authentication needs and the returned fields but omits details like read-only nature, pagination, or rate limits. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys all essential information without any wasted words. It is optimally concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless list tool, the description covers the core purpose, output fields, and auth requirement. It could mention pagination or limits, but overall it is sufficient for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no parameters, schema coverage is trivially 100%. The description adds value by specifying what the output includes (address, label, expiry), which helps the agent understand the result. Baseline score of 4 for zero-parameter tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List the delegated agent keys' with a specific verb and resource. It details the fields returned (address, label, expiry) and distinguishes from sibling tools like register_agent and revoke_agent by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies a prerequisite ('Requires API credentials') and implies usage for viewing registered agents. It doesn't explicitly contrast with siblings, but the context of sibling names makes the purpose clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_keysA
List the HMAC API keys for the authenticated wallet (key ids and metadata; never the secrets). Authenticates with a session token from login — set NEXUS_EXCHANGE_SESSION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that secrets are never returned ('key ids and metadata; never the secrets') and auth method. Covers key safety aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no extraneous words. Efficiently conveys purpose, scope, and authentication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description specifies what is returned (key ids and metadata). For a simple list tool, this is adequate context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0 parameters with 100% schema coverage. Baseline score of 4 for 0 params. No parameter info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List the HMAC API keys for the authenticated wallet' – specific verb and resource. It distinguishes from siblings like create_api_key and delete_api_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes authentication requirement: 'Authenticates with a session token from `login` — set NEXUS_EXCHANGE_SESSION_TOKEN.' Clearly indicates when to use but no explicit exclusions or alternatives.
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
List the authenticated account's cross-chain deposit addresses across chains. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 that this is a read-only operation scoped to the authenticated account and that API credentials are required. However, it doesn't disclose what happens when no deposit addresses exist, whether the output is a plain list or paginated, or any rate-limit/error behavior. Useful but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, 10 words, front-loaded with the verb 'List' and zero filler. Every word adds meaning. The only micro-flaw is a slight redundancy ('cross-chain'...'across chains'), which is negligible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple, parameterless list operation with no output schema, so the burden for completeness is low. The description adequately covers the purpose and the key prerequisite. It could marginally improve by noting the return behavior (e.g., empty list if none found), but it is complete enough for agents to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so there are no parameter semantics to explain. The description's clarification that the operation targets the 'authenticated account' pre-empts an authentication parameter question. Per the baseline for 0-parameter tools, a 4 is appropriate since schema coverage is trivially 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with a clear resource ('cross-chain deposit addresses') and precise scoping ('authenticated account', 'across chains'). It clearly distinguishes the purpose from sibling tools like 'list_bridge_deposits' (which lists deposit transactions, not addresses) and 'create_bridge_deposit_address' (creation vs. listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to fetch deposit addresses for the authenticated account) and hints at a prerequisite ('Requires API credentials'). However, it doesn't explicitly contrast against related siblings like 'list_bridge_deposits' or 'create_bridge_deposit_address', nor does it state when NOT to use it. Usage is implied but exclusions/alternatives are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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 list_deposits, which lists the account's ledger deposits. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Filter by deposited asset. Optional. | |
| chain | No | Filter by source chain. Optional. | |
| limit | No | Maximum number of records to return (max 100). | |
| status | No | Filter by deposit status. Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description supplies key context: it scopes to the authenticated account, specifies ordering ('newest first'), and highlights a prerequisite ('Requires API credentials'). However, it does not explicitly declare the operation as read-only or discuss error/empty states, which would further aid transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, each serving a purpose: purpose, filters, differentiation, and auth note. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 4 optional params, no output schema, and no annotations, the description covers the core aspects (scope, ordering, filters, auth). It could mention pagination or default limit behavior for full completeness, but what's written is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description restates the filters (chain, asset, status) that are already fully documented in the schema at 100% coverage. It adds no additional semantics beyond the schema, such as default limit or pagination, so it meets the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'List' with the specific resource 'cross-chain (bridge) deposits' and scoping to 'authenticated account'. Explicitly distinguishes from sibling `list_deposits` by contrasting bridge vs. ledger deposits, which differentiates from the closest alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool `list_deposits` and explains when to use which ('Distinct from... lists the account's ledger deposits'). Also notes authentication requirement as a prerequisite. This provides clear usage guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_depositsB
List the authenticated account's deposit history. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions authentication requirements, but it omits details such as whether the operation is read-only, pagination behavior, or permissions needed beyond credentials. This leaves significant ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two targeted sentences. Every sentence contributes value: one for purpose and one for a critical requirement. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description should provide more context about returned data structure (e.g., fields, pagination info). The tool is simple, but the description leaves the agent uncertain about what to expect in the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'limit' parameter already documented in the schema. The description adds no further semantic value beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List the authenticated account's deposit history', which specifies a verb (List), a resource (deposit history), and a user scope (authenticated account). This distinguishes it from sibling tools like 'get_deposit_target' or 'submit_deposit'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving deposit history, and it adds a prerequisite ('Requires API credentials'), but it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketsA
List all tradable markets with their current summary (mark price, 24h change, volume, open interest, funding). Public — no credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals public access and read-only nature. Does not mention rate limits or pagination, but for a simple list tool this 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines purpose and output, second clarifies authentication. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, the description fully covers what the tool does, what it returns, and access requirements. Complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description adds value by listing output fields (mark price, 24h change, etc.), compensating for missing output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'List all tradable markets' with specific summary fields, clearly distinguishing from siblings like get_ticker (single market) or get_orderbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States 'Public — no credentials needed', making access context clear. No explicit when-not or alternatives, but the simple nature (0 params) and sibling context (e.g., place_order, get_ticker) suffice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_market_specsA
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 list_markets for live mark price / volume / funding.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses that the tool returns static market definitions without live stats, and that it is public. While it doesn't detail potential side effects (none expected), it is transparent enough; a small deduction for not mentioning any potential performance or data volume considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a parenthetical note providing a clear alternative. No wasted words; highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fully covers what the tool does, its scope, and how it differs from related tools. Nothing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100% (empty). The description adds value by clarifying that it lists all markets, which aligns with the absence of parameters. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists all markets with static specs (tick size, lot size, leverage, contract details) and explicitly distinguishes it from the sibling tool list_markets which provides live summary stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that it is public (no credentials needed) and gives a clear alternative (list_markets for live data), guiding when to use which tool.
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". This server cannot sign for you — produce the signature in the wallet and pass it as signature. The returned token is used as the Bearer credential for the *_api_key tools (set it as NEXUS_EXCHANGE_SESSION_TOKEN). No credentials needed to call this.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Signed message. Must be exactly "Sign in to Nexus Exchange" (the default if omitted). | |
| signature | Yes | EIP-191 personal_sign hex (0x-prefixed, 65 bytes) over the login message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: token lifetime (24h), exact message to sign, that the server cannot sign, signature format (EIP-191, hex), and token credential usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The purpose is front-loaded, followed by specific instructions and token usage. Every sentence adds essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple authentication tool with two parameters and no output schema, the description completely covers the flow, prerequisites, and integration with sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds value by clarifying the default message, hex signature format, and the critical instruction that the server cannot produce the signature.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Sign in' and the resource 'EVM wallet' to obtain a '24h session token'. It distinguishes this tool as the authentication entry point among many trading and account tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context that no credentials are needed and that the returned token is for Bearer authentication with `*_api_key` tools, implying usage order. However, it lacks explicit 'when not to use' or alternative methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_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.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | Order side. | |
| size | Yes | Order quantity in base units, as a positive decimal string (> 0). | |
| type | Yes | 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`. | |
| price | No | 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). | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". | |
| reduce_only | No | If true, only reduces an existing position. | |
| time_in_force | No | 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. | |
| trigger_price | No | 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. | |
| limit_offset_bps | No | 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. | |
| trailing_offset_bps | No | 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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses 'Requires API credentials' and 'This submits a REAL order to the matching engine,' which highlights auth and live-execution risk. It also explains activation semantics for stops, take-profits, and trailing orders. It could add more about order lifecycle or rejection reasons, but the core behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, then the order-type catalog and parameter dependencies, ending with the live-order warning. Every sentence provides essential information with no redundancy or filler. Despite the complexity, it remains compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, 8 order types, no output schema), the description covers the operation, authentication, live-execution nature, and cross-parameter requirements. It does not describe the return value or error behavior, but for a place-order action the core usage is well covered. A brief note on expected response (e.g., order ID) would elevate it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a detailed description, including the field-requirement matrix in the type parameter. The tool description repeats these requirements in prose (e.g., 'Limit-family orders require a price'), but adds no new semantic information. It consolidates the rules, but the baseline of 3 is appropriate since the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Place an order on a market, buy/sell.' It then enumerates supported order types, clearly distinguishing this from siblings like place_orders_batch (batch) and preview_order (not real). The explicit warning 'This submits a REAL order' reinforces the tool's core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states this places an order and requires API credentials, implying a live action. It provides detailed parameter requirements for each order family, which guides correct usage. However, it does not explicitly reference alternatives like preview_order for testing or place_orders_batch for multiple orders, so it lacks explicit when-not/exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orders_batchA
Submit multiple orders in one request. Each order has the same shape as place_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.
| Name | Required | Description | Default |
|---|---|---|---|
| orders | Yes | Orders to submit (1–100). Each uses the place_order arg shape. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the burden of disclosure. It explicitly states 'Requires API credentials' and 'This submits REAL orders to the matching engine,' which is strong mutation/side-effect warning. It does not mention batch atomicity, partial failures, or return behavior, but the most critical risk is addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, with three sentences that each carry meaningful info: what it does, how the order shape is derived, and the real-order behavior. The parenthetical field list is dense but aids completeness without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich nested schema covers the parameter semantics thoroughly. The description adds the missing non-schema information: credential requirements and real trading side effects. It does not explain batch-level behavior such as atomicity or failure handling, but overall it gives an agent enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the nested order properties are extensively documented. The description adds convenience by referencing the `place_order` shape, but it does not add substantive new semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Submit'), names the resource ('multiple orders in one request'), and clearly distinguishes the tool from the sibling `place_order` by emphasizing batch capability. It also summarizes the relevant order fields, leaving 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the batched counterpart to `place_order`, giving context that it should be used when submitting multiple orders together. It does not explicitly state when-not to use it or name alternatives, but the intended usage is clear from the wording.
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 place_order. Nothing reaches the matching engine. Requires API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | Order side. | |
| size | Yes | Order quantity in base units, as a positive decimal string (> 0). | |
| type | Yes | 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`. | |
| price | No | 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). | |
| market_id | Yes | Market id, e.g. "BTC-USDX-PERP". | |
| reduce_only | No | If true, only reduces an existing position. | |
| time_in_force | No | 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. | |
| trigger_price | No | 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. | |
| limit_offset_bps | No | 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. | |
| trailing_offset_bps | No | 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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden—and it delivers: it reveals the no-side-effect guarantee ('Nothing reaches the matching engine'), the nature of outputs (margin/equity/fee projection), and auth requirements ('Requires API credentials'). This adds genuine behavioral context beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four terse sentences, each earning its place: purpose+outputs, parameter parity reference, safety guarantee, and auth requirement. Front-loaded with the main verb and immediately informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, annotation-free, output-schema-less tool, the description covers the essentials: behavior, outputs, safety profile, auth, and parameter parity with place_order. Returning projection details (margin/equity/fees) partially compensates for the missing output schema. Could mention error behavior or rate limits, but adequate as-is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description adds a small cross-tool semantic note ('Takes the same arguments as place_order') establishing parameter parity, but the schema's own descriptions do the heavy lifting for the 10 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Preview an order without submitting it' with a clear statement of outputs ('projects the margin, equity, and fee impact'). It explicitly names the sibling `place_order` and differentiates via 'Nothing reaches the matching engine,' leaving no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without submitting it' plus 'Nothing reaches the matching engine' clearly signals the safe-to-test use case, and 'Takes the same arguments as place_order' names the primary alternative. Lacks an explicit when-not-to statement or named alternatives beyond place_order, but the context is strong.
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 NexusExchange v1). This server cannot produce that wallet signature — sign it externally (e.g. in the wallet) and pass it as signature. No API credentials are needed; the signature is the authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | Agent Ethereum address (0x-prefixed, 20 bytes) to delegate to. | |
| label | No | Optional human-readable label for the agent. | |
| nonce | Yes | Monotonic nonce. Use the current Unix time in ms as a safe start. | |
| wallet | Yes | Owner wallet address (0x-prefixed, 20 bytes). | |
| signature | Yes | EIP-712 signature over RegisterAgent{agent, expiresAt, nonce} from the wallet private key (0x-prefixed). | |
| expires_at | No | Expiry as Unix ms. Optional — defaults to now+30d. Must be in [now+1d, now+90d]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explains the signature-based authorization mechanism and that the server cannot generate the signature. However, it does not disclose side effects (e.g., idempotency, what happens if agent already exists) or error scenarios. It is adequate but lacks some behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise paragraph that front-loads the purpose and immediately provides key usage details. Every sentence adds value, and there is no redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and lack of output schema, the description covers essential aspects: purpose, authorization, external signing, and constraints on expires_at. It lacks details on return value, error handling, and idempotency, but still provides a clear operational picture. A score of 4 reflects it as mostly complete with minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 valuable context beyond schema by explaining the EIP-712 domain and struct, the external signing requirement, and default expiry behavior. This extra information justifies a score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Register a delegated agent key so an AI agent can trade on a wallet's behalf without holding the wallet key.' It uses a specific verb and resource, and distinguishes itself from sibling tools like list_agents and revoke_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: it explains that authorization is via an EIP-712 signature, that the server cannot produce it, and that no API credentials are needed. However, it does not explicitly mention when not to use it or contrast with alternatives like revoke_agent.
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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | EVM address being registered (0x-prefixed, 20 bytes). Must match the address recovered from `signature`. | |
| confirm | No | Must be true to actually register. Guards a permanent choice: the account gets one withdrawal wallet and cannot swap it later. | |
| message | Yes | The `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. | |
| signature | Yes | 0x-prefixed 65-byte EIP-191 `personal_sign` signature over `message`, produced by the key for `address`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: one permanent wallet per account, refusal with 409 for a different address, idempotency for re-registering the same address, permanent consequences, and detailed error semantics. This fully discloses the mutation's behavior and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but each sentence carries operational value: sequencing, permanence, idempotency, error handling, and auth requirements. It is appropriately front-loaded. Minor redundancy with the already-rich parameter schema descriptions keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description covers prerequisites, sequencing, exact input semantics, permanent side effects, error handling, retry guidance, and credential requirements. An agent has everything needed to decide whether and how to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides detailed descriptions for all four parameters, so the baseline is 3. The tool description adds one genuinely new constraint: the challenge must name the authenticated account. Other parameter details are largely reinforced rather than newly explained, but this edge above baseline is enough for a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'Step 2 of registering a withdrawal wallet' and specifies the exact payload: address, message, and EIP-191 signature. It differentiates itself from create_bridge_wallet_challenge by framing this as the follow-up submission step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly sequences the tool relative to the challenge endpoint, states the hard precondition that confirm must be true, warns that 503 errors are non-transient and should not be retried, and names the API credentials requirement. This gives an agent clear when-to-use and when-not-to-retry 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.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Agent address to revoke (0x-prefixed). | |
| confirm | No | Must be true to actually revoke (guards against typos). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | True to enable COD for the account, false to disable. |
TDQS
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.
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.
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.
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.
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.
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
Submit a (testnet/synthetic) deposit for the authenticated account via the deposits ledger (POST /deposits — unlike deposit_collateral, the deposit is recorded and listable with list_deposits). amount is a positive decimal string; asset defaults to USDX. Requires API credentials. This moves REAL collateral on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Asset symbol. Optional; defaults to "USDX". | |
| amount | Yes | Amount to deposit, as a positive decimal string (> 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the deposit moves real collateral and that it's recorded on the ledger. With no annotations, this provides necessary behavioral context. Could be clearer about testnet vs real nature, but overall good.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences covering purpose, difference from sibling, parameters, and behavioral note. No fluff, front-loaded with key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 params, no output schema, and full schema coverage, description covers all necessary aspects: purpose, usage context, parameters, prerequisites, and side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage; description only restates schema info (positive decimal, defaults to USDX). No added semantic meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it submits a testnet/synthetic deposit via the deposits ledger, contrasts with deposit_collateral, and specifies the endpoint and effect ('moves REAL collateral'). Distinguishes itself from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly differentiates from 'deposit_collateral' by noting deposits are recorded and listable. Mentions requirement for API credentials, guiding when the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Many tools have overlapping purposes: get_balance, get_account_summary, and get_account_state all return account snapshots; get_ticker, get_tickers, get_mark_price, and list_markets all provide market price data; claim_credit and claim_faucet both claim faucet USDX; get_ws_token and get_ws_token_legacy differ only by endpoint. While the long descriptions help, the boundaries between these tools are unclear enough to cause frequent misselection.
The server mostly follows a get_/list_/place_/create_ verb + noun pattern, but plural collections are inconsistent: get_tickers, get_positions, get_fills vs list_markets, list_deposits, list_agents. There are also irregular names like get_ws_token_legacy and get_deposit_target, and paired create_/list_ for bridge addresses but get_ for other single resources, creating mixed conventions.
With 63 tools, the server far exceeds the 50-tool threshold for an extreme count. Many tools are redundant or could be consolidated (account snapshots, tickers, demo tools, faucet claims), and at least one (get_deposit_target) is unbuilt and superseded, inflating the surface area unnecessarily.
The trading lifecycle is well covered: order placement/cancellation/amendment/preview/batch, positions and closed positions, fills, account state, portfolio history, deposits (multiple methods), withdrawals, bridge operations, agents, API keys, and WebSocket tokens. Minor gaps exist, such as no tool to create a withdrawal or explicitly close a position, but core workflows have no dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Related MCP Servers
- FlicenseBqualityFmaintenanceAn MCP server that enables AI models like Claude to interact with the Trading Simulator API for checking balances, viewing prices, and executing trades with automatic chain detection.15
- AlicenseBqualityFmaintenanceAn MCP server that provides cryptocurrency project data to AI agents11MIT
- AlicenseNot gradedqualityCmaintenanceAn 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.1AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI agents to scan the market, manage positions, and retrieve trading metrics for Bybit through natural language commands.1AGPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nexus-xyz/nexus-exchange-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server