Skip to main content
Glama

Server Details

AI research desk for Hyperliquid: ranked opportunities and trade theses. You confirm every trade.

Ownership verified
Status
Healthy
Uptime
91.3% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.7/5.0

Scored across 92 tools

Disambiguation2/5

The 92-tool surface contains several overlapping families that differ mainly by view or subresource: get_opportunities/get_opportunity_detail/get_opportunity_news/get_opportunity_scoreboard, get_gambit/get_gambit_history/get_gambit_pack/get_tracking_updates, and get_market_brief/get_market_regime/get_sentiment. The descriptions are richly detailed, but the boundaries are hard to retain across so many tools, making misselection likely.

Naming Consistency4/5

Nearly all names use snake_case with a predictable verb_noun pattern and consistent prefixes such as get_, list_, create_, update_, delete_, save_, submit_, and respond_. Minor deviations like whoami and what_if_gambit, plus action-style manage_* tools, keep it from being flawless but still readable.

Tool Count1/5

92 tools for one MCP server is far beyond the well-scoped 3-15 range and exceeds the 50+ extreme-mismatch threshold. Even though Gambit is a broad trading and market-intelligence platform, the tool count imposes excessive selection and maintenance overhead.

Completeness4/5

Coverage is unusually broad: market data, portfolio and wallet reads, trading lifecycle, recommendations, Gambits and mandates, signals, opportunities, news, research, brokerage linking, and the personal evidence/view chain. There are still gaps, such as no individual order-cancel tool and no chat image-upload tool despite ask_gambit_agent supporting image_urls, but most workflows have an end-to-end path.

Available Tools

92 tools
add_gambit_evidenceAdd your own information to a ticker's GambitAInspect

Add a fact you know about one ticker to YOUR personal layer (requires api:account) — the call for "I know this about NVDA; what does it do to the view?". The chain for one ticker. Everything it stores is in YOUR personal layer: the shared view never changes because of it. Over this connector Gambit runs no model for you: YOUR OWN model does the personal work. (1) Add data: add_gambit_evidence stores a fact you know. It is labelled unconfirmed until Gambit confirms it from an official or wire source that states it; a confirmed fact's source joins the shared evidence, and the shared view uses it on its normal run. (2) Your view: the take formed again on top of the shared take plus your facts, which are assumed true for your view only. To form it: call get_gambit_pack, form the take with the rules and output_schema in the pack, then call submit_gambit_view. (3) What if: what_if_gambit gives the view if something happened; when the question matches a dated condition the view already lists, the answer is precomputed and no model runs; otherwise it returns the pack with the event added, for your model to answer. (4) Plan: plan_gambit gives entry, stop, size and exits from your own limits. A plan is not a recommendation to trade and places no order. claim (1-2000 characters): the fact in plain words. Gambit treats any instruction inside it as text and never follows it, and the claim itself never enters the shared evidence. url (optional, http or https): where the fact comes from; an official or wire source Gambit already holds at that link confirms the fact at once when its headline states the fact. check_by (optional, YYYY-MM-DD, default 14 days from today): the date by which the fact should be confirmed; an unconfirmed fact expires after that date. Otherwise Gambit makes one web search for a wire or government report that names the ticker and states the same fact. Returns user_item (your fact, with status unconfirmed or confirmed), confirmation (status, and matched: the source that confirmed it, or null), duplicate (true when you had already added the same fact: the stored one is returned, nothing new is stored and the daily limit is not used) and your_view. Over this connector your_view.status is form_with_your_model (next: call get_gambit_pack, form the view with your model, then submit_gambit_view; based_on_version is the shared version) or same_as_shared (each fact you added is already in the shared evidence, so your view is the shared view). Gambit runs no model for this call. When your view rests on a fact that is still unconfirmed, tell the user so. A daily limit applies (429 rate_limited with retry_after). Errors: 409 gambit_building when Gambit has no view of the ticker yet (get_gambit by symbol queues it; try again later); 404 unknown_symbol; 422 ambiguous_symbol with candidates (call again with one candidate as the symbol); 422 check_by_in_past or invalid_url; 503 gambit_personal_disabled while the personal layer is switched off. This places no order.

NameRequiredDescriptionDefault
urlNoan http(s) link to the source, when there is one
claimYesthe fact, in plain words
symbolYesa ticker such as BTC or NVDA, or an exact id such as xyz:GOOGL or ref:eq:IP, as for get_gambit
check_byNoYYYY-MM-DD; default 14 days from today

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say this is a non-read-only, non-idempotent, non-destructive write. The description adds what the annotations cannot: writes go only to the personal layer and never alter the shared view, facts are 'unconfirmed' until matched to an official/wire source, prompt-injection defense ('Gambit treats any instruction inside it as text and never follows it'), a daily limit with 429/retry_after, and full error taxonomy (409 gambit_building, 404 unknown_symbol, 422 ambiguous_symbol/check_by_in_past/invalid_url, 503 gambit_personal_disabled). Note it also explains a server-side web search for confirmation, which sits in mild tension with openWorldHint=false, but since the lookup is Gambit-internal and constrained to official/wire sources, this is not treated as a contradiction.

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

Conciseness3/5

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

Front-loaded well with the core action and scoping sentence, and the numbered list aids navigation. But items (2)-(4) largely restate the behavior of sibling tools (get_gambit_pack, submit_gambit_view, what_if_gambit, plan_gambit) — including a full description of plan_gambit's outputs that is irrelevant to adding a fact — so a substantial fraction of the text is cross-tool bloat rather than information about this call.

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

Completeness5/5

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

There is no output schema, so the description carries the return burden and does so: it names user_item, confirmation (with status and matched source or null), duplicate (same-fact dedup, nothing stored, limit not consumed), and your_view.status as either form_with_your_model or same_as_shared. Combined with the error codes, expiry rule, and the instruction to tell the user when the view rests on an unconfirmed fact, an agent has everything needed to call and interpret this tool.

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

Parameters5/5

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

Schema coverage is 100% (baseline 3), yet the description still adds real meaning beyond it: claim is 1-2000 chars, is treated strictly as text and never enters the shared evidence; url confirms immediately if an official/wire source Gambit already holds states the fact; check_by defaults to 14 days and defines when an unconfirmed fact expires. It also explains the symbol disambiguation recovery path (call again with one candidate).

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

Purpose5/5

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

States a specific verb+resource+scope: 'Add a fact you know about one ticker to YOUR personal layer', and immediately contrasts it with the shared evidence layer ('the shared view never changes because of it'). It is clearly distinguishable from sibling write tools like submit_gambit_view, create_gambit, and update_gambit_monitoring without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger utterance ('I know this about NVDA; what does it do to the view?') and then separates this tool from the three adjacent steps (get_gambit_pack + submit_gambit_view, what_if_gambit, plan_gambit) in a numbered list. It also states sequencing (next: call get_gambit_pack, form the view, then submit_gambit_view) so the agent knows exactly where this call sits in the flow.

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

adjust_marginAdjust isolated marginA
Destructive
Inspect

Add (positive margin_usd) or remove (negative margin_usd) isolated margin on one of YOUR agent-wallet positions (requires the api:trade scope). REAL MONEY: removing margin moves the liquidation price closer to the market. The position size does not change. Tell the human user the exact change and obtain their explicit approval before calling. symbol must be a position the agent wallet holds (404 otherwise); a cross-margin position answers 409 not_isolated. An error carries the venue's reason.

NameRequiredDescriptionDefault
symbolYes
margin_usdYesUSD delta: positive adds margin, negative removes it

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it flags REAL MONEY, explains that removing margin pushes the liquidation price toward the market, states position size is unchanged, and documents error semantics (404 for unheld symbol, 409 not_isolated, venue reason on error). The destructiveHint annotation is corroborated and enriched with concrete consequences.

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

Conciseness4/5

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

Front-loaded with the core action and sign convention, then layered with risk, approval, and error details. Dense but each sentence carries unique, actionable information; no filler.

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

Completeness5/5

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

For a 2-param mutation with no output schema, the description covers scope requirements, safety implications, approval workflow, and error behavior, leaving nothing an agent needs missing in order to call it correctly.

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

Parameters4/5

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

With only 50% schema description coverage, the description compensates by explaining the positive/negative sign convention for margin_usd and adding meaning to symbol (must be an agent-wallet position, 404/409 failure modes). It adds value beyond the schema's bare type declaration for symbol.

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

Purpose5/5

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

States a precise verb+resource: add or remove isolated margin on the agent's own agent-wallet position. It scopes the operation to 'YOUR agent-wallet positions,' distinguishing it from any cross-margin or non-wallet context without the agent needing another tool's schema.

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

Usage Guidelines4/5

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

Clearly establishes context: requires api:trade scope, only applies to positions the agent wallet holds, and demands human approval before calling. It does not name an alternative tool, but there is no obvious sibling to route against, so the guidance is close to complete.

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

ask_gambit_agentAsk your Gambit agentAInspect

Talk to YOUR Gambit trading agent (the API key's user — requires the api:chat scope, 403 without it): market takes, analysis of your positions and recommendations, strategy discussion. Advisory only — this channel cannot execute trades or move funds. Each turn is a real agent run: it consumes your AI token quota and can take 1-2 minutes, so don't call it speculatively. The conversation persists server-side and continues across calls; pass new_conversation: true to start a fresh thread. To talk about one of YOUR Gambits, pass its case_id (from list_gambits): the turn goes to that Gambit's own conversation, the same thread the user sees on the Gambit in the app, and the agent answers with that Gambit in context (one thread per Gambit, so case_id cannot be combined with new_conversation). To show the agent a chart or screenshot, upload each image first (POST /api/chat/images with the raw image bytes and its Content-Type, api:chat; PNG, JPEG, WebP or GIF) and pass the returned url values as image_urls (up to 24). Read, rename or delete past conversations with list_conversations, get_conversation and manage_conversation.

NameRequiredDescriptionDefault
case_idNotalk about this Gambit in its own conversation; a Gambit id from list_gambits (UUID)
messageYes
image_urlsNourl values returned by POST /api/chat/images
new_conversationNostart a fresh conversation instead of continuing

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnlyHint=false, openWorldHint=false, destructiveHint=false), and the description adds substantial behavior beyond them: the api:chat scope requirement with a 403 failure mode, per-turn token quota consumption, 1-2 minute latency, server-side conversation persistence across calls, and one-thread-per-Gambit semantics. These are exactly the operational facts an agent cannot infer from annotations or schema.

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

Conciseness4/5

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

Front-loaded correctly: purpose, then auth, then cost/latency warning, then threading rules, then the image workflow and siblings. Every sentence carries information, but the single semicolon-heavy block is dense and the image-upload clause could be split or deferred for easier scanning.

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

Completeness5/5

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

Complete for a mutation-adjacent, non-idempotent tool with no output schema: it covers auth prerequisites, cost, latency, state persistence, thread identity, and the prerequisite upload step for images. Nothing an agent needs in order to call it correctly or avoid misuse is missing.

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

Parameters5/5

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

Schema coverage is 75%, but the description still adds real meaning: case_id is sourced from list_gambits (the schema says only 'a Gambit id from list_gambits') and is shown to route to the same thread the user sees in the app, while being mutually exclusive with new_conversation. image_urls is explained as an upload-first workflow via POST /api/chat/images with accepted formats and a 24-image cap, which the schema does not convey.

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

Purpose5/5

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

States a specific verb and resource (talk to your Gambit trading agent) plus the exact scope of what can be discussed: market takes, position analysis, recommendations, strategy. It is explicitly distinguishable from the sibling read tools it names (list_conversations, get_conversation, manage_conversation) and from execution tools, since it declares 'this channel cannot execute trades or move funds.'

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

Usage Guidelines5/5

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

Explicit when-to-call and when-not-to-call guidance: 'don't call it speculatively' because each turn is a real run costing 1-2 minutes and AI tokens. It also gives the routing rule for case_id versus starting a new thread, states the mutual exclusion between case_id and new_conversation, and redirects history management to the three sibling conversation tools.

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

close_all_positionsClose all agent-wallet positionsA
Destructive
Inspect

Close EVERY open perp position in YOUR agent wallet (requires the api:trade scope). REAL MONEY, in two calls. 1) Call with no arguments: nothing is closed; the answer lists the open positions (symbol, side, size, entry price, unrealized PnL) and confirm_echo.positions. Present that list to the human user. 2) Only after their explicit approval, call again with positions set to confirm_echo.positions exactly as returned. The server re-reads the live positions and refuses with 409 positions_changed unless they still match (then preview again); otherwise, for each position, it cancels that symbol's TP/SL orders and places a REDUCE-ONLY market close, which can only close, never open or flip. NEVER make the second call autonomously or chain it after the first. The answer lists each close with its own success in data.closed; if any close fails the call returns an error that names, per position, whether it closed — tell the user which positions are still open. Only the agent wallet is touched, never the main wallet.

NameRequiredDescriptionDefault
positionsNoONLY on the confirming call: confirm_echo.positions from the preview, unchanged

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and non-idempotency, but the description adds substantial context beyond them: the required api:trade scope, real-money warning, preview/confirm contract, live position re-read with 409 refusal, cancellation of TP/SL orders, REDUCE-ONLY market close that can never open or flip, and per-position success in data.closed including partial-failure reporting.

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

Conciseness4/5

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

Front-loaded with the core action and the money/scope warning, and every sentence carries operational weight for a destructive tool. It is a dense single block rather than bulleted steps, which slightly reduces scannability, but no sentence is wasted.

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

Completeness5/5

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

With no output schema, the description compensates by describing the return shape (data.closed per position, error listing which positions closed) and the preview payload (symbol, side, size, entry price, unrealized PnL). An agent has everything needed to execute the confirm flow correctly.

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

Parameters4/5

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

Schema coverage is 100% and already documents positions as 'confirm_echo.positions from the preview, unchanged', so baseline is 3. The description adds genuine meaning beyond the schema by explaining why the field must match exactly (server re-reads live positions and refuses with 409 if they changed) and by describing what the preview response contains.

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

Purpose5/5

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

States a specific verb and resource with explicit scope: 'Close EVERY open perp position in YOUR agent wallet.' It distinguishes itself from sibling tools like get_positions or adjust_margin by naming the wallet boundary (agent wallet, never the main wallet) and the scope (every position).

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

Usage Guidelines5/5

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

Gives an explicit two-step protocol: first call closes nothing and returns a preview list, second call only after explicit human approval. It states the prohibition directly ('NEVER make the second call autonomously or chain it after the first') and the failure condition that forces re-previewing (409 positions_changed).

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

confirm_stock_orderConfirm a proposed stock orderA
Destructive
Inspect

Place a stock order that propose_stock_order checked (requires the api:stock_trade scope). REAL MONEY: this places an order at the user's brokerage. You MUST show the full preview from propose_stock_order to the human user and obtain their explicit approval of that exact order BEFORE you call this tool. NEVER call it autonomously, and NEVER call it automatically after propose_stock_order. Send the preview's confirm_echo fields exactly: check_id, account_id, symbol, action, units, order_type and limit_price. A mismatch answers 409 and does not place this order; if the 409 says the check may already have been placed, check get_stock_order or the brokerage before you do anything else. An expired or unknown check answers 410 check_expired and places nothing. If you did not call confirm_stock_order for that check before, propose the order again and get a new approval. If you did, the first call may have placed the order: tell the user to check the brokerage before you propose again. The server places a check at most once; if this call fails with OUTCOME UNKNOWN or times out, call it again with the SAME check_id — it returns the first result and never places a second order. Do not propose a new order to retry. The response is the order: order_id, status (pending | accepted | partially_filled | filled | cancelled | unknown), filled_units and avg_fill_price. pending, accepted and unknown are not fills: use get_stock_order to follow the order. A broker refusal is an error, never a placed order.

NameRequiredDescriptionDefault
unitsYesconfirm_echo.units
actionYesconfirm_echo.action
symbolYesconfirm_echo.symbol
check_idYesconfirm_echo.check_id
account_idYesconfirm_echo.account_id
order_typeYesconfirm_echo.order_type
limit_priceNoconfirm_echo.limit_price; null or omitted for a Market order

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this destructive/open-world, and the description still adds the details that matter: real money at the user's brokerage, the auth scope required, the at-most-once placement guarantee with same-check_id retry semantics, the 409/410 error meanings, and the fact that a broker refusal is an error rather than a placed order. The retry guidance is in mild tension with idempotentHint=false, but the annotation is the conservative default for a write and the description explains the actual dedup behavior by check_id.

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

Conciseness4/5

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

The critical rule (human approval required, never autonomous) is front-loaded in the first three sentences, which is exactly right for a destructive tool. It is long and repeats the 'never call it automatically' idea in two forms, but almost every sentence carries distinct operational information.

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

Completeness5/5

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

There is no output schema, and the description fully compensates: it enumerates the response fields (order_id, status, filled_units, avg_fill_price), interprets the status enum, and warns that pending/accepted/unknown are not fills and must be followed via get_stock_order. Nothing needed to invoke or interpret the result is missing.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds real value: the six confirm_echo fields must be echoed exactly, and limit_price is null/omitted for a Market order. It stops short of explaining any field beyond that echo contract.

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

Purpose5/5

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

States a specific verb+resource ('Place a stock order that propose_stock_order checked'), names the sibling that must precede it, and makes the real-money stakes explicit. An agent can distinguish it from propose_stock_order and confirm_trade without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use rules (only after showing the full preview and obtaining human approval of that exact order), explicit prohibitions (never autonomously, never immediately after propose_stock_order), and routes the agent to alternatives (get_stock_order, re-propose with a new approval) for the ambiguity cases.

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

confirm_tradeConfirm or cancel a proposed tradeA
Destructive
Inspect

Execute or cancel a previously proposed trade (requires the api:trade scope). REAL MONEY: decision=execute places a market order from the user's agent wallet. You MUST present the full proposal preview to the human user and obtain their explicit approval BEFORE calling this tool — NEVER call confirm_trade autonomously, and NEVER chain it automatically after propose_trade. For decision=execute, asset, side, and size_usd are required and must match the proposal's confirm_echo exactly — an integrity check that this confirmation refers to the trade the human approved (a mismatch 409s naming the field). decision=cancel needs no echo fields. Expired proposals 410 (re-propose for fresh numbers); a moved market 409s with price_drift and requires a fresh propose→approve round.

NameRequiredDescriptionDefault
sideNoREQUIRED for execute — echo confirm_echo.side
assetNoREQUIRED for execute — echo confirm_echo.asset
decisionYes
size_usdNoREQUIRED for execute — echo confirm_echo.size_usd
proposal_idYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and non-idempotent, but the description adds far more: REAL MONEY, a market order from the user's agent wallet, the required api:trade scope, and the specific failure modes (409 naming a mismatched field, 410 for expired proposals, 409 with price_drift for a moved market). This is materially beyond what structured fields convey.

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

Conciseness5/5

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

Front-loaded with the action, then the money/safety warning, then the parameter rules and error behavior. Dense but every clause carries operational information; no filler or restated title language.

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

Completeness4/5

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

For a destructive, non-idempotent real-money tool the description covers preconditions, scope, integrity checks and error codes thoroughly. The only gap is the success side — no hint about what comes back (order id, fill status), which matters somewhat since there is no output schema, though error handling is what an agent most needs here.

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

Parameters5/5

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

Schema coverage is only 60% and the schema only says 'REQUIRED for execute — echo confirm_echo.X'; the description explains the integrity-check mechanism, that the echo must match the proposal exactly, that mismatches 409 naming the field, and that cancel needs none of these fields. That is real semantic value over the schema.

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

Purpose5/5

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

States a specific verb pair (execute/cancel) applied to a specific resource ('a previously proposed trade'), which cleanly separates it from propose_trade and propose_stock_order/confirm_stock_order in the sibling list. An agent knows exactly what this tool does without opening the schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('after a human approves a proposal'), explicit when-not ('NEVER call confirm_trade autonomously, and NEVER chain it automatically after propose_trade'), and a hard precondition (present the full preview and obtain explicit approval). The decision=cancel branch is also distinguished ('needs no echo fields').

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

create_gambitOpen a Gambit from a symbolA
Idempotent
Inspect

Open one of YOUR Gambits on a symbol, with an optional sentence that says what to watch (requires api:account) — the call for "start tracking GOOGL" or "watch whether HYPE holds its ETF bid". symbol is a bare ticker (BTC, GOOGL) or an exact Hyperliquid id (xyz:GOOGL for a HIP-3 market); search_symbols helps find it. A bare ticker listed on several HIP-3 markets (AVGO) is accepted when every listing is the same asset; the Gambit then uses that asset's main market (the xyz: listing for a stock), and other tickers that stay ambiguous need an exact id. sentence (up to 280 characters, the user's own words) becomes the Gambit's monitoring question; without it Gambit uses a general outlook question. If you already have an open Gambit on the same asset, the call returns that one instead of a second: created false and already_existed true. A returned Gambit is not changed: if its monitoring_status is paused (the user stopped it), tell the user and, only if they want it back, call update_gambit_monitoring with active=true. Known limit: Track in the Gambit app does not join a Gambit opened here, so tracking a card on the same symbol in the app can give the user a second Gambit on it; the next create_gambit on that symbol then answers gambit_choice_required and asks which one. A new Gambit starts with a neutral watch judgment (stance watch, conviction low) and no direction; Gambit's monitor writes the first real assessment on its normal schedule, so read it later with get_gambit or get_tracking_updates. Returns case_id (pass it to get_gambit), created, already_existed, monitoring_status, and case (the Gambit in full, as get_gambit returns it). Errors (nothing is created on any of them): 422 code unknown_symbol, ambiguous_symbol with candidates (call again with one exact id), unsupported_symbol, invalid_sentence; 409 code gambit_choice_required with choices [{case_id, title}] when more than one open Gambit already tracks the asset (ask the user which one), or gambit_create_conflict (retry once); 429 gambit_create_limit after 10 creates in an hour; 503 when the symbol registry or the creation limit cannot be read (retry later). This places no order. The response carries app_url, the Gambit's screen.

NameRequiredDescriptionDefault
symbolYesa ticker such as GOOGL or BTC, or an exact id such as xyz:GOOGL
sentenceNowhat to watch, in the user's words; becomes the monitoring question

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only cover the safety/idempotency profile; the description goes far beyond by disclosing the auth requirement (api:account), the dedupe behavior (created=false, already_existed=true), the 10-per-hour rate limit, the initial neutral stance/conviction state, the 'no order placed' guarantee, and the full error taxonomy with codes and recovery actions. It is consistent with idempotentHint=true rather than contradicting it.

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

Conciseness4/5

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

Core action is front-loaded and every clause carries information, but the single dense paragraph stacks parentheticals and error codes, making it heavy to scan. It earns its length but could be structured into shorter sentences without losing content.

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

Completeness5/5

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

Despite no output schema, the description enumerates the return fields (case_id, created, already_existed, monitoring_status, case, app_url) and explains the call's lifecycle, error states, and follow-up reads. Nothing an agent needs to invoke and interpret this correctly is missing.

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

Parameters5/5

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

Schema coverage is already 100%, yet the description still adds meaning the schema cannot: symbol resolution rules for bare tickers, exact Hyperliquid ids (xyz:GOOGL), and the ambiguity policy when a ticker lists on several HIP-3 markets, plus sentence's 280-char limit and its role as the monitoring question with a documented default when omitted.

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

Purpose5/5

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

States a specific verb+resource ('Open one of YOUR Gambits on a symbol') with the scope ('on a symbol') and even maps real user utterances ('start tracking GOOGL') to the call. It distinguishes itself from siblings by naming get_gambit, update_gambit_monitoring, search_symbols and get_tracking_updates and explaining how each relates.

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

Usage Guidelines5/5

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

Explicit when-to-use with example phrasings, when to reach for search_symbols (finding the symbol), and what to do when a Gambit already exists (returns it rather than creating a second; if paused, prompt the user before calling update_gambit_monitoring with active=true). It also tells the agent what to do on gambit_choice_required (ask the user) and on retryable errors.

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

delete_mandateDelete a saved GambitA
Destructive
Inspect

Delete one of YOUR saved Gambits (mandate_id from list_mandates; requires api:account). Gambit stops watching for it and frees its slot in your plan; positions opened under it are never closed by deletion. A deleted saved Gambit cannot be restored — to stop it for a while, use save_mandate action=update with status paused instead. Confirm with the user first. One that is not yours answers 404. Returns the deleted saved Gambit. The response carries app_url, the screen where saved Gambits are managed.

NameRequiredDescriptionDefault
mandate_idYesa saved-Gambit id (UUID)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true and idempotentHint=false; the description goes well beyond that by stating that open positions are never closed by deletion, that the deletion is irreversible, that a foreign mandate returns 404, that api:account scope is required, and that the response includes app_url. This is exactly the extra context the annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the action and its scope, and every sentence carries distinct information (irreversibility, the pause alternative, confirmation, 404 behavior, return value). It is dense and slightly long for a one-parameter tool, but there is no filler.

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

Completeness5/5

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

With no output schema, the description compensates by describing the return value and the app_url field. Combined with auth scope, error behavior, and side-effect semantics, an agent has everything needed to call this destructive tool correctly.

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

Parameters4/5

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

Schema coverage is 100% and the single parameter is already documented as a UUID, so the baseline is 3. The description adds provenance ('from list_mandates') and error semantics for an id that isn't yours (404), which is meaningfully more than the schema alone.

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

Purpose5/5

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

Names a specific verb and resource ('Delete one of YOUR saved Gambits') and scopes it with the id source ('mandate_id from list_mandates'), which cleanly separates it from get_mandate, list_mandates, and save_mandate. The ownership qualifier ('YOUR') further distinguishes it from any admin-level deletion.

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

Usage Guidelines5/5

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

Gives an explicit alternative for the reversible case: 'to stop it for a while, use save_mandate action=update with status paused instead.' It also states a prerequisite workflow ('Confirm with the user first') and where the argument comes from, so when-to-use and when-not-to-use are both covered.

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

evaluate_opportunityEvaluate an opportunityAInspect

Evaluate one setup for YOUR account — the same action as Evaluate in the Gambit app. Requires the api:recommend scope (403 without it). This runs the recommendation pipeline (LLM calls, except when the answer comes from Gambit's view) and can take up to ~45 seconds: each call uses one run of the SAME monthly recommendation quota generate_recommendation uses (403 tier_limit_exceeded when it is spent) and one of 5 calls per minute that evaluate_opportunity and review_opportunity_trade share (429 rate_limited with Retry-After). Do not call it speculatively. Name the setup one of two ways: opportunity_id (a Today's Market card from get_opportunities, mo_ + 32 hex; scenario_id optionally picks one of its plan scenarios from get_opportunity_detail), or security_id + session_date (a Daily Move from get_daily_moves; it must be a Big Move). The answer is data.evaluation: outcome is actionable (Gambit would take it: direction, strength, sizing and trade_ticket), watch (worth watching, not yet), pass (Gambit passes on it) or insufficient (not enough evidence; decision_analysis.missing_evidence says what would settle it). execution.state says whether an actionable ticket is ready or blocked. decision_analysis carries the read, counter_case and changes_if; decisive_evidence the facts it rests on. When Gambit answers are enabled for this deployment (they ship off), for a card on an asset Gambit covers, the evaluation is Gambit's view of that ticker plus a sized plan from the user's own limits: decision_analysis is the rendered view (current_read the headline and summary, counter_case the case against, changes_if what would prove it wrong, with dates), decisive_evidence the sources of its reasons, and gambit the view block (subject_id, version, view, plan); actionable needs a real lean (|shown_lean| at least 1), a Hyperliquid listing and a current view and price, watch means no edge, no listing to trade, or a view that cannot back a ticket on this run (out of date, or no current price), and insufficient means Gambit has no view yet (the ticker is queued; evaluate again after its next update). capital_authority is always none: evaluating places NO order. An actionable evaluation also records a recommendation (ledger_id); when the evaluation comes from Gambit's view that recommendation is advisory, so execute_recommendation refuses it (409 advisory_not_executable). To refresh an actionable Today's Market card evaluation's ticket before trading, call review_opportunity_trade with the card's opportunity_id, evaluation_id, scenario_id, trade_ticket.advisory_fingerprint, trade_ticket.ticket_fingerprint and source.snapshot_fingerprint. Executing anything is a separate api:trade step that needs the human's explicit approval. The response carries app_url, the card's screen.

NameRequiredDescriptionDefault
scenario_idNowith opportunity_id: one of the card's plan scenarios
security_idNoa Daily Move's security_id from get_daily_moves; send with session_date
session_dateNothe Daily Move's session date, YYYY-MM-DD
opportunity_idNoa Today's Market card id from get_opportunities (mo_ + 32 hex)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only give the safety profile (readOnlyHint=false, non-idempotent), but the description adds the full operational picture: ~45s latency, shared monthly quota with generate_recommendation, a 5/min shared cap yielding 429 with Retry-After, 403 scope/tier errors, that no order is placed (capital_authority none), and that a recommendation is recorded but is advisory and refused by execute_recommendation (409). readOnlyHint=false is consistent because a ledger recommendation is written, so no contradiction.

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

Conciseness3/5

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

Purpose is front-loaded, but the body is a single dense wall of prose spanning quota, rate limits, Gambit-view internals, and execution handoff. Almost every sentence carries needed information given the tool's complexity, but the lack of segmentation makes it hard to parse and some detail (app_url, view block fields) is overload for the selection decision.

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

Completeness5/5

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

With no output schema, the description fully carries the return contract: outcome states (actionable/watch/pass/insufficient), execution.state, decision_analysis and decisive_evidence, and the Gambit-view block. Combined with the auth, quota and execution-handoff details, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

Schema coverage is already 100%, but the description goes beyond it by explaining the two disjoint naming modes (opportunity_id vs security_id+session_date), the mo_+32hex format, that scenario_id picks a plan scenario, and the added constraint that a Daily Move 'must be a Big Move'. It adds real meaning over the schema's per-field hints, though the mutual-exclusion/requirement structure is implied rather than stated.

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

Purpose5/5

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

States a specific verb and resource ('Evaluate one setup for YOUR account') and anchors it to a known action ('the same action as Evaluate in the Gambit app'). An agent can distinguish this from generate_recommendation, review_opportunity_trade, and the get_* siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly says 'Do not call it speculatively', defines the two valid ways to name a setup and where each id comes from, and routes the agent to review_opportunity_trade for refreshing a ticket and to a separate api:trade step for execution. When-to-use and when-not-to-use are both present.

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

execute_recommendationPreview executing a recommendationAInspect

Preview executing one of YOUR pending recommendations from YOUR agent wallet (requires the api:trade scope). This does NOT place anything. It stages the same plan the Gambit app's Execute button runs — side, size and notional from the recommendation, its take-profit / stop-loss orders, leverage (default 1x, capped at the API ceiling) — as a proposal in the user's AGENT deposit wallet (never the main wallet), and returns proposal_id, an expiry, the plan, notes, and confirm_echo. Present the full preview to the human user. Only after their explicit approval, call confirm_trade with this proposal_id and the confirm_echo asset/side/size_usd; NEVER call confirm_trade autonomously or chain it automatically after this tool. recommendation_id is a list_recommendations(status=pending) id. Advisory rows (every generate_recommendation result, and the recommendation an evaluate_opportunity answer from Gambit's view records) answer 409 advisory_not_executable: record a response with respond_to_recommendation, or size a separate propose_trade. A recommendation that is not yours answers 404. A stale or invalidated recommendation answers 409 recommendation_not_executable.

NameRequiredDescriptionDefault
leverageNo
slippage_bpsNo
recommendation_idYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare the generic safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false); the description adds what those annotations cannot: it stages rather than places an order, targets the agent deposit wallet and never the main wallet, requires the api:trade scope, caps leverage at the API ceiling, and enumerates the returned fields including confirm_echo. The staged-proposal behavior is fully consistent with a non-readOnly, non-destructive, non-idempotent annotation set.

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

Conciseness4/5

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

The critical facts are front-loaded (preview, no order placed, human approval required) before the error taxonomy, and each sentence carries distinct operational content. It is dense and long, but almost none of it is filler, so it stays readable despite the volume.

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

Completeness5/5

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

With no output schema, the description still enumerates the return payload (proposal_id, expiry, plan, notes, confirm_echo), and it covers scope requirements, wallet targeting, leverage capping, and the full 404/409 error taxonomy. An agent has everything needed to invoke it correctly and to route the result into confirm_trade.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It documents recommendation_id's provenance and leverage's default (1x) and ceiling, but slippage_bps is never mentioned anywhere, and leverage's interaction with the recommendation's own leverage is only implied. Partial compensation for a total schema-coverage gap.

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

Purpose5/5

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

States a specific verb and resource (preview-execute a pending recommendation from the agent wallet) and immediately disambiguates against the sibling that actually executes (confirm_trade). The name's 'execute' is reconciled with the title's 'preview' by the explicit 'This does NOT place anything', so an agent can tell it apart from confirm_trade/propose_trade/respond_to_recommendation without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use condition (recommendation_id is a list_recommendations(status=pending) id from YOUR agent wallet), an explicit when-not plus alternatives (advisory rows -> respond_to_recommendation or propose_trade), and a hard sequencing rule (only call confirm_trade after explicit human approval, never autonomously). It also maps 404 (not yours) and 409 (stale/invalidated) failure paths to distinct meanings.

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

generate_recommendationGenerate a recommendationAInspect

Trigger YOUR Gambit agent to run a fresh trade recommendation (requires the api:recommend scope on your key — 403 without it). This is a real agent run: it consumes one manual-recommendation quota run for the month (and, unless the answer comes from Gambit's view, spends LLM tokens), and can take up to ~2 minutes — do not call it speculatively. If the call times out, the run may still have completed server-side: check list_recommendations before retrying. watch_instrument PINS the run to that one instrument, so the answer is about YOUR instrument or it says why it could not be, never a different asset. When Gambit answers are enabled for this deployment (they ship off; while off, every watch_instrument takes the selector path below), for a ticker Gambit covers, the answer is Gambit's view of it (the shared view get_gambit returns, under user_facing_recommendation.gambit: subject_id, version, view, plan) plus a sized plan from the user's own limits: with a real lean (|shown_lean| at least 1) on a Hyperliquid listing it is a recommend (decision_source gambit_view, setup_family gambit_view) whose direction follows the lean, entry is the current mark, stop comes from realized volatility around it, invalidation_rule is the view's first dated wrong-if condition, and sizing / trade_ticket come from the user's trade policy; with no edge it is a watch (decision_source gambit_no_edge) whose reason is the no-edge map; a Databento-only id (ref:eq:TICKER) of a ticker with no Hyperliquid listing is answered with the view as a watch, with no ticket and no ledger row (a ref:eq id of a ticker that has a Hyperliquid listing still fails with 422: ask about that listing); with no view yet it is a watch (decision_source gambit_building) and the ticker is queued, so ask again after its next update; when the view is out of date, or its plan cannot be priced or its listing confirmed on this run, it is a watch with pin_status unavailable (retryable). No model runs for a Gambit answer. For any other instrument (and for every instrument while Gambit answers are off), candidate generation and the advisory selector's attention are narrowed to it, the pinned asset is reserved a slot in the comparison set the selector reasons over, and a result about any other instrument is REFUSED rather than returned. An unknown or inactive instrument id, or a non-Hyperliquid id (except the Gambit case above), fails fast with 422. watch_status reports how the pin resolved: pin_status held (the desk evaluated your instrument — state recommend or a reasoned watch on it), not_expressible (evaluated, but it has no expression the desk can back right now, such as a Gambit view with no Hyperliquid listing to trade), unavailable (it never reached the selector; or Gambit has no current view of it, or could not price or confirm it on this run), or substitution_refused (the run produced a different instrument and it was withheld). The last two also set state blocked, put a structured blocked_reason on watch_status, and mark no_recommendation_reason retryable — a retry or a different instrument is the move, not treating the watch as a verdict. Set all_universe to scan the full tradeable universe instead. The response leads with the answer — user_facing_recommendation, whose state is recommend or watch (a reasoned no-trade; no_recommendation_reason then says whether it is retryable, i.e. an operational failure rather than a judgement). A recommend is expression_kind single_instrument (instrument_id + direction, plus sizing/trade_ticket when the desk could size it) or pair_trade (long/short legs, no top-level instrument). recommendation_id is the LEDGER id when the run produced a single-instrument recommend, and respond_to_recommendation takes it; read ledger.status to know how it lists: pending — it appears in list_recommendations(status=pending) (when the same recommendation was already pending it is THAT row's id, ledger.reason existing_pending_primary, and this run's own row is ledger.recorded_row_id); recorded — a DIFFERENT recommendation on the same instrument/direction is already pending, so this id is respondable but NOT in the pending list, and the pending one is ledger.existing_pending_recommendation_id. It is null (ledger.status not_persisted) when nothing was written — every watch, and a pair_trade for now — with the reason under ledger.reason. snapshot_id is the run's audit snapshot, not a recommendation id — do not pass it to respond_to_recommendation. Ledger rows from this tool are advisory: they accept respond_to_recommendation but never the web execute action. The advisory's sizing / trade_ticket (entry, stop, take-profit) is previewed for the user's connected MANUAL wallet and does not transfer to the API trading rail — propose_trade -> confirm_trade is a separate agent-wallet MARKET order that you size and the human approves on its own terms. The pipeline diagnostics are omitted by default — set include_diagnostics: true to also get the world model, freshness checks, and candidate sizing.

NameRequiredDescriptionDefault
all_universeNo
watch_instrumentNofocus the run on one instrument (e.g. BTC or xyz:TSLA)
include_diagnosticsNoinclude the full pipeline diagnostics (world model, freshness checks, candidate sizing) alongside the recommendation; default false

TDQS

A4.8/5.0
Behavior5/5

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

Though annotations declare non-read-only and non-idempotent, the description explains WHY and adds far more: the api:recommend scope (403 otherwise), manual-recommendation quota burn, LLM token spend, ~2 minute duration, refusal semantics for other instruments, and the ledger statuses (pending/recorded/not_persisted) that determine whether the returned id is respondable. This is exactly the behavioral context annotations cannot carry.

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

Conciseness3/5

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

Front-loaded with the core action and quota warning, which is good, but it then becomes a single enormous block of dense, jargon-heavy prose covering Gambit-view decision paths, ledger id variants, wallet rails, and diagnostics without sectioning. Most sentences earn their place individually, yet the length and run-on structure make it hard for an agent to parse quickly.

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

Completeness5/5

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

With no output schema, the description fully specifies the return shape: user_facing_recommendation with state recommend|watch, expression_kind single_instrument|pair_trade, ledger.status variants, snapshot_id, and watch_status/pin_status values. For a high-complexity mutation tool with no structured output contract, this is complete.

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

Parameters5/5

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

Schema coverage is 67%, and the description compensates far beyond the schema: watch_instrument 'PINS the run to that one instrument, so the answer is about YOUR instrument or it says why it could not be, never a different asset', all_universe semantics, and include_diagnostics default false with the specific extra payload it returns. It also documents the 422 failure modes per parameter value.

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

Purpose5/5

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

Opens with a specific verb+resource: 'Trigger YOUR Gambit agent to run a fresh trade recommendation', and immediately distinguishes itself from siblings by noting it is a real agent run that consumes quota, unlike list_recommendations or respond_to_recommendation. An agent can tell it apart from ask_gambit_agent, get_gambit, and evaluate_opportunity without opening any schema.

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

Usage Guidelines5/5

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

Explicit exclusions and alternatives: 'do not call it speculatively', 'If the call times out ... check list_recommendations before retrying', 'Set all_universe to scan the full tradeable universe instead', and retry-vs-different-instrument guidance for blocked states. It also names the sibling to use for the follow-up (respond_to_recommendation, propose_trade -> confirm_trade).

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

get_account_balancesGet account balancesA
Read-onlyIdempotent
Inspect

YOUR Hyperliquid balances (the API key's user — no address input, identity comes from the key): the main wallet you trade from manually, plus your Gambit agent's deposit wallet when one is registered (null when absent; an {alias_of_main_wallet: true} marker, with no balances to avoid double-counting, when the agent trades from the main wallet itself). Each wallet reports native_perp (the NATIVE perp clearinghouse's margin summary: account value, margin used, withdrawable, open-position count), spot token balances, and hip3_perp: one entry per HIP-3 builder DEX (xyz, flx, …) where the wallet has funds or positions, with the same margin fields plus collateral_token (null when unknown). Each DEX is its own margin account, possibly in a different collateral token, so never add them into native_perp. Unified accounts hold pooled collateral in spot, so a zero native_perp does not mean no funds. hip3.failed_dexes lists any DEX that could not be read (meta.quality is then "partial"); hip3.included false means the DEX list itself was unavailable. (Requires api:read.)

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses genuine behavioral traits: absence returns null, an alias marker with no balances avoids double-counting, unified accounts can hold funds in spot so zero native_perp is not empty, DEX margin accounts must not be summed with native_perp, and failed DEX reads surface via failed_dexes with meta.quality='partial'. These are non-obvious data-integrity semantics the agent would otherwise get wrong.

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

Conciseness3/5

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

The core scope is front-loaded in the first clause, but the remainder is a dense run-on of nested parentheticals mixing wallet taxonomy, field definitions, and error states. Since there is no output schema the content largely earns its place, but the structure makes it hard to scan.

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

Completeness5/5

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

With no output schema, the description carries the full burden of explaining return shape and it does so thoroughly: wallet entities, per-wallet native_perp/spot/hip3_perp fields, collateral_token, and partial-failure indicators. An agent can correctly interpret and act on the response from this text alone.

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

Parameters4/5

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

Zero parameters yields a baseline of 4, and the description reinforces that identity is derived from the API key rather than supplied, which is meaningful for a parameterless tool. No further param detail is needed or possible.

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

Purpose5/5

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

States a specific verb and resource (account balances) and immediately pins the scope to the API key's own account, explicitly excluding an address input. That clause distinguishes it from address-oriented siblings such as get_wallets without needing to name them.

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

Usage Guidelines3/5

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

The 'YOUR ... no address input, identity comes from the key' phrasing implicitly tells the agent when this tool applies rather than an address-based one, and '(Requires api:read.)' flags a prerequisite. But there is no explicit routing against get_wallets, get_holdings, or get_portfolio_performance, so the when-to-use rule must be inferred.

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

get_barsGet price barsA
Read-onlyIdempotent
Inspect

OHLCV price bars for an instrument over a time range. Instrument ids are bare Hyperliquid symbols (BTC, HYPE) or dex-prefixed HIP-3 symbols (xyz:TSLA) — exactly the symbol values scan_markets returns. Intervals are 1m/5m/15m/1h/1d; start/end default to the last 24h. Returns [timestamp, {o,h,l,c,v}] series with a meta envelope (caps applied server-side). (Requires api:read.)

NameRequiredDescriptionDefault
endNoRFC 3339 end, e.g. 2026-07-02T00:00:00Z (default: start+24h, or now)
startNoRFC 3339 start, e.g. 2026-07-01T00:00:00Z (default: end-24h, or now-24h)
intervalYes
max_pointsNo
instrument_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real context beyond them: the api:read auth requirement, server-side caps on returned points, and the meta envelope. It doesn't detail what happens when a range exceeds caps (truncation vs error), but the added auth and cap disclosure is meaningful.

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

Conciseness4/5

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

Front-loads the core statement, then packs symbol format, intervals, defaults, and return shape into dense but readable prose. No filler sentences; slightly information-dense but each clause earns its place.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so ('[timestamp, {o,h,l,c,v}] series with a meta envelope'). Auth requirement and defaults round out the picture; only edge-case behavior for oversized ranges is unstated.

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

Parameters4/5

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

Schema coverage is only 40%, but the description compensates well—it documents the instrument_id format (bare Hyperliquid symbols vs dex-prefixed HIP-3 like xyz:TSLA), enumerates intervals, and explains start/end defaults. Only max_points behavior (beyond the cap note) is left to the schema.

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

Purpose4/5

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

States a specific verb+resource ('OHLCV price bars for an instrument over a time range') and clarifies scope via defaults and interval set. It does not differentiate itself from the closely related sibling get_prices, which an agent might reasonably confuse it with.

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

Usage Guidelines3/5

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

Provides useful context: symbol values come from scan_markets and start/end default to the last 24h. However, it never states when to choose this over get_prices or get_live_snapshot, leaving the main selection decision implicit.

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

get_calendarGet macro and earnings calendarsA
Read-onlyIdempotent
Inspect

Macro and earnings calendars, by kind — the call for "earnings this week". kind=macro: the main scheduled macro events (central-bank decisions, CPI, NFP, GDP…) with importance and, once released, actual vs forecast and previous; event_date is a New York calendar date. kind=earnings: upcoming earnings for large caps and liquid names plus the symbols you pass (your holdings or watchlist), capped per day; scope=all lifts the size filter. Earnings completeThrough is the last date the response vouches for: an empty day on or before it has no reports, a day after it (or any day when it is null) was not loaded or not yet ingested, so it is unknown, not quiet; truncated true means some rows in the window were not sent or are not stored. Both take days (forward window, 1-90, default 30), back (days before today, 0-14) or an explicit from/to (YYYY-MM-DD, both or neither, at most 90 days). kind=macro_take: Gambit's shared, stored take on one macro event — pass the event's date, time (HH:MM, when it has one), name and country exactly as kind=macro returned them; the same text for every reader. kind=earnings_priority: the tickers YOUR open Gambits and saved Gambits follow (case_tickers, mandate_tickers), for ordering an earnings day. The response carries app_url, the matching calendar screen. (Requires api:read.)

NameRequiredDescriptionDefault
toNomacro and earnings; send with from
backNomacro and earnings
dateNoREQUIRED for macro_take
daysNomacro and earnings
fromNomacro and earnings; send with to
kindYes
nameNoREQUIRED for macro_take
timeNomacro_take: the event's HH:MM, when it has one
scopeNoearnings only
countryNoREQUIRED for macro_take
per_dayNoearnings only: companies per day
symbolsNoearnings only: your holdings / watchlist, always included

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the read-only, idempotent, open-world annotations, the description discloses important behavior: New York calendar dates, per-day caps, earnings completeness semantics via completeThrough, truncated flags, what null completeThrough means, and the api:read requirement. These are substantive operational caveats not captured by annotations.

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

Conciseness4/5

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

The description is front-loaded and information-dense, with nearly every clause contributing necessary behavior. However, it is a single long paragraph with many semicolon-separated rules, making it harder to scan than a lightly structured version would be.

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

Completeness5/5

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

For a 12-parameter tool with no output schema, the description is unusually complete: it covers all kinds, date-window rules, response caveats such as completeThrough and truncated, the app_url field, and the required permission. An agent has enough context to call this correctly without external documentation.

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

Parameters5/5

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

Although schema description coverage is already high at 92%, the description adds meaningful semantics beyond the schema: forward windows of 1-90 days, back windows of 0-14 days, explicit from/to requiring both or neither and max 90 days, scope=all lifting the earnings size filter, symbols always included, and exact identifier fields required for macro_take.

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

Purpose5/5

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

The description states a specific resource (macro and earnings calendars) and explicitly enumerates the four supported modes via kind. It gives concrete use cases such as 'the call for earnings this week' and distinguishes macro vs earnings vs macro_take vs earnings_priority clearly enough that an agent can select the right invocation.

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

Usage Guidelines5/5

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

It gives explicit selection guidance for each kind: macro for scheduled macro events, earnings for upcoming reports, macro_take for a stored shared take on one event, and earnings_priority for tickers followed by the user's open and saved Gambits. It also explains when scope=all applies and what date-window controls are available.

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

get_compute_pricingGet compute pricing history and researchB
Read-onlyIdempotent
Inspect

Read stored OpenRouter baseline list prices, transparent median membership, GPU-hour rental prices per GPU family and tier (GetDeploying CC BY dataset, Azure, and a cross-source composite; min/median/max and offer counts in metadata), licensed Pricify GPU price/stock history (vga.live + rtx.live), the Pricify forecast record (retail_forecasts: daily model low plus 7/30/90-day p10/p50/p90, forecasts not observed prices), and rights-enabled ORNN history (api:read). view=catalog discovers series_id; history returns capped genuine observations; correlation compares stored Databento equity daily returns with calendar-day lag and an availability-aware hypothetical backtest. Returns are fractions. No forward filling, trading or collection on read. Missing history/rights is explicit.

NameRequiredDescriptionDefault
endNo
viewNocatalog
startNo
symbolNo
intervalNo
lag_daysNo
series_idNo
max_pointsNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, and the description adds real behavioral context beyond them: 'No forward filling, trading or collection on read,' 'Missing history/rights is explicit,' 'forecasts not observed prices,' 'history returns capped genuine observations,' and 'Returns are fractions.' These are useful operational caveats an agent couldn't get from the annotations.

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

Conciseness2/5

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

It is a single hundred-plus-word run-on paragraph stuffed with parentheticals, so the core purpose is not front-loaded and the three views are harder to extract than they should be. The content is mostly informative, but the structure actively impedes scanning.

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

Completeness3/5

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

Against 8 params, 0% schema coverage, no output schema, and open-world behaviour, the description does a lot to explain data sources and result semantics, but it leaves half the parameters (start/end/interval/symbol/max_points) undefined for an agent that must construct calls.

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

Parameters3/5

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

Schema coverage is 0% across 8 parameters, so the description must compensate. It explains the view enum thoroughly and implies series_id (catalog discovery) and lag behaviour ('calendar-day lag' ties loosely to lag_days), but start, end, interval, symbol, and max_points are never addressed, leaving most of the surface undocumented.

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

Purpose4/5

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

States a specific verb (read) and a well-scoped resource: stored compute/GPU pricing plus forecasts and a correlation view against equities. It is distinguishable from get_prices/get_bars by the GPU-rental and forecast framing, though the dense parenthetical enumerations of vendors (OpenRouter, Pricify, ORNN, Databento) crowd out the one-line purpose.

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

Usage Guidelines3/5

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

The implicit workflow is inferable: use view=catalog to discover series_id before history/correlation, so an agent can figure out sequencing. But there is no explicit when-to-use/when-not, no mention of when to prefer get_prices or get_symbol_research instead, and the view semantics are buried mid-sentence.

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

get_conversationGet an agent conversationA
Read-onlyIdempotent
Inspect

One of YOUR conversations (conversation_id from list_conversations) with its newest messages, oldest first (limit 1-200, default 100). Each message: id, role (user | assistant), content (text, plus images on user turns, stopped when the reply was cut off, case_verdict when it assessed a Gambit), searches (web sources the reply cited), follow_ups (suggested next questions), symbols and created_at. A conversation that is not yours answers 404. (Requires api:chat.)

NameRequiredDescriptionDefault
limitNo
conversation_idYes

TDQS

A4.1/5.0
Behavior4/5

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

The description adds significant behavioral context beyond the annotations: it details the returned message structure, ordering (oldest first), limit range and default, the 404 ownership restriction, and the required api:chat permission. Annotations already cover safety (readOnly, idempotent), so this is good supplementary detail.

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

Conciseness4/5

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

The description is a single paragraph that front-loads the key information: what the tool does, the source of conversation_id, ordering, and limit. It is dense with useful details and has no filler, though it could be slightly better structured with separate sentences for readability.

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

Completeness5/5

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

Given the tool's simplicity (read-only, two parameters), rich annotations, and absence of an output schema, the description covers all necessary aspects: return format, ownership constraint, authentication requirement, and parameter details. Nothing critical is missing 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.

Parameters4/5

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

With 0% schema description coverage, the description compensates well: it explains that conversation_id comes from list_conversations and specifies the limit range (1-200) and default (100). It does not describe the format of conversation_id beyond that, but it adds meaningful semantics beyond the bare schema.

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

Purpose4/5

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

The description states a specific verb and resource: retrieving one of the user's conversations with its newest messages. It distinguishes from the sibling list_conversations by indicating the conversation_id comes from that tool, though it does not explicitly contrast with other conversation-related tools like manage_conversation.

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

Usage Guidelines4/5

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

It implies usage: you need a conversation_id from list_conversations, and it explicitly states that accessing someone else's conversation returns 404. However, it does not offer explicit when-not guidelines or mention alternatives for different use cases.

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

get_daily_move_contextGet why a daily mover movedA
Read-onlyIdempotent
Inspect

Why a Daily Move moved: the stored research context Gambit captured for that symbol's big move (news, catalysts and the evidence behind them). Pass the US-equity ticker (e.g. CXMT). Stored only — it never runs a model. The response carries app_url, the Daily Moves screen. (Requires api:read.)

NameRequiredDescriptionDefault
symbolYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and open-world. The description adds genuinely new context beyond them: the data is pre-stored, no model is executed on call, the caller needs api:read, and the response includes an app_url pointing at the Daily Moves screen.

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

Conciseness4/5

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

Four short, front-loaded sentences with no filler; the permission note is tucked into a parenthetical at the end where it belongs. Slightly dense use of parentheticals, but nothing wasteful.

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

Completeness4/5

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

For a one-parameter read with rich annotations and no output schema, the description covers what is returned, that it is stored rather than computed, and the auth requirement. It omits what happens when no captured context exists for a mover, which would be the last missing piece.

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

Parameters4/5

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

Schema coverage is 0% — the pattern is present but undocumented. The description compensates by naming the parameter's meaning (US-equity ticker) and giving a concrete example (CXMT), which is more than the schema provides, though it does not explain the pattern's bounds or edge cases.

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

Purpose4/5

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

States a specific verb and resource: it retrieves the stored research context (news, catalysts, evidence) behind a symbol's big move. The symbol-scoped phrasing and the ticker example distinguish it from the list-style sibling get_daily_moves and from the plan-oriented get_daily_move_plan, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the question it answers ('Why a Daily Move moved'), and 'Stored only — it never runs a model' implicitly steers agents away from asking for fresh analysis. But there is no explicit when-to-use/when-not guidance and no named alternative for live or unrestricted research.

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

get_daily_move_planGet a daily move's example planA
Read-onlyIdempotent
Inspect

Gambit's example trade plan for one Daily Move (a qualifying US-equity session mover from get_daily_moves): pass its security_id and session_date (YYYY-MM-DD). Display-only — it explains how such a move could be expressed and is never an order or a recommendation to trade. The response carries app_url, the Daily Moves screen. (Requires api:read.)

NameRequiredDescriptionDefault
security_idYessecurity_id from get_daily_moves
session_dateYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description's added value is the display-only semantics, the auth requirement (api:read), and the fact that the response includes app_url for the Daily Moves screen. That goes beyond what the structured fields convey.

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

Conciseness4/5

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

One dense paragraph, front-loaded with the resource and usage, with no repeated filler. Slightly long but every clause (source tool, format, display-only caveat, auth) carries information.

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

Completeness4/5

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

With no output schema, the description helpfully notes the response carries app_url, and it covers inputs, auth, and the non-actionable nature of the output. Enough for an agent to call it correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is only 50% (session_date has a pattern but no description), and the description compensates by spelling out the YYYY-MM-DD format and tying both parameters to their source in get_daily_moves.

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

Purpose5/5

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

States a specific verb and resource ('example trade plan for one Daily Move') and explicitly scopes it as the per-item companion to get_daily_moves, so the agent can distinguish it from the sibling list tool without opening either schema.

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

Usage Guidelines4/5

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

Tells the agent exactly how to source inputs ('pass its security_id and session_date ... from get_daily_moves') and sets a clear exclusion ('never an order or a recommendation to trade'). It doesn't name the tool to use for actual trade proposals, but the usage context is unambiguous.

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

get_daily_movesGet daily equity movesA
Read-onlyIdempotent
Inspect

US-equity session movers from the materialized Daily Moves snapshot: per-symbol session return with a z-score against that symbol's own annual distribution, session dollar volume, market cap, and qualifies_big_move. Omitted filters apply the product defaults of at least $10M session dollar volume and at least $500M market cap; pass 0 for either filter to request Any. Defaults to view=compact (qualifying movers only, relevance-ranked); view=all includes rows that did NOT qualify, each carrying big_move_rejection_reasons — useful for 'why is X not listed'. meta.caps_applied.available reports the filtered, uncut snapshot size. (Requires api:read.)

NameRequiredDescriptionDefault
viewNo
limitNo
min_abs_zNo
market_sessionNo
min_market_cap_usdNominimum market cap; omit for $500M, 0 for Any
min_session_dollar_volume_usdNominimum session dollar volume; omit for $10M, 0 for Any

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: the product-level default filters and how to bypass them (pass 0), the compact-vs-all filtering behavior, rejection-reason payload on non-qualifying rows, the meta.caps_applied.available uncut-size signal, and the required api:read scope. It stops short of describing snapshot freshness/staleness beyond the word 'materialized'.

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

Conciseness4/5

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

Front-loaded with what the tool returns, then defaults, then view semantics — every clause carries information. It is a dense single paragraph, slightly overpacked, but there is no filler.

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

Completeness4/5

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

With no output schema, the description shoulders return-value explanation and does so well (field list plus meta.caps_applied.available). The remaining gap is the three undocumented parameters, which leaves the agent guessing on min_abs_z and session selection.

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

Parameters3/5

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

Schema description coverage is only 33%, and the description restates the two filter defaults already documented in the schema while leaving min_abs_z, limit, and market_session completely unexplained in both places. It compensates partially, not fully, for the coverage gap.

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

Purpose5/5

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

States a specific verb+resource (US-equity session movers from the Daily Moves snapshot) and enumerates the returned fields (session return, z-score vs annual distribution, dollar volume, market cap, qualifies_big_move). An agent can tell this apart from get_daily_move_context or get_market_brief without opening a schema.

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

Usage Guidelines4/5

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

Gives clear when-to-use guidance for the two modes: view=compact for qualifying movers, view=all 'useful for why is X not listed'. It does not, however, route the agent away from the adjacent daily-move/context/plan siblings, so the alternative-selection guidance is incomplete.

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

get_equity_flowGet equity options flowA
Read-onlyIdempotent
Inspect

US equity options positioning for the supported tickers (AAPL, AMZN, GOOGL, IWM, META, MSFT, NVDA, QQQ, SPY, TSLA): kind=gex for gamma/charm/vanna exposure, kind=iv for IV rank/percentile/term structure inputs, kind=darkpool for dark-pool prints. (Requires api:read.)

NameRequiredDescriptionDefault
endNoISO 8601 — REQUIRED for darkpool
kindYes
limitNo
startNoISO 8601 — REQUIRED for darkpool
tickerYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds useful context beyond them: the hard ticker allowlist and the api:read scope requirement. It does not disclose rate limits, payload size, or whether darkpool results are paginated.

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

Conciseness4/5

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

A single dense sentence front-loads the resource, then the kinds, then the auth requirement — no filler. It is slightly run-on, but every clause (tickers, kind semantics, scope) earns its place.

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

Completeness3/5

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

The tool has no output schema, so the description should hint at what each kind returns structurally (fields, shape, time window conventions). It names the analytics but not the response form, and never mentions the darkpool date-window requirement that the schema only partially signals.

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

Parameters4/5

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

With only 40% schema coverage, the description carries real weight: it maps each kind enum value to a concrete data product and constrains ticker to a fixed list. It leaves start/end (darkpool-required per schema) and limit entirely to the schema, so it does not fully compensate for the coverage gap.

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

Purpose5/5

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

The description names a specific resource (US equity options positioning) and enumerates exactly what each kind returns, plus the ticker universe. An agent can distinguish this from get_exposures or get_orderbook without opening the schema.

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

Usage Guidelines4/5

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

It gives clear in-tool routing guidance: gex for gamma/charm/vanna, iv for IV rank/percentile/term structure, darkpool for dark-pool prints. It does not contrast this tool with adjacent siblings such as get_exposures or get_live_snapshot, but the kind-level disambiguation is strong.

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

get_exposuresGroup instruments into exposuresA
Read-onlyIdempotent
Inspect

Group instruments into the exposures Gambit treats as one (api:read). Pass up to 50 instrument ids — Hyperliquid symbols (BTC, xyz:TSLA) and brokerage tickers alike — and each item returns instrument_id, status (same_exposure when it belongs to a group with other listings of the same underlying, else separate), group_id and label (the shared exposure, e.g. one company across its stock, ADR and perp), source, reason and related_family_ids. For "my exposure to MU across accounts": read get_positions and get_holdings, then pass every symbol held here and add up the rows that share MU's group_id. This reads Gambit's taxonomy only; it never reads your account.

NameRequiredDescriptionDefault
instrument_idsYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds real value beyond that: it discloses the taxonomy-only scope ('never reads your account') and the meaning of the status values (same_exposure vs separate) plus the returned fields, compensating for the absent 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.

Conciseness4/5

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

It is front-loaded (purpose, then parameters, then return shape, then worked example) and every sentence carries information, but the return-field enumeration plus the workflow example make it dense for a single-argument tool.

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

Completeness5/5

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

With no output schema, the description supplies the return-field list and status semantics, the input format, and a concrete end-to-end usage pattern, so an agent has everything needed to call and interpret the result.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the burden and does: it states the batch limit ('up to 50') and shows accepted symbol syntax for both venues ('Hyperliquid symbols (BTC, xyz:TSLA) and brokerage tickers alike'). That explains the pattern and prefix conventions the schema only encodes opaquely.

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

Purpose5/5

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

The description states a specific verb and resource ('Group instruments into the exposures Gambit treats as one') and immediately scopes it against the account-reading siblings by asserting it never reads the user's account. An agent can distinguish this taxonomy-lookup tool from get_positions/get_holdings without opening a schema.

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

Usage Guidelines5/5

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

It gives an explicit conditional workflow: for 'my exposure to MU across accounts', first call get_positions and get_holdings, then pass the held symbols here and sum rows sharing MU's group_id. That names the alternative tools and the exact sequence, leaving nothing to inference.

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

get_featureGet quant featuresA
Read-onlyIdempotent
Inspect

Pre-computed quantitative features (returns, realized vol, z-scores, funding, OI deltas — the schema enumerates every valid feature_name). mode=snapshot for the latest value, mode=timeseries for history, mode=outliers for the top-N most extreme instruments in a universe (e.g. hl_top50). Instrument ids are bare Hyperliquid symbols (BTC, HYPE) or dex-prefixed HIP-3 symbols (xyz:TSLA) — exactly the symbol values scan_markets returns. A null value means no data for that instrument/feature, not an error. (Requires api:read.)

NameRequiredDescriptionDefault
nNooutliers only
endNoISO 8601 (timeseries only)
modeYes
startNoISO 8601 (timeseries only)
universe_idNo
feature_nameYes
instrument_idNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent safety profile, and the description adds genuinely useful context beyond them: a null value means no data rather than an error, and an api:read scope is required. It does not mention rate limits, pagination, or limits on timeseries length, so it is not fully complete.

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

Conciseness4/5

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

A single front-loaded paragraph that opens with what is returned, then modes, symbol format, null semantics, and auth — the highest-value information comes first. It is dense but nearly every clause carries operational meaning; the only soft spot is the parenthetical feature-family list.

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

Completeness5/5

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

For a 7-parameter tool with no output schema, the description covers the essential call-shaping facts: mode semantics, identifier format with a cross-tool source of truth, null-vs-error behavior, and required scope. An agent could invoke it correctly without further clarification.

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

Parameters4/5

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

With only 43% schema coverage the description does real work: it explains all three mode values, defines instrument_id format (bare Hyperliquid symbols or dex-prefixed HIP-3 symbols, matching scan_markets output), and ties universe_id to outlier universes like hl_top50. It leaves start/end as only implicitly timeseries-scoped, without restating the ISO 8601 format or range inclusivity.

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

Purpose5/5

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

States a specific resource — pre-computed quantitative features — and enumerates the families it covers (returns, realized vol, z-scores, funding, OI deltas), and explicitly delegates the full enumeration to the schema. This clearly distinguishes it from raw-data siblings like get_bars, get_prices, and get_market_regime.

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

Usage Guidelines4/5

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

Gives per-mode routing guidance: snapshot for the latest value, timeseries for history, outliers for top-N extreme instruments in a universe. It also tells the agent to source instrument ids from scan_markets. It stops short of stating when to prefer a sibling over this tool (e.g. versus get_bars for raw series).

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

get_fillsGet my fillsA
Read-onlyIdempotent
Inspect

YOUR Hyperliquid fills (executed trades) — the call for "my fills today". Gambit resolves YOUR wallets from your account: main_wallet (the wallet you trade from; null when none is linked yet) and agent_wallet (Gambit's agent deposit wallet, when you have one; alias_of_main_wallet when they are the same). truncated true (or a dex in hip3_truncated_dexes) means Hyperliquid's 2000-fill page was full — narrow the window to see the rest. Each wallet returns address, fills (native perps and spot; a spot fill's coin is a pair id such as @107; each fill has coin, px, sz, side B=buy A=sell, time, dir, closedPnl, fee, oid, hash) and hip3_fills (HIP-3 markets such as xyz:TSLA, with dex), with hip3_complete false and hip3_failed_dexes when a HIP-3 DEX could not be read. Window: start_time and end_time in epoch milliseconds (default the last 24 hours, at most 90 days, end_time not in the future). Limited to 30 calls a minute. Read-only. (Requires api:read.)

NameRequiredDescriptionDefault
end_timeNoepoch milliseconds; default now
start_timeNoepoch milliseconds; default 24h before end_time

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it explains wallet resolution (main_wallet, agent_wallet, alias), truncation semantics (2000-fill page, hip3_truncated_dexes), partial-failure flags (hip3_complete, hip3_failed_dexes), the 90-day window cap, and a 30-calls/minute rate limit.

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

Conciseness4/5

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

Front-loaded with the core identity before drilling into wallet/return-detail mechanics, and every clause carries real information. It is dense as one block paragraph, so slightly harder to scan than it could be.

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

Completeness5/5

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

With no output schema, the description shoulder the burden and does so fully—it documents the return structure (address, fills, hip3_fills, per-fill fields like coin, px, sz, side, closedPnl, fee, oid, hash) and failure signaling. An agent has everything needed to call and interpret it.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds constraints the schema does not state: a 90-day maximum window and that end_time cannot be in the future. It also restates the 24h default, which is redundant with the schema.

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

Purpose5/5

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

States a specific verb and resource ('YOUR Hyperliquid fills (executed trades)') and disambiguates from sibling tools like get_open_orders and get_positions by scoping to executed fills. The 'my fills today' framing makes the intent unmistakable.

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

Usage Guidelines4/5

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

Provides clear usage context via the phrase 'the call for "my fills today"' and directs narrowing the window on truncation. However, it never names alternatives (e.g., get_open_orders for open orders vs. get_positions) so the agent must infer that this is the executed-trades tool.

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

get_fired_signalsGet my fired signalsA
Read-onlyIdempotent
Inspect

YOUR signals that fired and still wait for your answer, newest first (limit 1-50, default 20) — the call for "my fired signals". Each: execution_id (pass it to respond_to_signal), cron_id, cron_name, description, instrument_id, triggered_at, the query that ran and its result, and the predicate result that made it fire. total counts all that are waiting. The response carries app_url, the Alerts settings screen. (Requires api:read.)

NameRequiredDescriptionDefault
limitNo

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial context beyond the readOnly/idempotent annotations: newest-first ordering, a default limit of 20 with a 1-50 range, a total field counting all waiting items, and the required api:read scope. These are exactly the details an agent needs before calling and before interpreting how much it received.

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

Conciseness4/5

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

Front-loads scope and ordering, then the field enumeration. The field list is long but earns its place since there is no output schema; a slightly tighter grouping of returned fields would make it easier to scan.

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

Completeness5/5

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

With no output schema, the description supplies the return shape (execution_id, cron_id, cron_name, description, instrument_id, triggered_at, query, result, predicate result), the total counter semantics, and the app_url pointer. Authorization requirements are also covered, leaving nothing an agent needs for correct invocation.

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

Parameters5/5

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

Schema coverage is 0% and there is one parameter, so the description must carry it — and it does, supplying the default of 20 and the 1-50 bounds that the schema declares only as min/max without any default value. That default is genuinely new information over the schema.

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

Purpose5/5

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

States a specific verb+resource and narrows scope precisely: 'YOUR signals that fired and still wait for your answer', explicitly disambiguating from the sibling list_signals by restricting to unanswered fired signals. It also self-identifies as 'the call for "my fired signals"', so an agent can match user intent without opening a schema.

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

Usage Guidelines4/5

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

Usage is clearly implied by the state filter (fired and awaiting answer) and it routes the follow-up action by naming respond_to_signal and telling the agent to pass execution_id. It never explicitly contrasts with list_signals or save_signal, so the when-not guidance is inferred rather than stated.

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

get_gambitGet a GambitA
Read-onlyIdempotent
Inspect

Gambit's view of one ticker (pass symbol), or one of YOUR Gambits in full (pass case_id). Pass exactly one of the two. BY SYMBOL (BTC, HYPE, NVDA, or an exact Hyperliquid id such as xyz:GOOGL): Gambit's view is ONE shared, versioned view per ticker: the same view for every user, with a new version only when Gambit's view changes. Reading by symbol works for any ticker Gambit covers, a Hyperliquid listing or a US stock, even when you have no Gambit on it. A bare ticker that names a Hyperliquid listing (often a crypto perp) and also a US stock with no Hyperliquid listing reads the Hyperliquid one. Check subject_type and display_symbol against what the user meant; pass ref:eq:TICKER (for example ref:eq:IP) to read the US stock. A ticker that stays ambiguous answers 422 ambiguous_symbol with candidates (subject ids such as asset:crypto:IP); call again with one candidate as the symbol. Your answer to the user starts with since_you_last_looked: what changed in the view since this user last read this ticker, why, and what caused it (or first_look on a first read). The response also carries subject_id, display_symbol, subject_type, version, as_of and generated_at; view (the headline and summary, our view against what's priced, the horizon, what produces the price (engine), positioning, the levers as reasons — each with its state, what the price assumes about it, our read, the threshold that would change our mind, and its sources — the macro forces with this asset's exposure, instrument mechanics, the case against, what would prove us wrong and what would confirm it with dates (each tied to a lever_id), the next dated events, how likely we are to be wrong, what we can't judge, and the map of what is priced when there is no edge; price_levels only when you pass price_levels true); new_since_view (official or wire news published after the view was formed); freshness (status fresh, cached or unavailable); and what_would_change_our_view (the dated conditions that would change it, each with overdue true when its date has passed and Gambit has not yet recorded the result, and the case against). reasoning (the analyst's ledger against the previous version — what happened to each lever and test, with sources — the noise it set aside and why, its research trail: which data it read, which searches it ran and which pages it read, and dig_further: where to go for more). When the user pushes back, test their claim against the levers' thresholds and what_would_change_our_view and say what evidence would change the view; do not just restate it. To score a new hypothetical event, call what_if_gambit. mark_seen (default true) records that this user has now seen this version, so the next read reports only later changes; pass false to look without recording it. A ticker with no view yet answers status building and is queued (queuing an asynchronous Gambit view build on first read of an unseen symbol): read it again later instead of polling in a tight loop. To report a view that looks wrong, call leave_feedback (needs api:account) with category data_quality and area gambits, and name the subject_id and version in the message. Errors: 404 unknown_symbol; 422 ambiguous_symbol with candidates; 503 gambit_reads_disabled while these reads are switched off. A symbol read has no app_url. BY CASE_ID (from list_gambits or get_tracking_updates): everything list_gambits returns, plus: case_seed — the question Gambit is answering for this Gambit (monitoring_question, monitoring_lenses, relationship_focus, horizon, change_criteria: the observable conditions that would change the read, and the seed summary); provenance (where it came from: discovery, mandate_activity, market_opportunity, chat or api); original_thesis (the advisory the Gambit started from, when it came from one) and current_advisory (the advisory behind the newest judgment, when known); mandate_lineage_id; the opportunity-tracking record (opportunity_first_tracked_at, opportunity_first_price, opportunity_last_result); judgments — the dated assessment log, newest first (each entry's id, trigger_kind, update_category, judgment_before / judgment_after, delta_summary, material flag, evidence_refs, captured_price and created_at; judgment_count is the true total); and, when Gambit has a view of the Gambit's asset, gambit (subject_id, version, as_of, the same view, since_you_last_looked, what_would_change_our_view and feedback; a case_id read never records it as seen and runs no freshness check, so it has no new_since_view: read by symbol for news since the view was formed). A judgment is Gambit's read of the Gambit for YOUR account: stance (recommend | watch | stand_aside), conviction (high | medium | low), summary (the written view), changes_if (what would change it), evidence_refs, user_reported_context (things you told Gambit that shaped it) and as_of. A Gambit that is not yours answers 404, exactly like one that does not exist. A case_id read carries app_url, this Gambit's screen. (Requires api:read.)

NameRequiredDescriptionDefault
symbolNoa ticker such as BTC or NVDA, an exact id such as xyz:GOOGL or ref:eq:IP (the US stock), or a candidate subject id from ambiguous_symbol; pass symbol or case_id, not both
case_idNoa Gambit id from list_gambits (UUID); pass case_id or symbol, not both
mark_seenNosymbol reads only, default true: record that the user has now seen this version
price_levelsNodefault false: add the price-level add-on (key levels, and wrong-if / confirms-if closes with dates) when the view has one

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover read-only/idempotent safety, and the description adds substantial context beyond them: api:read authorization, the default-on mark_seen read-receipt side effect with an opt-out, asynchronous build queueing on first unseen symbol, freshness statuses, the fact that case_id reads neither record seen nor run freshness checks, 404 for non-owned Gambits, and specific error codes.

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

Conciseness4/5

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

The two-mode selection is front-loaded, and much of the length is justified because there is no output schema and the return shape must be explained. However, it is a single dense paragraph enumerating many view fields; bullets or headings would make it scannable and would trim some redundancy.

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

Completeness5/5

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

There is no output schema, so the description carries the full burden of explaining returns: the view contents, since_you_last_looked, reasoning ledger, new_since_view, freshness, what_would_change_our_view, judgments, and case-seed fields. Combined with error states and side effects, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds the symbol resolution workflow the schema cannot express—Hyperliquid-vs-US-stock precedence, the ref:eq:TICKER escape hatch, and resubmitting an ambiguous_symbol candidate as the symbol—plus case_id provenance. Some of this duplicates schema text, so it is strong but not entirely additive.

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

Purpose5/5

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

The first sentence states the exact two resources and modes: Gambit's shared per-ticker view (symbol) or one of the user's Gambits in full (case_id). It distinguishes itself from siblings by explicitly routing hypothetical scoring to what_if_gambit, case enumeration to list_gambits, and data-quality complaints to leave_feedback.

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

Usage Guidelines5/5

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

It gives explicit when-to-use rules for both modes, the one-of-two constraint, when to call what_if_gambit, how to handle user pushback against levers, when to use leave_feedback, mark_seen=false for silent reads, and not to poll while a view is building. Recovery from 422 ambiguous_symbol is spelled out with the exact retry pattern.

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

get_gambit_historyGet a Gambit's historyA
Read-onlyIdempotent
Inspect

The history of Gambit's view of one ticker (pass symbol), or the dated history of one of YOUR Gambits (pass case_id). Pass exactly one of the two. BY SYMBOL (BTC, NVDA, xyz:GOOGL): Gambit's view is ONE shared, versioned view per ticker: the same view for every user, with a new version only when Gambit's view changes. Reading by symbol works for any ticker Gambit covers, a Hyperliquid listing or a US stock, even when you have no Gambit on it. A bare ticker that names a Hyperliquid listing (often a crypto perp) and also a US stock with no Hyperliquid listing reads the Hyperliquid one. Check subject_type and display_symbol against what the user meant; pass ref:eq:TICKER (for example ref:eq:IP) to read the US stock. A ticker that stays ambiguous answers 422 ambiguous_symbol with candidates (subject ids such as asset:crypto:IP); call again with one candidate as the symbol. Returns subject_id, display_symbol and its accepted versions, newest first: each version's number, as_of, the headline and summary at that version, change_lines (what changed in our thinking, in the analyst's words), note, verdict_moved, ledger (what happened to each lever and test of the version before, with sources), noise (what was set aside and why) and no_change (true when nothing in the view changed). Page with limit (1-100, default 20) and before_version (next_before_version from the previous page; null means there are no older versions). view, entry_id, observation_id and cursor are case_id reads only. To report a view that looks wrong, call leave_feedback (needs api:account) with category data_quality and area gambits, and name the subject_id and version in the message. Errors: 404 unknown_symbol; 422 ambiguous_symbol with candidates; 503 gambit_reads_disabled while these reads are switched off. A symbol read has no app_url. BY CASE_ID (from list_gambits): view=history (default): the full timeline, newest first, as items of kind opportunity (a captured market opportunity entry), observation (a news item or post attributed to the Gambit: symbol, source_types, summaries, why_now (why it was surfaced for this Gambit), attention_refs, category, horizon, and source_snapshots with the excerpt, url, publisher and source_at — attention only, not verified evidence) or judgment (an assessment entry: trigger_kind, update_category, judgment_before / judgment_after, delta_summary, material, evidence_refs, captured_price, created_at). view=entries: only the captured opportunity entries (opportunity_id, subject_id, instrument_ids, captured_at, source_at, historical, explicitly_saved, captured_price, and source_snapshot with the public headline, detail and evidence). view=entry: one entry, by entry_id. view=observation: one observation, by observation_id (the observation_id a history item carries). history and entries page with limit (1-100, default 50) and the next_cursor from the previous page. A judgment is Gambit's read of the Gambit for YOUR account: stance (recommend | watch | stand_aside), conviction (high | medium | low), summary (the written view), changes_if (what would change it), evidence_refs, user_reported_context (things you told Gambit that shaped it) and as_of. A Gambit that is not yours answers 404. A case_id read carries app_url, the Gambit's screen opened on the entry or observation when you asked for one. (Requires api:read.)

NameRequiredDescriptionDefault
viewNocase_id reads only
limitNosymbol reads, and case_id history and entries
cursorNocase_id history and entries only: next_cursor from the previous page
symbolNoa ticker such as BTC or NVDA, an exact id such as xyz:GOOGL or ref:eq:IP (the US stock), or a candidate subject id from ambiguous_symbol; pass symbol or case_id, not both
case_idNoa Gambit id from list_gambits (UUID); pass case_id or symbol, not both
entry_idNoREQUIRED for view=entry
before_versionNosymbol reads only: next_before_version from the previous page
observation_idNoREQUIRED for view=observation

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, but the description adds substantial context: shared versioned view semantics, ambiguity handling via 422 ambiguous_symbol and ref:eq:TICKER, error codes, api:read requirement, app_url behavior, and pagination mechanics. No annotation contradiction.

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

Conciseness4/5

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

The definition is front-loaded with the core purpose and organized with BY SYMBOL / BY CASE_ID / Errors sections. However, it is very long and dense, with several run-on parentheticals, so it is not maximally concise.

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

Completeness5/5

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

There is no output schema, but the description exhaustively covers return fields for each view, pagination, error behavior, permissions, and app_url differences. For a complex tool with two modes and eight parameters, this is complete.

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

Parameters5/5

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

Schema coverage is 100%, but schema descriptions are terse; the prose adds meaningful detail: accepted symbol formats, ref:eq fallback for US stocks, case_id source, view enum meanings, limit defaults, before_version/next_cursor usage, and required ids for entry/observation views. This goes well beyond the schema.

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

Purpose5/5

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

The opening sentence states a specific verb/resource and two mutually exclusive modes: Gambit's shared view of a ticker by symbol, or a dated history of one of the user's Gambits by case_id. It also names list_gambits as the source for case_id, making the tool's purpose distinct and actionable.

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

Usage Guidelines4/5

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

It explicitly says 'Pass exactly one of the two' and gives detailed conditions for symbol reads (any covered ticker, even without a Gambit) versus case_id reads (from list_gambits). It also covers ambiguity resolution and reporting bad views via leave_feedback, but does not explicitly say when to choose this over sibling get_gambit.

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

get_gambit_packGet a ticker's evidence pack for your own modelA
Read-onlyIdempotent
Inspect

The evidence pack for one ticker, so YOUR OWN model can form a view of it (requires api:read). The chain for one ticker. Everything it stores is in YOUR personal layer: the shared view never changes because of it. Over this connector Gambit runs no model for you: YOUR OWN model does the personal work. (1) Add data: add_gambit_evidence stores a fact you know. It is labelled unconfirmed until Gambit confirms it from an official or wire source that states it; a confirmed fact's source joins the shared evidence, and the shared view uses it on its normal run. (2) Your view: the take formed again on top of the shared take plus your facts, which are assumed true for your view only. To form it: call get_gambit_pack, form the take with the rules and output_schema in the pack, then call submit_gambit_view. (3) What if: what_if_gambit gives the view if something happened; when the question matches a dated condition the view already lists, the answer is precomputed and no model runs; otherwise it returns the pack with the event added, for your model to answer. (4) Plan: plan_gambit gives entry, stop, size and exits from your own limits. A plan is not a recommendation to trade and places no order. Returns based_on_version (the shared version the pack is built from), pack (the shared take with everything behind it: its levers with state, what is priced and thresholds, its tests with watch ids, macro, mechanics and the analyst's ledger; the market numbers; and items, each with its item_id: the sources the shared take rests on, plus your own facts marked kind user with negative ids), rules (Gambit's analyst method; items marked kind user are the user's own information: assume they are true and say so), output_schema (the JSON schema of the take to return) and submit_with (submit_gambit_view). Gambit runs no model for this call. Next: form the take with your model, following the rules and output_schema, cite only item_ids from this pack, and pass the JSON object to submit_gambit_view with your model's name and this pack's based_on_version. Errors: 409 gambit_building when Gambit has no view of the ticker yet (get_gambit by symbol queues it; try again later); 404 unknown_symbol; 422 ambiguous_symbol with candidates (call again with one candidate as the symbol); 503 gambit_reads_disabled while these reads are switched off.

NameRequiredDescriptionDefault
symbolYesa ticker such as BTC or NVDA, or an exact id such as xyz:GOOGL or ref:eq:IP, as for get_gambit

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description discloses authentication requirements (api:read), that Gambit runs no model for this call, that personal-layer data never changes the shared view, and exact error codes for building, unknown symbol, ambiguity, and disabled reads.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and uses numbered sections for workflow, error handling, and next steps. It is somewhat verbose and repeats the no-model point, but the length is largely justified by the multi-step workflow it must explain.

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

Completeness5/5

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

Even without an output schema, the description fully explains the return structure: based_on_version, pack contents, rules, output_schema, and submit_with. It also covers error recovery and how this call fits into the broader personal-view workflow.

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

Parameters4/5

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

Schema coverage is 100%, so the symbol's format and examples are already documented. The description adds meaningful parameter behavior by explaining the 422 ambiguous_symbol error and instructing the caller to retry with one candidate as the symbol.

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

Purpose5/5

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

The description states a specific verb and resource: retrieving the evidence pack for one ticker so the caller's own model can form a view. It distinguishes the tool from siblings by naming get_gambit for queueing and submit_gambit_view as the required next step.

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

Usage Guidelines5/5

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

It gives an explicit workflow: call get_gambit_pack, form the take with the pack's rules and output_schema, then call submit_gambit_view. It also routes related tasks to add_gambit_evidence, what_if_gambit, and plan_gambit, with clear when-to-use conditions.

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

get_holdingsGet brokerage holdingsA
Read-onlyIdempotent
Inspect

YOUR connected brokerage holdings (the API key's user — no address input, identity comes from the key): Robinhood and any other brokerage linked to Gambit through SnapTrade. Covers STOCKS/ETFs/ADRs, OPTIONS, and CRYPTO HELD AT THE BROKERAGE (an actual coin at Coinbase/Kraken/Robinhood — not COIN, BITO or MSTR, which merely track one); see get_positions / get_account_balances for Hyperliquid. Bonds, CFDs and futures are NOT reported: they are dropped rather than shown in a column that would misprice them. EACH LOT CARRIES assetClass ('equity' | 'option' | 'crypto'). OPTION ARITHMETIC IS NOT SHARE ARITHMETIC: quantity is in CONTRACTS, while marketPrice and averageCost are per SHARE (that is how a premium is quoted), and option.contractMultiplier is the shares per contract AS STATED BY THE VENUE. marketValue already has the multiplier in it. So cost basis is quantity x averageCost x contractMultiplier — never quantity x averageCost, which understates it by ~100x. contractMultiplier is NULL when the venue stated none or stated something unusable; treat null as 'cannot value this row', never as 100 (a mini covers 10, a split-adjusted contract covers whatever the adjustment made it). Options also carry option.underlyingSymbol, optionType, strikePrice and expirationDate. Rows carry listingRegion ('us' | 'non_us' | null — null means the venue did not say, NOT 'US') and isDepositaryReceipt (a US-listed foreign company; for an option this describes its UNDERLYING). Default view is compact: total value, cashUsd and buyingPowerUsd (the same numbers the Gambit web app shows: USD-labelled or unlabelled balances only, other currencies are not summed, and null — not 0 — when the total is zero or negative, so a CAD-only account or a negative margin balance reads null), each connected account (with accountId, so two accounts sharing a label stay distinguishable), and topHoldings — the 10 largest ACCOUNT-LEVEL LOTS by absolute market value PER CURRENCY (a symbol held in two accounts appears twice, each row names its account; shorts rank by exposure; amounts are never compared across currencies, there is no FX conversion) with quantity, price, market value, average cost and currency, plus holdingsCount so you know what the cap hid (meta.caps_applied is non-null only when rows were dropped). Pass view: 'full' for every lot as the raw snapshot (holdings, totalCash; no topHoldings/spotlight fields). Pass symbol (compact view only) to get activeSymbolPosition: that ticker across accounts, INCLUDING options written over it. Because shares, contracts and coins are three different units, the spotlight breaks out legs[] — one entry per assetClass, each with its own quantity/marketPrice/averageCost/marketValue — and the headline quantity, marketPrice and averageCost are NULL whenever legs has more than one entry. marketValue is the exception and stays summed across legs, because dollars add up where units do not. Null when not held. Lots with no currency code are listed last as an unranked sample (ordered by symbol, capped like any group; meta.caps_applied.top_holdings.unknown_currency_truncated says if that sample dropped rows). Sampled rows keep their nominal values with currency: null; only the SPOTLIGHT aggregate is nulled — lots spanning currencies (or with no currency code) report null marketValue/marketPrice/averageCost/currency there, and lots mixing long and short keep net quantity and net marketValue but report null marketPrice and averageCost. Tickers match exactly (BRK.B is not BRK.A; a dex: prefix like xyz:TSLA is stripped). totalValue carries currency and totalValueCaveat: currency is NULL when no account stated one — that means UNKNOWN, not USD, so do not label such a total with a currency symbol or add it to one that has a currency. totalValueCaveat names why the total is not simply the worth of every account: 'mixed_currency' (accounts disagree, or some stated none — totalValue is null), 'missing_accounts' (some accounts reported no total and are left out of it), 'holdings_only' (no account total at all, so cash is missing), 'unknown_currency' (a real figure in a unit nobody stated). holdingsDegraded: true means at least one account's positions came from a REDUCED FEED THAT CANNOT REPORT OPTIONS — the holdings are present but known to be incomplete, so say so rather than reporting an option-free account as settled; account.positionsSource names which account it was. meta.data_freshness.status is 'fresh' inside the ~60s server cache and 'stale' when a cached snapshot was served past it (brokerages sync roughly daily, so stale is usually fine for reading — not for sizing a trade). meta.degraded_reason names why the answer is EMPTY: brokerage_not_connected means the user has not linked a brokerage in Gambit (Portfolio → Connect brokerage) — an empty list is never silent. Read-only, and cannot place brokerage orders. Needs the api:portfolio scope.

NameRequiredDescriptionDefault
viewNocompact (default): totals + up to 10 account-level lots per currency by absolute market value + symbol spotlight; full: every lot, raw snapshot shape
symbolNocompact view only: exact ticker to spotlight, e.g. NVDA or BRK.B — aggregated across accounts as activeSymbolPosition

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description extends far beyond them: option arithmetic (contracts vs per-share pricing, contractMultiplier null handling), currency caveats (null vs USD, totalValueCaveat values), holdingsDegraded reduced-feed semantics, meta.data_freshness staleness, meta.degraded_reason, and caps_applied truncation. This is exactly the additional behavioral context the annotations cannot carry, and it is consistent with them.

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

Conciseness4/5

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

The description is very long and dense, but for a tool with this many edge cases (option multipliers, currency aggregation, degraded feeds, per-cap truncation) most sentences carry load-bearing semantics rather than repetition. It is front-loaded with purpose and never buries the core statement, though the heavy capitalization and sheer volume slightly hurt scannability.

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

Completeness5/5

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

There is no output schema, so the description bears the full burden of describing return shape — and it does: totalValue/currency/totalValueCaveat, accountId, topHoldings limits, activeSymbolPosition legs and null aggregation rules, holdingsDegraded, and meta flags. For a tool this complex, an agent has everything needed to interpret results correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that 'full' yields the raw snapshot (holdings/totalCash, no topHoldings/spotlight) and that symbol is compact-only, driving activeSymbolPosition with cross-leg nulling rules. That is more than a restatement of the enum/pattern.

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

Purpose5/5

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

The opening sentence names the exact resource and scope — 'YOUR connected brokerage holdings (the API key's user — no address input, identity comes from the key)' — plus the providers (Robinhood and any SnapTrade-linked brokerage). It explicitly distinguishes itself from get_positions/get_account_balances (Hyperliquid) and states what is excluded (bonds, CFDs, futures). An agent can tell it apart from every sibling without opening a schema.

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

Usage Guidelines4/5

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

It routes the agent to alternatives for a specific case ('see get_positions / get_account_balances for Hyperliquid') and gives condition-based selection for view:'compact' vs 'full' and the symbol spotlight. It also states the read-only constraint. It stops short of a full when-to-use map across the many siblings (e.g., when to prefer get_account_balances for cash), so it is clear but not exhaustive.

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

get_home_insightGet cached Home insight wordingA
Read-onlyIdempotent
Inspect

Gambit's cached short wording for Home observations. Cache only: this never runs a model and never reads your account — the wording is written from the facts in the packet alone. Pass observations (1-30) in the packet shape the Gambit app builds: observation_key, kind (news | market_brief | macro | earnings | earnings_day | opportunity | watchlist), title, fact_fragments (1-16 source facts), and optionally significance_facts (up to 8) and observed_at. Each item returns observation_key and status: cached with compression {what_happened, why_it_matters (or null), claim_type: report | event | result | price_move | schedule | observation, confidence: high | medium | low}, or missing / unavailable when no wording exists for exactly that packet. The cache is keyed by the packet's content, so a packet that differs in any fact from the one the app warmed answers missing — treat missing as 'no summary yet' and use the facts you sent. (Requires api:read.)

NameRequiredDescriptionDefault
observationsYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond readOnly/idempotent annotations, the description discloses cache-only behavior, exact content-keying, the missing/unavailable status semantics, return shape, and the api:read requirement. These details materially affect how an agent interprets results and avoids assuming fresh generation.

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

Conciseness5/5

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

The paragraph is dense but well front-loaded: purpose first, cache behavior next, packet input shape, then return semantics. Every sentence contributes useful information for correct invocation.

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

Completeness5/5

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

There is no output schema, but the description explains return values including cached compression fields and missing/unavailable outcomes. Combined with annotations and full parameter guidance, it is complete for an agent to call and interpret the tool.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates by documenting the observations packet shape, field meanings, kind enum options, fact_fragments and significance_facts limits, optional observed_at, and return statuses. This adds substantial semantic clarity beyond the raw schema.

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

Purpose5/5

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

The description states a specific verb/resource: cached short wording for Home observations in Gambit. The cache-only constraint and exact-match behavior clearly distinguish it from tools that generate fresh model output, such as ask_gambit_agent. An agent can understand the tool's unique role without opening the schema.

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

Usage Guidelines4/5

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

It gives clear context: cache only, never runs a model, never reads the account, and missing means 'no summary yet' with a fallback to use the facts you sent. It does not explicitly name sibling alternatives, but the operational boundaries are well defined.

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

get_lessonGet a lessonA
Read-onlyIdempotent
Inspect

YOUR daily Gambit lesson. view=daily (default): today's card — card (track concept | asset, slug, term, title, key_points, summary, sections with paragraphs / examples, reading_minutes, served_on, read_at, read_via), completed, progress (seen / total) and spine. Reading it claims today's card for you, exactly as opening Home does: one card per UTC day, the same card all day. view=archive: every lesson you were served, with read state. view=lesson: one lesson by slug (a concept slug, or an asset lesson's symbol) — reading ahead claims nothing. Mark today's card read with mark_lesson_read, passing its served_on and slug. The response carries app_url, the lessons shelf or that lesson. (Requires api:read.)

NameRequiredDescriptionDefault
slugNoREQUIRED for view=lesson
viewNo

TDQS

A4.7/5.0
Behavior4/5

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

The description discloses non-obvious behavior beyond the annotations: reading the daily view claims today's card, one card per UTC day, that reading ahead claims nothing, and that the tool requires api:read. This is unusually rich, though there is mild tension with readOnlyHint=true since claiming the card changes read state; it is non-destructive and idempotent enough that it reads as bookkeeping rather than a contradiction.

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

Conciseness4/5

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

The purpose and default are front-loaded and every clause carries information (response fields, claiming behavior, read path). It is a dense single paragraph rather than a structured breakdown, which slightly reduces scannability.

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

Completeness5/5

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

There is no output schema, so the description responsibly enumerates the returned fields (card, completed, progress, spine, app_url) and the read-tracking flow. Nothing an agent needs to call this correctly appears missing.

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

Parameters5/5

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

With only 50% schema coverage and an undescribed enum, the description compensates fully: it defines what 'slug' is (a concept slug or an asset lesson's symbol) and explains all three view values, including that slug is required for view=lesson.

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

Purpose5/5

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

The description states a concrete verb+resource (a daily Gambit lesson) and enumerates exactly what each of the three views returns (daily card, archive, single lesson by slug). It clearly distinguishes itself from the nearby mark_lesson_read sibling by naming it and its role.

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

Usage Guidelines5/5

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

It explicitly says view=daily is the default and what each mode is for, covers the when-to-use condition for view=lesson ('reading ahead claims nothing'), and routes read-marking to mark_lesson_read. The alternatives and their selection conditions are spelled out, not implied.

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

get_liquidation_mapGet liquidation levels and ADL queueA
Read-onlyIdempotent
Inspect

Where liquidations sit for one perp (api:read; coin: BTC, or a HIP-3 market such as xyz:NATGAS) — the call for "liquidation map for BTC". view=levels (default): every open position's liquidation price, binned by percent distance from mark (input bucket_pct 0.05-5, out to max_distance_pct 1-100). The answer carries coin, markPx, asOf (ms), bucketPct, stale, and levels[] with price, side (long | short), notionalUsd, notionalByTier (by leverage tier), positionCount, size and distancePct. view=adl: the auto-deleverage queue — queueSide (which side is deleveraged first; input queue_side, default short), markPx, totalNotional, liquidityAdjustment, queue[] of {percentile, cumulativeNotional}, and market.long / market.short totals (side, markPx, totalSameSide, totalNotional, queue); per-trader rows are omitted. Source: Hydromancer position snapshots.

NameRequiredDescriptionDefault
coinYes
viewNo
bucket_pctNolevels only
queue_sideNoadl only
max_distance_pctNolevels only

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds real context beyond that: the data source (Hydromancer position snapshots), the 'stale' indicator, and that ADL mode omits per-trader rows.

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

Conciseness4/5

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

Front-loads purpose, then details each view. The field enumerations are dense but earn their place given there is no output schema. Some range values duplicate the schema, and the parenthetical flow is slightly crammed but still scannable.

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

Completeness4/5

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

With no output schema, the description carries the burden of documenting returns and does so thoroughly for both views, including defaults and the ADL omission. Minor gap: 'stale' is named but never explained, and refresh/freshness expectations for the snapshots are unstated.

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

Parameters4/5

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

Schema coverage is only 60%, but the description compensates by documenting defaults (view, queue_side), explicit ranges (bucket_pct 0.05-5, max_distance_pct 1-100), and which view each parameter applies to. It adds meaning beyond the terse 'levels only'/'adl only' schema notes.

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

Purpose5/5

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

States a specific verb+resource (liquidation levels and the ADL queue for one perp), and explicitly maps the natural-language intent 'liquidation map for BTC' to this call. No sibling tool covers liquidation maps, so it is clearly distinguishable from get_positions/get_exposures/get_live_snapshot.

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

Usage Guidelines4/5

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

Gives clear routing context ('the call for "liquidation map for BTC"') and distinguishes the two modes with defaults (view=levels default, view=adl, queue_side default short). It does not, however, state when NOT to use it or contrast against a specific alternative.

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

get_live_snapshotGet live market snapshotA
Read-onlyIdempotent
Inspect

Real-time market features for one or more instruments from the hot cache — fresher than get_feature for current conditions. Pass one instrument_id, or instrument_ids as a comma-separated list for a batch. Instrument ids are bare Hyperliquid symbols (BTC, HYPE) or dex-prefixed HIP-3 symbols (xyz:TSLA) — exactly the symbol values scan_markets returns. (Requires api:read.)

NameRequiredDescriptionDefault
instrument_idNo
instrument_idsNocomma-separated for batch

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive/openWorld, so the bar is lower, and the description still adds real value: the data comes from a hot cache and is therefore fresher but not authoritative history, plus an explicit auth requirement ('Requires api:read'). It does not describe the shape of the returned 'features'.

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

Conciseness5/5

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

One tight paragraph: purpose first, then alternatives, then parameter formats, then auth. Every clause carries information an agent needs; there is no filler.

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

Completeness4/5

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

For a read-only tool with no output schema, the description covers source, freshness, id format, batching, and auth. The remaining gap is that 'market features' is never enumerated, so an agent cannot anticipate what fields come back or whether it should combine this with get_feature for full coverage.

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

Parameters4/5

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

Schema coverage is 50% and the description compensates well: it explains the single-vs-comma-separated batch semantics and pins down the exact id format (bare Hyperliquid symbols like BTC/HYPE, dex-prefixed HIP-3 like xyz:TSLA) plus a cross-reference to scan_markets' `symbol` values. It leaves open the edge case of passing both parameters or neither, which matters since 0 parameters are required.

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

Purpose5/5

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

States a specific verb+resource ('Real-time market features') with explicit scope (one or more instruments, hot cache) and names the sibling it is fresher than ('get_feature'). An agent can distinguish this from get_feature, get_feature/get_bars, and get_prices without opening any schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent: use this over get_feature when current conditions are needed, and it explains single-vs-batch invocation. It stops short of a full when-not statement (e.g., historical ranges → get_bars, and what happens if both id params are supplied or neither).

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

get_mandateGet a saved GambitA
Read-onlyIdempotent
Inspect

One of YOUR saved Gambits (mandate_id from list_mandates, or the mandate_id a Gambit or an activity row carries), with the same fields list_mandates returns per row. One that is not yours answers 404. The response carries app_url, the screen where saved Gambits are managed. (Requires api:read.)

NameRequiredDescriptionDefault
mandate_idYesa saved-Gambit id (UUID)

TDQS

A4.1/5.0
Behavior3/5

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

The annotations provide comprehensive behavioral signals (readOnlyHint, destructiveHint, idempotentHint). The description adds minor helpful context regarding the `app_url` being present in the response, but doesn't add much beyond the structural metadata already provided.

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

Conciseness4/5

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

While a little verbose, the structure is logical, starting with the core purpose and ending with the technical context (UI link and access rights). The information density is appropriate for a high-level description.

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

Completeness4/5

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

The description is complete for its intended purpose. It confirms the resource scope (only the user's saved items), the required identifier, and the necessary UI context (`app_url`) for the agent to follow up.

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

Parameters4/5

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

Since schema coverage is 100%, the baseline is 3. The description adds value by explaining the multiple possible sources for the required `mandate_id` (i.e., from `list_mandates`, a Gambit row, or an activity row).

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

Purpose5/5

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

The description clearly states the intent is to retrieve a specific 'Gambit' (mandate). By requiring a `mandate_id`, it distinguishes this retrieval operation from listing or creating mandates.

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

Usage Guidelines4/5

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

It provides crucial usage guidance by specifying that if the ID belongs to another user, it will return a 404 error. This defines the scope and limitations of the tool for the agent.

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

get_mandate_activityGet saved-Gambit activityA
Read-onlyIdempotent
Inspect

What Gambit found for YOUR saved Gambits, newest first (limit 1-20, default 10) — the call for "what did my saved Gambits find today". Each row: mandate_id and mandate_version (which saved Gambit, and which edit of it), symbol / security_id / subject_id (what moved), observed_at, relevance_reason (why Gambit judged it relevant to that saved Gambit), activity_reasons (codes for what triggered it: drawdown, positive_extension, price_and_volume, or a secondary-source signal), evidence (the market data behind it), status (where Gambit's review of it stands: pending or processing while it runs, ignored when judged not relevant, failed with last_error — a short code such as recommendation_failed), recommendation (the advisory Gambit drafted from it, when one was), case_id when it opened or updated one of your Gambits (pass it to get_gambit), and created_at / updated_at. (Requires api:read.)

NameRequiredDescriptionDefault
limitNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent safety, and the description adds substantial context beyond them: newest-first ordering, the api:read auth requirement, status lifecycle (pending/processing/ignored/failed with last_error), and what evidence and recommendation fields represent. This is well past 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.

Conciseness4/5

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

Purpose and parameters are front-loaded, and every clause about row fields earns its place given there is no output schema. It is one very dense run-on sentence, though, which slightly hurts scanability.

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

Completeness5/5

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

With no output schema, the description must document the return shape — and it enumerates nearly every row field (mandate_id/version, symbol/security_id/subject_id, observed_at, relevance_reason, activity_reasons, evidence, status, recommendation, case_id, timestamps). Nothing an agent needs to call or interpret it is missing.

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

Parameters5/5

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

Schema coverage is 0% for the single limit param, and the description fully compensates with 'limit 1-20, default 10', which matches the schema bounds and adds the default the schema omits.

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

Purpose5/5

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

States a specific verb+resource ('What Gambit found for YOUR saved Gambits') with scope ('saved Gambits', newest first) that separates it from get_gambit, list_gambits, and get_gambit_history. The parenthetical 'what did my saved Gambits find today' pins the intent unambiguously.

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

Usage Guidelines4/5

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

The framing 'the call for "what did my saved Gambits find today"' gives clear usage context, and it routes to get_gambit when a case_id is present. It doesn't explicitly exclude or contrast with siblings like get_gambit_history or list_gambits, so a small inference remains.

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

get_market_briefGet the Market BriefA
Read-onlyIdempotent
Inspect

The Home Market Brief and the reads behind it, by view. brief (default): Gambit's shared written brief of the session (the same for every reader, cached; status 503 while it regenerates). sentiment: the latest CNN Fear & Greed and crypto Fear & Greed readings with CNN's sub-indicators. breadth: the latest market breadth (percent above 20/50/200-day averages, advancers/decliners; market filters it). equity_changes: latest close and change vs the prior session for US equities/ETFs (symbols). quotes: live value and change for FX pairs, commodities and index ETFs in Twelve Data form (symbols such as EUR/USD, SPY; up to 60). returns: the closes each period is measured from (5d, 1m, 3m, ytd, 1y) — symbols reads US equities, crypto reads Hyperliquid perps; never mix them. series: daily closes for the same two universes over period (default 1m), downsampled to about 90 points. yields: US Treasury yields. news: the latest headlines from Gambit's news sources (limit 1-30). asset_description: a one-line description of symbol (kind crypto | equity). The response carries app_url, the Market Brief screen. (Requires api:read.)

NameRequiredDescriptionDefault
kindNoasset_description only
viewNo
limitNonews only
cryptoNoreturns and series: Hyperliquid perps
marketNobreadth only
periodNoseries only
symbolNoREQUIRED for asset_description
symbolsNoequity_changes, quotes, returns and series (US equities; Twelve Data symbols for quotes)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish the safe, idempotent, read-only profile, but the description adds real context: the brief is shared and cached with status 503 while regenerating, symbol caps (60 for quotes), downsampling to ~90 points, the 1m period default, limit range 1-30, and the api:read requirement. It stops short of describing failure behavior for the other views or the response shape beyond app_url.

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

Conciseness3/5

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

Content is dense and largely earns its place, but it arrives as a single wall of parenthetical prose covering ten views. A per-view list structure would make it far easier to scan; as written it is informative but poorly front-loaded beyond the opening clause.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining what each of the ten views returns, and it does so. It also notes app_url in the response. What is missing is minimal — pagination/limits on other views and how views behave when data is unavailable.

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

Parameters4/5

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

Schema coverage is 88%, so the baseline is 3, but the description earns more by mapping parameters to views — kind only for asset_description, limit only for news, market only for breadth, period only for series — and by clarifying that crypto means Hyperliquid perps and symbols means US equities, which the schema does not state.

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

Purpose4/5

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

States a specific resource — the Home Market Brief plus 'the reads behind it' — and enumerates each view, so an agent knows exactly what data is returned. It does not explicitly route against overlapping siblings like get_sentiment, get_news_headlines or get_bars, so the differentiation is implicit rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied through the per-view content descriptions; there is no explicit when-to-use/when-not guidance and no mention of which alternative tool to pick when the agent only needs one view. The one real guideline given — 'never mix' equity and crypto for returns/series — is a parameter constraint rather than tool selection guidance.

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

get_market_regimeGet market regimeA
Read-onlyIdempotent
Inspect

Current global market regime classification: returns regime_label (risk_on | neutral | risk_off) alongside numeric regime_state (+1 = risk_on, 0 = neutral, -1 = risk_off), regime_confidence, and risk_on_off_score — use to adapt strategy to conditions before sizing or proposing anything. (Requires api:read.)

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the bar is lower. The description adds the api:read scope requirement and clarifies what the numeric return values mean, which is genuine context beyond structured fields. It doesn't mention refresh cadence or staleness, so not a 5.

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

Conciseness4/5

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

One sentence that front-loads the resource, then the returned fields, then the usage trigger and auth note. Dense but every clause carries information; the stacked parentheses and em-dashes make it slightly harder to parse than an ideal split.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining return values and does so with field names and value mappings, plus the auth requirement. Missing only operational details such as data freshness or caching, which matter for a regime signal used before sizing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 and there is no parameter behavior to explain. The description correctly adds nothing here and focuses on return semantics instead.

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

Purpose5/5

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

States a specific verb and resource ("Current global market regime classification") and enumerates the exact fields returned, including the encoding of regime_label and the +1/0/-1 mapping of regime_state. That level of specificity distinguishes it cleanly from siblings like get_sentiment or get_market_brief.

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

Usage Guidelines4/5

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

"Use to adapt strategy to conditions before sizing or proposing anything" gives a concrete decision point in the workflow. It stops short of naming alternative tools (get_sentiment, get_market_brief, get_liquidation_map) or stating when this is not needed, so no explicit alternatives or exclusions.

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

get_my_opportunity_marksGet my opportunity votes and savesA
Read-onlyIdempotent
Inspect

YOUR votes and saves on Today's Market opportunity cards. Pass the opportunity_ids you care about (1-100, ids from get_opportunities: mo_ + 32 hex); each item returns opportunity_id, mine (your vote: up | down, or null when you have not voted) and mine_saved (true when you saved the card). Use it to tell the user which cards in a feed they already voted on or saved. It does not say whether a card is tracked as a Gambit — list_gambits answers that. (Requires api:read.)

NameRequiredDescriptionDefault
opportunity_idsYesids from get_opportunities, e.g. mo_0123…

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description still adds real behavioral content: a 1–100 batch limit, per-item return fields with the exact shape of a null vote, and the api:read auth requirement. It doesn't say what happens to malformed or unknown ids, which is the only remaining gap.

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

Conciseness4/5

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

Front-loaded with the core statement and the id source, then the return shape, then the exclusion, then auth — a sensible order. The nested parenthetical in the second sentence is dense and slightly strains readability, but no sentence is filler.

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

Completeness5/5

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

With no output schema, the description supplies the return fields inline; with a single required parameter it explains the id source and limit; and it names a sibling for the adjacent question plus the auth scope. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3; the description still adds meaning by saying where the ids come from (get_opportunities) and what each returned item maps to. It clarifies the pairing between the single input array and the per-id output rather than repeating the pattern constraint.

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

Purpose5/5

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

The description opens with a specific verb+resource statement — the caller's own votes and saves on Today's Market opportunity cards — and names the exact id source (get_opportunities, mo_ + 32 hex). It is clearly separable from get_opportunities (card feed) and get_opportunity_detail (card content), so an agent can pick it without opening the schema.

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

Usage Guidelines5/5

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

It states the intended use (tell the user which cards in a feed they already voted on or saved) and explicitly carves out a neighbouring case it does NOT answer — Gambit tracking, routing to list_gambits. That is an explicit when-to-use plus a named alternative, leaving little to inference.

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

get_news_feedGet my news feedA
Read-onlyIdempotent
Inspect

YOUR curated news feed — the call for "news on my holdings" and "what's in my feed". view=feed (default): the newest posts from the news sources YOU have enabled, newest first; page older with before + before_id (both halves of the last row's cursor) or poll newer with since + since_id. view=sources: every operator-curated news source and whether YOU include it. view=related_opportunities: the Today's Market cards related to one feed item (item_id, the item's numeric id). These read your own source choices only; changing them stays in the app. (Requires api:read.)

NameRequiredDescriptionDefault
viewNo
limitNofeed only
sinceNofeed only: newer-poll cursor timestamp
beforeNofeed only: older-page cursor timestamp
item_idNoREQUIRED for related_opportunities
since_idNofeed only: newer-poll cursor id
before_idNofeed only: older-page cursor id

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, and the description goes well beyond them: it discloses the required api:read scope and that results reflect only the caller's own source choices (an important authorization/scope nuance). It also documents the polling vs paging semantics of the cursors, which no annotation covers.

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

Conciseness4/5

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

A single dense paragraph with the identity front-loaded and each view labeled in call order, so scanning is fast. It is longer than typical but nearly every clause carries new information; the framing phrases ('the call for ...') are slight padding.

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

Completeness4/5

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

With 7 optional parameters, no output schema, and an openWorld hint, the description supplies return-value concepts for each view (newest posts newest-first, source list with include flag, related Today's Market cards) plus auth and pagination behavior. It stops short of describing the actual response envelope, which matters somewhat given no output schema exists.

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

Parameters5/5

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

Schema coverage is already 86%, but the description adds genuine meaning: each view's behavior is explained, item_id is framed as the item's numeric id for related_opportunities, and critically it states that before + before_id (or since + since_id) must be passed as 'both halves of the last row's cursor' — a pairing rule the schema does not express.

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

Purpose5/5

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

Opens with a specific identity ('YOUR curated news feed') and enumerates three distinct views with their exact contents, immediately separating it from get_news_headlines (raw headlines) and manage_news_sources (mutation). An agent knows what resource this is and what modes it exposes without opening the schema.

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

Usage Guidelines4/5

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

Maps natural-language intents ('news on my holdings', 'what's in my feed') to the correct view and explicitly excludes writes with 'changing them stays in the app'. What's missing is naming the sibling that performs that change (manage_news_sources), so routing for the write case is inferred rather than stated.

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

get_news_headlinesGet news headlinesA
Read-onlyIdempotent
Inspect

Recent market news headlines (X/Twitter firehose, priority-ranked). Filter by symbol or lookback hours. (Requires api:read.)

NameRequiredDescriptionDefault
hoursNo
limitNo
symbolNo
priorityNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent, so the bar is lower, yet the description still adds real context: the data source (X/Twitter firehose), that results are priority-ranked, and the api:read scope requirement. It stops short of explaining what 'priority-ranked' means operationally or whether results are truncated.

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

Conciseness4/5

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

Three short clauses with the resource and source front-loaded; no filler. Slightly clipped to the point that 'priority-ranked' and the parenthetical auth note read as unexplained fragments.

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

Completeness3/5

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

With no output schema, the description should hint at the return shape (headline objects? source attribution?) and it does not. Combined with 0% parameter coverage and no sibling differentiation, it is adequate but leaves meaningful gaps for a 4-parameter read tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry semantic weight; it explains symbol filtering and lookback hours but says nothing about the `limit` cap or the `priority` parameter's 1-2 range. Two of four parameters remain semantically opaque.

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

Purpose4/5

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

States a specific verb+resource ('Recent market news headlines') and adds source/ranking context (X/Twitter firehose, priority-ranked). However, it never distinguishes itself from the nearby siblings get_news_feed and get_opportunity_news, so an agent cannot tell which news tool to pick without opening schemas.

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

Usage Guidelines3/5

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

'Filter by symbol or lookback hours' implies the two main usage modes, so an agent can infer how to narrow results. But there is no when-to-use versus get_news_feed / get_opportunity_news, and no statement of defaults or exclusions, leaving routing to inference.

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

get_open_ordersGet open ordersA
Read-onlyIdempotent
Inspect

YOUR open (resting) Hyperliquid orders (the API key's user), for both the main wallet and the agent deposit wallet. Includes trigger orders (TP/SL) with is_trigger / trigger_price / trigger_condition — sourced from the trigger-aware upstream, so stop orders never masquerade as plain limits. Native perp and spot orders come first, then HIP-3 builder-DEX orders with their dex-prefixed symbol (xyz:TSLA) and a dex field. hip3.failed_dexes lists any DEX that could not be read (meta.quality is then "partial") — orders there may be missing; hip3.included false means no HIP-3 DEX was read. Otherwise an empty list genuinely means no resting orders. HIP-3 rows can be up to ~2 s old (shared cache). (Requires api:read.)

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations (which already declare readOnly/idempotent/non-destructive) by disclosing the upstream source ('trigger-aware upstream, so stop orders never masquerade as plain limits'), a ~2s shared-cache staleness bound on HIP-3 rows, partial-failure signaling via hip3.failed_dexes and meta.quality='partial', and the api:read auth requirement. That is exactly the kind of failure-mode and freshness context structured fields cannot carry.

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

Conciseness4/5

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

Front-loaded with the core statement, then layered with progressively finer detail (ordering, HIP-3, failure flags, staleness, auth). It is dense and sentence-long but nearly every clause carries operational meaning; a small deduction because the return-shape details are packed into a single run-on block rather than separated from the call rationale.

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

Completeness5/5

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

With no output schema and no parameters, the description must carry return-shape and failure semantics, and it does: field names (is_trigger, trigger_price, trigger_condition, dex, hip3.failed_dexes, meta.quality), ordering, partial-result conditions, and the empty-list interpretation. An agent can both decide to call it and correctly interpret a degraded response.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; nothing in the schema needs disambiguation and the description does not waste space restating emptiness. It correctly implies the implicit scope (the API key's user) rather than a caller-supplied wallet filter.

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

Purpose5/5

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

States a specific verb+resource with precision: 'YOUR open (resting) Hyperliquid orders (the API key's user)', scoped to both the main wallet and the agent deposit wallet. It also enumerates what counts as an order (limit, trigger/TP-SL, perp, spot, HIP-3 builder-DEX), which separates it cleanly from sibling reads like get_positions, get_fills, and get_orderbook.

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

Usage Guidelines3/5

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

Usage is implied rather than stated — the reader infers 'call this to see your resting orders'. The only guidance-like statements are about interpreting results ('empty list genuinely means no resting orders') and the api:read prerequisite. No sibling alternative is named (e.g., get_fills for history, get_positions for exposures), leaving the agent to infer routing.

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

get_opportunitiesGet opportunity feedA
Read-onlyIdempotent
Inspect

The Today's Market opportunity feed: ranked, evidence-backed market observations (funding extremes, unusual options flow, analyst actions, big equity moves, technical breaks, institutional positioning) refreshed every ~10 minutes — do not poll faster. view=market is the shared market-wide ranking; view=for_you re-ranks it around YOUR watchlist, tracked cases, and mandates (the API key's user); view=saved returns only the cards you saved. Each item carries an opportunity_id (mo_…) usable with get_opportunity_detail, a headline, score, magnitude, community ratings, and a price reaction (change_pct from price_reaction.baseline_as_of; price_reaction.baseline_basis says whether that baseline is published_at or first_seen_ts). Two card times: published_at = when the card first became visible in the feed (use it for 'what is new since I last checked' and for measuring outcomes); first_seen_ts = when the detector first saw the setup, which can be hours to days earlier (about 44h for technical cards). published_at is null for older cards: fall back to first_seen_ts. coverage distinguishes categories that are empty (looked, nothing today) from unavailable (the detector could not look). view=for_you backfills with market-ranked cards once your personal matches run out — by design, not a failure: each item's section says which it is (personalized vs market_fallback) and display_reason says why a personal card was chosen. (Requires api:read.)

NameRequiredDescriptionDefault
sortNore-order by detector first-seen time (first_seen_ts, not publication) or a community tally
viewNo
limitNo
tickerNoexact ticker filter, e.g. 'NVDA'
categoriesNofilter to these category lenses; omit for all
min_market_cap_usdNo
big_move_min_market_cap_usdNoBig Move market-cap floor; omit for $500M, 0 for Any
big_move_min_session_dollar_volume_usdNoBig Move session-dollar-volume floor; omit for $10M, 0 for Any

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover read-only/idempotency, and the description adds substantial behavioral context beyond them: ~10-minute refresh with explicit 'do not poll faster', backfill described as by-design with section/display_reason signals, and coverage distinguishing 'empty' from 'unavailable'. This is exactly the kind of operational nuance annotations cannot express.

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

Conciseness4/5

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

Front-loaded with the core purpose and views before diving into field semantics. It is dense and long, but with no output schema the return-field explanations (published_at, first_seen_ts, baseline_basis) earn their place.

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

Completeness5/5

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

For a complex read tool with 8 params, no output schema, and multiple enum modes, the description covers views, refresh cadence, fallback semantics, the null-published_at case, and the key return fields. An agent can call and interpret it without further help.

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

Parameters4/5

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

Schema coverage is 63% and notably the `view` param has no schema description at all, which the description compensates for thoroughly. Other params (limit, min_market_cap_usd) go undocumented in both places, keeping it below a 5.

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

Purpose5/5

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

States a specific verb+resource (ranked, evidence-backed market observations) and enumerates the observation types. The three view modes are each explained so the agent knows exactly what 'get_opportunities' returns per mode.

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

Usage Guidelines4/5

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

Clearly distinguishes view=market vs view=for_you vs view=saved and the backfill behavior, and names get_opportunity_detail as the follow-up using opportunity_id. It states a polling constraint but doesn't contrast with siblings like scan_markets or get_fired_signals, so the when-to-use-vs-alternative is incomplete.

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

get_opportunity_detailGet opportunity detailA
Read-onlyIdempotent
Inspect

One opportunity card in full: the detector's evidence trail (each claim with its source and observed_at), the invalidation conditions, an optional model-written read and notable X mentions, price history, and market stats (market cap, 52-week range, 20d MA). Cards that left the live feed are served from the archive with expired=true — treat those as historical, never as a current signal. opportunity_id comes from get_opportunities (mo_ + 32 hex). (Requires api:read.)

NameRequiredDescriptionDefault
opportunity_idYesan id from get_opportunities, e.g. mo_0123…

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds non-obvious behavior: cards missing from the live feed are served from the archive with expired=true, a semantic the agent would otherwise misread as a live signal, plus the api:read auth requirement.

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

Conciseness4/5

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

Three tight sentences, front-loaded with what the card contains, followed by the archive caveat and id provenance. The payload list is dense but each item is informative, with little waste.

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

Completeness5/5

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

With no output schema, the description carries the burden of describing return contents, and it does so richly (evidence trail, invalidation conditions, optional model read, mentions, price history, market stats). An agent knows what it will get and how to interpret the expired flag.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the pattern and an example for opportunity_id. The description only restates the provenance (from get_opportunities) and format (mo_ + 32 hex), adding marginal value over the structured field.

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

Purpose5/5

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

States a specific verb and resource and then enumerates exactly what the card contains (evidence trail with source/observed_at, invalidation conditions, model read, mentions, price history, market stats). This is clearly distinguishable from the sibling get_opportunities, which supplies the ids, and from get_opportunity_news.

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

Usage Guidelines4/5

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

Explicitly routes the caller to get_opportunities for the opportunity_id and warns to treat archived (expired=true) cards as historical rather than a current signal. It gives context but does not explicitly compare against alternatives like get_opportunity_news or evaluate_opportunity for related needs.

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

get_opportunity_newsGet an opportunity's related newsA
Read-onlyIdempotent
Inspect

News related to one Today's Market opportunity card (opportunity_id from get_opportunities: mo_ + 32 hex): the headlines and posts matched to that card's subject, with their sources and times. The response carries app_url, the card's detail screen. (Requires api:read.)

NameRequiredDescriptionDefault
opportunity_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds beyond that: the api:read scope requirement, the response payload (headlines, posts, sources, times, app_url). With no output schema, disclosing the return shape is genuinely extra value.

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

Conciseness4/5

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

Two sentences, front-loaded with what the tool returns and immediately followed by input provenance and format. The auth requirement is relegated to a parenthetical at the end but is short enough not to be wasteful.

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

Completeness4/5

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

For a one-parameter read-only tool with no output schema, the description covers resource scope, input format/provenance, return contents, and auth scope. Only minor gaps remain, such as ordering or volume of returned news and behavior for an invalid ID.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the parameter meaning, and it does: it states the ID comes from get_opportunities and repeats the 'mo_' + 32 hex format. That fully compensates for the missing schema description, though it adds no further semantics such as what happens on an unknown or malformed ID.

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

Purpose4/5

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

The description states a specific verb+resource: news matched to one Today's Market opportunity card. Scoping to a single opportunity_id implicitly separates it from get_news_feed and get_news_headlines, though it never names those siblings explicitly, so the differentiation is inferred rather than declared.

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

Usage Guidelines3/5

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

It helpfully says the opportunity_id comes from get_opportunities, which is real usage guidance for obtaining the input. It gives no guidance on when to prefer this over get_news_feed, get_news_headlines, or get_opportunity_detail, leaving the choice implicit.

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

get_opportunity_scoreboardGet opportunity scoreboardA
Read-onlyIdempotent
Inspect

Closed-loop empirical scoreboard for Today's Market opportunities and tracked Gambits: grades live and recent opportunities against their 1-sigma volatility barriers (played_out, invalidated, expired, active), reports calibrated detector-level directional edge (whether a detector is empirically a momentum continuation setup like options_unusual or a mean-reversion fade setup like funding_extreme / basis_dislocation / liquidation_cluster, with 4h win rates and average returns), cross-venue lead-lag detection latency, and Case auto-resolution counts. (Requires api:read.)

NameRequiredDescriptionDefault
categoryNooptional category filter (e.g. positioning, flow, catalysts, technical, prediction_markets)
detectorNooptional detector filter (e.g. funding_extreme, options_unusual, basis_dislocation)
window_hoursNolookback window in hours (1-720, default 72)

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/no-destructive, and the description adds the non-structured requirement 'Requires api:read' plus an enumeration of the graded outcome states (played_out, invalidated, expired, active). It still omits scale/volume and pagination characteristics, but since no output schema exists the field-level disclosure is valuable.

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

Conciseness3/5

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

The purpose is front-loaded and every clause maps to a real output section, but it is delivered as one very long, jargon-dense sentence with nested parentheticals. 'Case auto-resolution counts' is unexplained, forcing the agent to guess at what a 'Case' is.

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

Completeness4/5

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

With no output schema, the description does real work by enumerating the four report sections and the classification taxonomy (momentum continuation detectors like options_unusual vs. mean-reversion fades like funding_extreme/basis_dislocation/liquidation_cluster). Gaps remain around output shape and undefined 'Cases', but an agent knows what it will get and that it needs api:read.

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

Parameters3/5

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

Schema coverage is 100% with all three filters (category, detector, window_hours) described including examples and the 1-720 range, so the schema does the heavy lifting. The description adds no filter semantics or interaction notes (e.g., how the window applies to already-closed opportunities), keeping this at the baseline.

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

Purpose4/5

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

The description names a specific resource (an empirical scoreboard over Today's Market opportunities and tracked Gambits) and enumerates its four output areas: barrier grading, calibrated detector edge, lead-lag latency, and Case resolution counts. It is clearly a read-only analytics aggregate rather than a per-opportunity lookup like get_opportunities or get_opportunity_detail, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: the 'closed-loop empirical' framing signals this is for evaluating historical detector performance rather than fetching a live opportunity list. There is no explicit when-to-use, when-not-to-use, or pointer to the alternative tools (evaluate_opportunity, get_opportunities) an agent would otherwise weigh.

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

get_orderbookGet an order bookA
Read-onlyIdempotent
Inspect

The live Hyperliquid order book for one market (api:read): bids and asks, each level {px, sz, n} (price, size, order count), best first. symbol is a perp (BTC, HYPE), a HIP-3 market (xyz:TSLA) or a spot pair in pair-id form (@107 for HYPE/USDC). Instrument ids are bare Hyperliquid symbols (BTC, HYPE) or dex-prefixed HIP-3 symbols (xyz:TSLA) — exactly the symbol values scan_markets returns.

NameRequiredDescriptionDefault
symbolYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds genuine context beyond that: the data is 'live', the response is ordered best-first, each level carries price/size/order-count, and '(api:read)' signals the required scope.

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

Conciseness4/5

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

Two dense sentences with the purpose and return shape front-loaded; almost every clause carries information. It is slightly packed with parenthetical format detail, but nothing is wasted.

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

Completeness5/5

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

For a single-parameter read tool with no output schema, the description covers purpose, return structure, ordering, and the full range of valid symbol inputs. An agent has everything needed to call it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so thoroughly: it explains the three accepted symbol forms (perp like BTC/HYPE, HIP-3 like xyz:TSLA, spot pair-id like @107), gives examples, and ties valid values to scan_markets. This meaningfully exceeds the raw regex pattern in the schema.

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

Purpose5/5

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

States a specific verb and resource ('The live Hyperliquid order book for one market') and immediately defines scope plus return contents (bids and asks, each level {px, sz, n}, best first). This is clearly distinguishable from siblings like get_prices, get_bars, and get_live_snapshot.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is the tool for depth/liquidity inspection, and the description usefully points at scan_markets as the source of valid symbols. But it never states when to prefer this over get_prices, get_bars, or get_live_snapshot, nor any exclusions.

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

get_plan_usageGet plan, usage and limitsA
Read-onlyIdempotent
Inspect

YOUR Gambit plan, usage and limits — the call for "what's my plan usage". view=plan (default): your tier (tier, display_name), its limits (per-feature caps, e.g. how many Gambits, signals, X handles and Telegram groups you may have, monthly recommendation runs, AI-token allowance), expires_at / current_period_start / current_period_end, and pending_tier with pending_tier_effective_at when a change is scheduled. view=usage: how much of each countable limit you have used this period (meters with used vs limit, including the AI-token meter). view=tiers: the full tier catalog with prices, features and limits, to compare plans. Read-only: changing the plan is done in the app. The response carries app_url, the Usage screen. (Requires api:read.)

NameRequiredDescriptionDefault
viewNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower; the description still adds the auth requirement ('Requires api:read') and notes the response includes app_url as a deep link. It does not discuss pagination or failure modes, but for a static read that is a minor gap.

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

Conciseness4/5

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

Front-loaded with the value proposition, then segmented by 'view=' markers that scan cleanly. It is dense and long for a one-parameter tool, with some nested parenthetical detail, but almost every clause conveys distinct information.

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

Completeness5/5

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

With no output schema, the description takes on the return-value burden and does it well, naming the specific fields (tier, display_name, per-feature caps, expires_at, meters, pending_tier_effective_at, prices). An agent can decide and call correctly without further information.

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

Parameters5/5

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

Schema coverage is 0% and the only parameter is an unlabeled enum, so the description carries the full burden — and it does, explaining what each of plan/usage/tiers returns and which is the default. This is meaningfully richer than the bare enum values.

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

Purpose5/5

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

States a specific verb and resource ('your Gambit plan, usage and limits') and then enumerates the three distinct data sets the tool returns. No sibling in the list covers billing/plan/limits, so it is unambiguous.

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

Usage Guidelines4/5

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

Directly answers the agent's likely query phrasing ('the call for "what's my plan usage"') and maps each view to an intent: plan for current tier/limits, usage for consumed meters, tiers for comparison shopping. It also excludes the mutation case ('changing the plan is done in the app'), though it does not name a sibling alternative explicitly.

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

get_portfolio_performanceGet portfolio performanceA
Read-onlyIdempotent
Inspect

YOUR Hyperliquid account's performance and account facts (api:read), for wallet=main (your own wallet, default) or wallet=agent (the agent deposit wallet); the address is resolved from your token. view=portfolio (default): account value and PnL history over day / week / month / allTime, combined and perps-only (perpDay … perpAllTime) — the call for "how is my portfolio doing". view=summary: a normalized account summary across perps, HIP-3, USD spot and other spot assets. view=fees: your fee tier, maker/taker rates and recent daily volume. view=account_mode: standard | unified | portfolio_margin, with mode_source and stale. view=ledger: deposits, withdrawals and transfers (non-funding ledger updates) between start_time and end_time (epoch ms; start_time defaults to 30 days ago). Each answer names the wallet and address it read. Open positions and balances: get_positions / get_account_balances. The response carries app_url, the portfolio dashboard.

NameRequiredDescriptionDefault
viewNo
walletNo
end_timeNoledger only: epoch ms
start_timeNoledger only: epoch ms

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description still adds meaningful behavior: the address is resolved from the token rather than passed in, ledger data is restricted to non-funding updates, start_time defaults to 30 days ago, each answer names the wallet and address read, and the response carries app_url. That is rich context beyond the structured fields.

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

Conciseness4/5

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

Front-loaded with the resource and then walks the views in order; nearly every clause carries information, though the long em-dash sentence listing view=portfolio ranges is dense and could be broken up. Size is justified by a five-view discriminating tool.

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

Completeness5/5

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

For a zero-required-param, five-mode tool with no output schema, the description covers mode selection, defaults, wallet resolution, and return provenance. An agent has everything needed to pick a view and call it correctly.

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

Parameters5/5

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

Schema description coverage is only 50% (only the two timestamps are documented), but the description compensates fully: it explains all five view enum values, the meaning of wallet=main vs wallet=agent, the epoch-ms format and 30-day default for start_time/end_time. An agent can invoke this correctly without opening the schema.

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

Purpose5/5

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

States a specific verb+resource (Hyperliquid account performance/facts) and enumerates the five views with distinct semantics, so an agent knows exactly which sub-answer each view returns. It explicitly distinguishes itself from siblings by pointing to get_positions / get_account_balances for positions and balances.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance per view (e.g. view=portfolio is 'the call for "how is my portfolio doing"'), states the default view, and routes the agent to alternatives for open positions/balances. The wallet parameter's trade-off (main vs agent deposit wallet) is also spelled out.

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

get_portfolio_updatesGet portfolio updatesA
Read-onlyIdempotent
Inspect

What changed for the instruments YOU hold or watch (the API key's user): a composed feed of symbol-tagged news (with model-written 'what changed' digests where available), notable price moves, and upcoming earnings — each item saying why it matters for a holding vs a watchlist name. Call with no arguments to derive holdings automatically from your open Hyperliquid positions; pass holdings/watchlist symbol lists to control coverage explicitly (brokerage equities as bare tickers like NVDA). Only symbols and a coarse PnL direction are ever sent — no sizes or values. coverage.uncoveredInstrumentIds names requested instruments with nothing to report. (Requires api:read.)

NameRequiredDescriptionDefault
limitNo
windowNolookback window (default 24h)
holdingsNoinstrument symbols you hold; omit (with watchlist) to derive from open positions
watchlistNoinstrument symbols you watch but do not hold

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety bar is mostly covered. The description still adds real value beyond them: a privacy/data-minimization guarantee (only symbols and coarse PnL direction sent, no sizes or values), an auth requirement (api:read), and the coverage.uncoveredInstrumentIds signal for empty results.

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

Conciseness4/5

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

Front-loaded with the answer to 'what does this return,' followed by how to call it and privacy details. Dense but every sentence carries information; the parenthetical auth note and coverage field could be trimmed slightly.

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

Completeness4/5

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

With no output schema, the description steps up by describing the three feed item types and the coverage.uncoveredInstrumentIds escape hatch, which is exactly what an agent needs to interpret empty results. It stops short of explaining what the limit parameter caps or how items are ordered.

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

Parameters4/5

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

Adds genuine meaning beyond the schema: the omit-both-to-derive behavior is spelled out, holdings/watchlist semantics are contrasted ('hold' vs 'watch but do not hold'), and ticker format is specified with an example (NVDA). limit and window are left entirely to the schema, which covers window's default but not limit's intent.

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

Purpose5/5

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

States a specific verb and resource ('what changed' feed) and enumerates exactly what composes it: symbol-tagged news with model-written digests, notable price moves, upcoming earnings. The scoping to instruments the API-key user holds or watches separates it from get_news_feed and get_watchlist.

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

Usage Guidelines4/5

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

Explicitly describes two calling modes: no arguments derives holdings from open Hyperliquid positions, while passing holdings/watchlist controls coverage. It does not name the sibling alternatives (get_news_feed, get_tracking_updates, get_holdings) it should be preferred over, so the agent must infer the boundary.

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

get_positionsGet open positionsA
Read-onlyIdempotent
Inspect

YOUR open Hyperliquid perp positions (the API key's user — no address input, identity comes from the key), for both the main wallet and the agent deposit wallet (null when no agent wallet; an {alias_of_main_wallet: true} marker when the agent trades from the main wallet itself). Each position carries side, size, entry price, position value, unrealized PnL, ROE, leverage, liquidation price (null when none), and margin used. Native perp positions come first, then HIP-3 builder-DEX positions with their dex-prefixed symbol (xyz:TSLA) and a dex field. hip3.failed_dexes lists any DEX that could not be read (meta.quality is then "partial") — positions there may be missing; hip3.included false means no HIP-3 DEX was read. Otherwise an empty list genuinely means no open positions. HIP-3 rows can be up to ~2 s old (shared cache). (Requires api:read.)

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses the main-vs-agent wallet shape, null agent wallet semantics, the alias_of_main_wallet marker, HIP-3 cache staleness of ~2s, partial-quality failure via hip3.failed_dexes, and the api:read auth requirement. This is exactly the extra context annotations cannot carry.

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

Conciseness3/5

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

The core statement is front-loaded, but the body is a dense run of nested parentheticals covering wallet shape, ordering, HIP-3 failure modes, and cache freshness. Most details are useful, yet the packaging makes it harder to scan than it needs to be.

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

Completeness5/5

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

There is no output schema, so the description carries the full burden of explaining returns, and it does: per-position fields, native-then-HIP-3 ordering, dex-prefixed symbols, and how to interpret empty versus partial results. An agent can call this correctly and interpret the response from the description alone.

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

Parameters4/5

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

Zero parameters, so baseline is 4. The description still adds genuine value by explaining there is deliberately no address argument and that identity is derived from the key, which prevents an agent from hunting for a nonexistent filter.

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

Purpose5/5

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

States a specific verb and resource (open Hyperliquid perp positions) and immediately scopes it to the API key's own user with no address input, which separates it from holdings/balances style siblings. It also enumerates the fields returned, so an agent knows exactly what it gets without opening anything else.

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

Usage Guidelines4/5

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

Clear context is given: identity comes from the key, no address parameter, and a note that an empty list genuinely means no positions. It does not explicitly route the agent away from get_holdings or get_open_orders, so the boundary with those siblings is implied rather than stated.

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

get_preferencesGet my preferencesA
Read-onlyIdempotent
Inspect

One of YOUR preference sets, by kind. kind=trading_profile: your onboarding-quiz profile — raw_answers (q1-q6), dna_code and archetype (name, tagline), derived_params (the agent's risk caps and style the answers set: gross exposure, max position %, max open positions, take-profit style, auto-execute readiness lane), agent_mode (co_pilot | auto_execute) and chat_execution_enabled; 404 means no profile yet. These are read-only here: the quiz, the caps, agent mode and chat execution are changed only in the app. kind=market_brief: how YOUR Market Brief is drawn — hidden_rows per category, crypto_rows, display (timeframe, view, layout), and the hidden opportunity subjects / asset classes and opportunity_hyperliquid_only. kind=trade_routing: where an equity order from the trade ticket goes by default — default_destination (hyperliquid | brokerage) and per-symbol symbol_overrides; it preselects the ticket only, it never routes or places an order. Change market_brief or trade_routing with update_preferences. The response carries app_url, the Settings tab where that set is edited. (Requires api:read.)

NameRequiredDescriptionDefault
kindYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses that trading_profile returns 404 when no profile exists, that the response carries app_url pointing at the editing Settings tab, and that the call requires the api:read scope. These are exactly the operational facts an agent needs and none are derivable from annotations.

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

Conciseness4/5

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

It is front-loaded with the core purpose and every clause carries real information, but the body is one dense run-on with heavy parenthetical nesting that is harder to scan than a per-kind breakdown would be. Slightly trimmed formatting would make the same content easier to use.

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

Completeness5/5

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

There is no output schema, yet the description fully characterizes the return payload for each kind plus the app_url field and the 404 case, and it flags the auth requirement. An agent can call this correctly and interpret the result with no further information.

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

Parameters5/5

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

Schema coverage is 0% and the single parameter is an enum, so the description carries the full burden — and it does, defining each enum value's meaning and payload in depth (raw_answers q1-q6, dna_code/archetype, derived_params such as gross exposure and max position %, hidden_rows per category, default_destination and symbol_overrides). This adds substantial meaning well beyond the bare enum list.

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

Purpose5/5

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

The description opens with a specific verb and resource ('One of YOUR preference sets, by kind') and then enumerates the three distinct kinds with the concrete fields each returns, so an agent can tell exactly what it is fetching. It is clearly separated from the sibling update_preferences, which is named for the write path.

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

Usage Guidelines5/5

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

Explicitly states the read-only boundary ('These are read-only here: the quiz, the caps, agent mode and chat execution are changed only in the app') and names update_preferences as the alternative for two of the three kinds. It also pre-empts a likely misuse of trade_routing by clarifying 'it preselects the ticket only, it never routes or places an order.'

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

get_pricesGet pricesA
Read-onlyIdempotent
Inspect

Current mid prices for Hyperliquid native perps, spot assets and HIP-3 builder-DEX perps. Spot pairs are resolved to BASE/QUOTE display names (e.g. HYPE/USDC), with data.spot_pairs mapping each back to its native HL pair id (e.g. @107 — needed for raw HL interactions like spot order asset indices). HIP-3 perps are keyed by their dex-prefixed symbol (e.g. xyz:TSLA); data.hip3.failed_dexes lists any DEX whose prices could not be read, and a requested symbol on such a DEX is listed in unavailable_symbols (price unknown right now), not missing_symbols (no such symbol). WITHOUT symbols this returns ~850 entries — prefer scan_markets for discovery and pass symbols here for targeted lookups (perp symbols like BTC, spot pairs like HYPE/USDC, or HIP-3 symbols like xyz:TSLA). (Requires api:read.)

NameRequiredDescriptionDefault
symbolsNosymbols to return, as an array (['BTC','HYPE']) or a comma-separated string ('BTC,ETH,HYPE'); omit for all

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial context beyond them: the api:read auth requirement, the ~850-entry default payload size, and nuanced failure semantics — failed_dexes versus unavailable_symbols vs missing_symbols. That distinction prevents an agent from misinterpreting a transient read failure as a nonexistent symbol.

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

Conciseness4/5

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

Dense and front-loaded — the scope comes first, then symbol formats, then the guidance to use scan_markets. Every clause carries information, though the single unbroken paragraph packs a lot (pair-id mapping, HIP-3 keys, failure taxonomy) and could be easier to scan.

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

Completeness5/5

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

No output schema exists, so the description compensates by naming the relevant return fields (data.spot_pairs, data.hip3.failed_dexes, unavailable_symbols, missing_symbols). For a one-parameter read tool, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and already documents the string-or-array form, so the description is not carrying the burden alone. It still adds meaning the schema lacks: which symbol notations are accepted per market type and how spot pairs map back to native HL pair ids via data.spot_pairs.

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

Purpose5/5

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

States a specific verb and resource ('Current mid prices') and enumerates the exact asset classes covered: Hyperliquid native perps, spot assets, and HIP-3 builder-DEX perps. It is clearly distinguishable from siblings like scan_markets and search_symbols, which it names explicitly.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'WITHOUT symbols this returns ~850 entries — prefer scan_markets for discovery and pass symbols here for targeted lookups.' It also spells out the acceptable symbol formats (BTC, HYPE/USDC, xyz:TSLA), so the agent knows both when to call it and how.

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

get_sector_radarGet sector or mandate radarA
Read-onlyIdempotent
Inspect

Shareable radar for a standing mandate or a symbol list (api:read). Pass mandate_id to read YOUR saved Gambit (its name, monitor interval, and symbol whitelist) or preset=ai_memory_compute (or a comma-separated symbols list such as xyz:SKHX,xyz:SKHY,MU) for the memory, optical, and AI-compute watch. Returns live 24/7 quote and perp metrics (mark, index, basis_bps, funding_rate, change_24h_pct, volume_24h), cross-DEX and sibling spreads (xyz:SNDK vs io:SNDK, xyz:SKHX vs xyz:SKHY), your open Gambits on those symbols, and the Ornn OCPI/OTPI snapshot (Tesseract clearing is omitted unless TESSERACT_REFERENCE_FEED_ENABLED is on). This read does not trade.

NameRequiredDescriptionDefault
presetNoai_memory_compute when symbols and mandate_id are omitted
symbolsNocomma-separated symbols, e.g. xyz:SNDK,io:SNDK
mandate_idNostanding mandate id; reads YOUR radar

TDQS

A4/5.0
Behavior4/5

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

Annotations already carry readOnly/idempotent/non-destructive/openWorld, so 'this read does not trade' is largely redundant. The description does add genuinely new behavioral context: the payload is a composite (live 24/7 metrics, cross-DEX sibling spreads, your open Gambits on those symbols, OCPI/OTPI snapshot) and Tesseract clearing is conditionally omitted unless TESSERACT_REFERENCE_FEED_ENABLED is on — a real data-availability caveat not expressible in annotations.

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

Conciseness4/5

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

Front-loaded with purpose and invocation mode before the long return-value enumeration, and the enumeration is justified because there is no output schema. It is dense to the point of being a run-on, and 'This read does not trade' repeats what readOnlyHint already says.

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

Completeness5/5

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

With no output schema, the description fully covers what comes back (quote/perp fields, cross-DEX spreads, open Gambits, OCPI/OTPI) and flags the feature-flagged omission, so an agent knows both how to call it and what to expect. The only residual gap is the preset-vs-symbols routing ambiguity noted above.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3, and the description does enrich mandate_id (reads YOUR saved Gambit's name, interval, whitelist). However it muddies the schema by writing 'preset=ai_memory_compute (or a comma-separated symbols list such as xyz:SKHX,...)', which implies the symbol list is passed through preset when the schema has a distinct symbols parameter (maxLength 512) — an ambiguity an agent must resolve from the schema.

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

Purpose4/5

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

States a concrete resource (a 'shareable radar' over a mandate or symbol list) plus the (api:read) scope, which is specific enough to distinguish it from plain quote tools like get_live_snapshot or get_prices. It does not explicitly name a sibling it is not, so differentiation is inferred from the dual-mode framing rather than stated.

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

Usage Guidelines4/5

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

Gives clear routing: use mandate_id to read your saved Gambit, or preset=ai_memory_compute for the memory/optical/AI-compute watch. It states the positive conditions for each mode but never says when to prefer this over get_mandate, get_live_snapshot, or get_sector-style siblings, nor any exclusions.

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

get_sentimentGet sentiment indexesA
Read-onlyIdempotent
Inspect

Latest sentiment index readings: CNN Fear & Greed, Crypto Fear & Greed. Good opening move for a market-context check. (Requires api:read.)

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world, and non-destructive behavior, so the description does not need to restate safety traits. It adds useful context beyond annotations by stating the required scope '(Requires api:read.)' and indicating that readings are 'latest'.

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

Conciseness5/5

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

The description is compact, front-loaded with the core data sources, and every phrase contributes either purpose, usage context, or authorization requirement. There is no wasted wording.

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

Completeness4/5

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

For a simple parameterless read tool with rich safety annotations, the description is nearly complete: it identifies the indexes, gives a usage context, and states the required API scope. It does not describe the return shape, which is a minor gap given there is no output schema.

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

Parameters4/5

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

This tool takes zero parameters, so there are no parameter semantics to document. Per the baseline rule for parameterless tools, a 4 is appropriate.

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

Purpose4/5

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

The description clearly states the resource and even names the two sentiment indexes returned, so the tool's purpose is easy to identify. It does not explicitly contrast itself with sibling market-context tools such as get_market_regime or get_market_brief, so it stops short of full sibling differentiation.

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

Usage Guidelines4/5

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

The phrase 'Good opening move for a market-context check' gives a clear usage context for when to call this tool. It does not name alternatives or describe when not to use it, but the intended use case is explicit enough.

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

get_setup_statusGet account setup statusA
Read-onlyIdempotent
Inspect

What is still unfinished on YOUR account (requires api:account). Call this after connecting, and poll it after the user finishes a browser step. The REST body is { success, data }; read data.next, data.agent_setup_url, data.onboarding_completed, data.wallet_linked, data.trading_profile, data.agent_approved, and data.brokerage_connected. data.next lists the remaining steps. open_agent_setup.url is the page where the user signs the Hyperliquid agent approval and the app applies the trading profile from the survey — you cannot sign that approval yourself. connect_brokerage is optional. Stripe billing is not on this surface.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds meaningful context beyond them: the required api:account scope, the REST response shape ({ success, data }), the specific data fields to read, and the crucial constraint that the user — not the agent — must sign the Hyperliquid agent approval. That last point is a real behavioral limit an agent must know before calling.

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

Conciseness4/5

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

The purpose and the 'call/poll after' instruction are front-loaded, and the later sentences carry load: because there is no output schema, enumerating the data.* fields and the special open_agent_setup.url semantics is necessary rather than padding. It is dense but nearly every sentence earns its place.

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

Completeness5/5

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

With no output schema, the description takes on the return-value burden and does so by listing the key data fields (next, onboarding_completed, wallet_linked, trading_profile, agent_approved, brokerage_connected) plus the special-case open_agent_setup.url. For a zero-parameter status-read tool, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter syntax to document and the baseline is 4. The description correctly spends its words elsewhere rather than inventing parameter guidance.

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

Purpose4/5

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

The description states a specific check — what remains unfinished on the account setup — and the title 'Get account setup status' pins the resource precisely. It distinguishes itself from siblings like submit_onboarding or start_brokerage_connect by framing the tool as a read of onboarding progress. The opening phrasing is stylistic ('What is still unfinished on YOUR account') but the intent is unambiguous.

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

Usage Guidelines4/5

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

Gives concrete timing guidance: 'Call this after connecting, and poll it after the user finishes a browser step.' It also marks connect_brokerage as optional and states that Stripe billing is not on this surface, which is a useful scope exclusion. It stops short of naming a specific alternative tool for the excluded billing flow, so it is not a full when/when-not/alternatives treatment.

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

get_stock_orderGet a stock order's statusA
Read-onlyIdempotent
Inspect

The current status of one order at YOUR own linked brokerage (requires the api:stock_trade scope). Pass the account_id and the order_id that confirm_stock_order returned. Returns order_id, status (pending | accepted | partially_filled | filled | rejected | cancelled | unknown), filled_units and avg_fill_price. Read only: it never changes the order.

NameRequiredDescriptionDefault
order_idYes
account_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnly/idempotent/destructive hints, but the description adds genuinely new behavioral context: the required api:stock_trade scope and confirmation that it never mutates the order. The enumerated status values also set expectations for return semantics.

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

Conciseness4/5

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

Front-loads purpose, then inputs, returns, and safety in four tight sentences with no wasted preamble. The final 'Read only' clause mildly restates the readOnlyHint annotation, slightly preferring redundancy for reader safety.

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

Completeness5/5

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

With no output schema, the description explicitly names the returned fields (order_id, status, filled_units, avg_fill_price) and the status enum, and adds the auth scope. For a two-param read-only status lookup, nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains the provenance of order_id (from confirm_stock_order) which is useful, but leaves account_id's meaning under-specified ('your own linked brokerage' only implies it). Partial compensation for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource (get the current status of ONE order) plus scope ('at YOUR own linked brokerage'), which cleanly separates it from the plural sibling get_open_orders. An agent can identify exactly what this returns without opening the schema.

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

Usage Guidelines4/5

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

Gives a concrete operational link: 'Pass the account_id and the order_id that confirm_stock_order returned', which tells the agent the upstream tool that produces its inputs. It lacks an explicit exclusion against alternatives like get_open_orders, but the workflow context is clear.

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

get_symbol_researchGet symbol researchA
Read-onlyIdempotent
Inspect

The Research page's reads for one symbol, by view. snapshot (default): the stored fundamentals and trading statistics for an equity (Databento). bars: OHLCV bars for the chart (interval 1m | 5m | 15m | 30m | 1h | 1d | 1w, optional start / end ISO timestamps and max_points); status pending (HTTP 202) means the series is still being prepared — retry shortly. return: the return between two timestamps — venue reference (US equities) or hyperliquid (perps, bare or dex-prefixed), start and end timezone-aware ISO timestamps with start < end <= now. trade_baseline: the exact last trade at or before observed_at (US equities). context: the research context sections Gambit assembles for the symbol (price action, flows, news and the providers behind each; interval and window as for bars). relationship_profile: the curated relationships Gambit uses to match news to this symbol (same exposure, entity names, cross-listings, topics, with evidence). The same for every reader. The response carries app_url, the Research page for the symbol. (Requires api:read.)

NameRequiredDescriptionDefault
endNoISO timestamp: bars, context; REQUIRED for return
viewNo
startNoISO timestamp: bars, context; REQUIRED for return
venueNoREQUIRED for return
symbolYes
intervalNobars and context
max_pointsNobars and context
observed_atNoREQUIRED for trade_baseline: timezone-aware ISO timestamp

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, but the description adds substantive context: the HTTP 202 'pending' retry semantics for bars, the api:read auth requirement, 'same for every reader', and that the response carries app_url. These add genuine value beyond the structured flags.

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

Conciseness3/5

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

The content is dense and earns much of its space, but it's delivered as one long run-on paragraph with no structural breaks between views, and phrases like 'The same for every reader' are opaque. Front-loading the overview is good, but per-view formatting would improve scanability.

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

Completeness4/5

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

No output schema exists, and the description compensates by describing the return payload per view and mentioning the app_url field. For a complex multi-view dispatch tool it's mostly complete, though the 'same for every reader' phrasing and lack of any response-shape detail leave minor gaps.

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

Parameters5/5

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

With 75% schema coverage, the description still goes well beyond it: it enumerates the interval options, explains that start/end are ISO timestamps with start < end <= now, clarifies venue reference (US equities) vs hyperliquid (perps, bare or dex-prefixed), and notes observed_at as timezone-aware. This meaningfully disambiguates the enum-driven dispatch.

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

Purpose4/5

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

The description states it returns the Research page's reads for one symbol, then enumerates each view (snapshot, bars, return, trade_baseline, context, relationship_profile) with a concrete description of what each returns. This is specific verb+resource, though it doesn't name siblings like get_bars or get_live_snapshot that an agent might otherwise confuse it with.

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

Usage Guidelines4/5

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

The per-view descriptions give clear context for which view to select (e.g., bars for chart OHLCV, snapshot as the default, trade_baseline for the last trade at or before observed_at), and the required param conditions are noted. It lacks explicit 'use X instead' routing to sibling tools, keeping it below a 5.

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

get_tracking_updatesGet Gambit tracking updatesA
Read-onlyIdempotent
Inspect

What changed across ALL of YOUR Gambits, newest first — the call for "what changed on my Gambits". Each item names case_id, case_title, case_state, monitoring_status and occurred_at, and is one of two kinds. kind=opportunity: Gambit captured a market opportunity for that Gambit; entry.source_snapshot carries the public headline, detail, evidence and source_refs, entry.captured_price the price at capture, and entry.historical true marks context from before tracking started. kind=judgment: Gambit reassessed the Gambit; judgment.trigger_kind says why (creation | refresh | shock | chat | manual), judgment.update_category is news or assessment, judgment.material true means the stance or conviction changed, judgment.judgment_before / judgment_after are the read before and after, judgment.delta_summary says what changed and why, and judgment.evidence_refs / captured_price / created_at record when and on what. A judgment is Gambit's read of the Gambit for YOUR account: stance (recommend | watch | stand_aside), conviction (high | medium | low), summary (the written view), changes_if (what would change it), evidence_refs, user_reported_context (things you told Gambit that shaped it) and as_of. Page with limit (1-100, default 20) and the next_cursor from the previous page. include_gambit_changes (default false) also returns the changes in Gambit's view of the tickers you follow (your live Gambits' assets, and the tickers you have read with get_gambit by symbol and mark_seen true that none of your Gambits is about; a live Gambit is open or watching with tracking on, and a Gambit on the ticker in any other state, including stopped, dismissed, executed or expired, ends the follow) since you last looked: Gambit's view is ONE shared, versioned view per ticker: the same view for every user, with a new version only when Gambit's view changes. Reading by symbol works for any ticker Gambit covers, a Hyperliquid listing or a US stock, even when you have no Gambit on it. gambit_changes is { items, has_more }. Each item has subject_id, display_symbol, version, as_of, headline, first_look, change_lines (what changed and why) and cause_items (the sources behind it), newest first. first_look true means you follow the ticker but never marked it seen (a get_gambit read by symbol with mark_seen true, or opening its Gambit in the app): its changes count from when you started following it, not from a last look, and they come back on every call until it is marked seen; do not call them new. has_more true means older changes were left out. With it the answer is { tracking_updates, gambit_changes }; when the Gambit changes read fails, gambit_changes is null and gambit_changes_error says why. Without it the answer is the tracking updates alone. The response carries app_url, the Tracking screen. (Requires api:read.)

NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous page
include_gambit_changesNodefault false; true also returns gambit_changes for the tickers you follow

TDQS

A4.6/5.0
Behavior5/5

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

Annotations establish read-only/idempotent/non-destructive behavior, and the description adds substantial context beyond them: pagination, response shapes, first_look repetition until marked seen, null gambit_changes with an error field, and api:read authorization.

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

Conciseness3/5

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

The purpose is front-loaded and most details are useful because there is no output schema, but the description is a single dense paragraph with long semicolon-heavy clauses. It is hard to scan and could be organized into clearer sections.

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

Completeness5/5

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

For a complex tool with no output schema, the description covers item kinds, field meanings, pagination, optional gambit_changes behavior, failure handling, and auth requirements. Little an agent needs in order to call it correctly is missing.

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

Parameters5/5

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

The schema documents cursor and include_gambit_changes, but the description adds the missing default for limit (20), restates the 1-100 range, and thoroughly explains the semantics of include_gambit_changes, first_look, and has_more.

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

Purpose5/5

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

Opens with a specific verb, resource, and scope: what changed across all of the user's Gambits, newest first. The phrase 'the call for what changed on my Gambits' makes the tool's role immediately distinguishable from get_gambit and get_gambit_history.

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

Usage Guidelines4/5

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

Gives a clear primary use case and explains when include_gambit_changes should be used, including what counts as a followed ticker. It does not explicitly name an alternative sibling or state when not to use this tool, so it falls short of full when/when-not guidance.

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

get_walletsGet my walletsA
Read-onlyIdempotent
Inspect

YOUR wallets and the agent's approval state (api:read). view=identity (default): main_wallet_address (your own wallet, W1), privy_wallet_address (the agent deposit wallet, W2, which holds the agent's Hyperliquid funds), hl_api_wallet_address (the Hyperliquid API signer the agent trades with) and hl_approval_verified (whether you have approved that signer on Hyperliquid). Nulls mean that wallet is not set up yet. view=agent_wallet: the agent wallet record with approval re-checked against Hyperliquid now, plus created_at and is_rotation. view=balance: the agent deposit wallet's Hyperliquid spot balances and perps account (margin, positions). view=account_mode: its account mode (standard | unified | portfolio_margin). Addresses and state only — never keys. A 404 means no agent wallet yet (setup happens in the app). The response carries app_url, Settings → Addresses.

NameRequiredDescriptionDefault
viewNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: nulls mean the wallet isn't set up, a 404 means no agent wallet yet (setup is in the app), view=agent_wallet re-checks approval against Hyperliquid at call time, and the tool never returns keys. That is exactly the error/null/auth context annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with the core purpose, then scannable per-view sentences; nearly every clause carries information. Minor deductions for a long run-on opening sentence and the fragmentary trailing 'The response carries app_url, Settings → Addresses.'

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

Completeness5/5

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

With no output schema, the description fully specifies the return shape per view (identity fields, agent_wallet record plus created_at/is_rotation, balances and perps account, account mode) along with null and 404 semantics. An agent has everything needed to call and interpret it.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden — and it does, defining all four enum values, the default, and what each returns. No parameter is left ambiguous.

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

Purpose4/5

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

States a specific resource and scope ('YOUR wallets and the agent's approval state') and enumerates what each view returns, so the agent knows exactly what comes back. It does not explicitly distinguish itself from near-siblings like get_account_balances or whoami, which is the only thing keeping it from a 5.

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

Usage Guidelines4/5

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

Documents each view value (identity, agent_wallet, balance, account_mode) with enough detail that an agent can pick the right one, and labels identity as the default. It does not name alternative tools for overlapping needs (e.g., account balances elsewhere), so it stops short of explicit when-not guidance.

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

get_watchlistGet my watchlistA
Read-onlyIdempotent
Inspect

YOUR starred symbols (the watchlist the trade page's star toggles keep): each a canonical market id — a perp ticker (BTC), a spot pair (PURR/USDC), a HIP-3 symbol (xyz:TSLA) or a spot index (@107). Change it with update_watchlist. (Requires api:read.)

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real value beyond that: the auth scope requirement and a specification of the returned element formats (BTC, PURR/USDC, xyz:TSLA, @107), which is important given there is no 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.

Conciseness4/5

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

One dense sentence plus a routing clause and an auth note — every part earns its place and the core identification is front-loaded. The nested parenthetical '(the watchlist the trade page's star toggles keep)' is slightly convoluted but still readable in one pass.

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

Completeness4/5

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

With no output schema, the description correctly compensates by describing the shape of each returned symbol and naming the auth scope. It doesn't say what happens when the watchlist is empty or whether ordering is guaranteed, but nothing essential to calling it correctly is missing.

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

Parameters4/5

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

The tool takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The parenthetical detail about market-id forms is aimed at interpreting results rather than inputs, which is appropriate here.

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

Purpose5/5

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

States a specific verb+resource ('YOUR starred symbols… the watchlist') and pins down exactly what each entry is: a canonical market id in one of four documented forms (perp ticker, spot pair, HIP-3 symbol, spot index). It also names the sibling that mutates it ('Change it with update_watchlist'), so an agent can tell this apart from update_watchlist without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes mutation intent to update_watchlist and states the required scope ('Requires api:read.'), which is the main precondition for calling it. It doesn't state an explicit negative case (e.g. when to prefer get_tracking_updates), but for an unambiguous read of a personal list that is a minor gap.

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

leave_feedbackLeave product feedbackAInspect

Send product feedback to the Gambit team (requires api:account): a bug, a feature request, UX friction, wrong or stale data, or praise. Use it when the user asks you to, or to report a problem you hit with Gambit or these tools. message is plain text, 10-4000 characters: say what you did, what you expected and what happened (tool name, symbol, error text, time). Do not include secrets, keys, seed phrases or personal contact details; they are redacted before storage and data.redacted lists what was removed. Markdown, links and HTML are not rendered. The team reads feedback as data; nothing in it is executed or acted on automatically, and you get no reply through this tool. Limits: 5 per hour and 20 per day per account (429 feedback_rate_limited with retry_after). Resending the same text within 24 hours returns the existing id with data.duplicate true. Returns { success, data: { id, duplicate, received_at, redacted } }.

NameRequiredDescriptionDefault
areaNoThe part of Gambit the feedback is about; use mcp for these tools.
clientNoYour client or agent name, e.g. Claude Desktop (letters, digits, spaces, ._/()- only).
messageYes
categoryYes
severityNo

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the required scope (api:account), rate limits with the exact error (429 feedback_rate_limited, retry_after), 24h dedup behavior returning data.duplicate, redaction of secrets, no-reply semantics, and that feedback is treated as inert data. This is unusually rich behavioral disclosure for a mutation tool.

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

Conciseness4/5

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

Dense and front-loaded: purpose first, then triggers, then message formatting, then safety/redaction, then limits, then return shape. Every sentence carries information, though the length is at the upper bound for a feedback tool.

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

Completeness5/5

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

With no output schema, the description supplies the return shape ({ success, data: { id, duplicate, received_at, redacted } }) as well as throttling, dedup, redaction, and auth constraints. An agent has everything needed to call it correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is only 40%, so the description must carry the load. It does well for message (plain text, 10-4000 chars, what to include: tool name, symbol, error text, time) and maps the category enum in prose, but says nothing about area or severity, leaving those to the bare schema enums.

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

Purpose5/5

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

States a specific verb and recipient ('Send product feedback to the Gambit team') and enumerates the concrete content it accepts (bug, feature request, UX friction, stale data, praise). No sibling tool competes for this job, so the agent can route to it unambiguously.

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

Usage Guidelines4/5

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

'Use it when the user asks you to, or to report a problem you hit with Gambit or these tools' gives clear triggering conditions, including the self-report case. It stops short of naming exclusions or alternatives, but none exist among the siblings.

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

list_brokeragesList my linked brokeragesA
Read-onlyIdempotent
Inspect

YOUR brokerages linked to Gambit through SnapTrade (requires api:portfolio). connected is true when any link is active; connections lists each link: id (pass it to unlink_brokerage), brokerageName, brokerageSlug, disabled (the link needs a re-login at the broker), brokerCanTrade and canTrade (whether that link can place orders; this tool only reads, and stock orders go only through propose_stock_order and confirm_stock_order, which need the api:stock_trade scope and are admin-only and off by default). Holdings and cash: get_holdings. Link a new brokerage: start_brokerage_connect.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior, but the description adds the required api:portfolio scope, explains connected/connections semantics, defines disabled and canTrade fields, and warns that order placement is out of scope. This is rich context beyond structured fields.

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

Conciseness4/5

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

The description is front-loaded with the tool's purpose and packs useful routing and field semantics into a compact block. It is somewhat dense with parenthetical asides, but almost every clause earns its place by clarifying behavior or alternatives.

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

Completeness5/5

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

With no output schema, the description compensates by explaining the returned shape: connected, connections, id, brokerageName, brokerageSlug, disabled, brokerCanTrade, and canTrade. It also supplies the relevant cross-tool routing and permission context, so an agent has what it needs to call and interpret the tool.

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

Parameters4/5

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

The tool takes zero parameters, so the schema provides no parameter descriptions to enhance. The description appropriately focuses on return-value semantics instead. Baseline for zero parameters is 4.

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

Purpose5/5

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

States a specific verb and resource — listing the user's linked brokerages via SnapTrade — and distinguishes itself from related tools like get_holdings, start_brokerage_connect, and unlink_brokerage. An agent can identify the tool's scope without opening the schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: holdings/cash go to get_holdings, new links to start_brokerage_connect, and unlinking uses the returned id. It also clarifies that stock orders must go through propose_stock_order and confirm_stock_order, not this tool.

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

list_conversationsList my agent conversationsA
Read-onlyIdempotent
Inspect

YOUR conversations with your Gambit agent, newest activity first (requires api:chat). Each: id (pass it as conversation_id to get_conversation / manage_conversation), title, source (web = the app's chat, api = ask_gambit_agent threads, telegram), symbol, mandate_id / case_id when it is about one saved Gambit or Gambit, category, pinned_at, created_at, updated_at, archived_at. source narrows to one surface; include_archived adds archived ones. At most limit rows (1-200, default 50); truncated is true when more exist.

NameRequiredDescriptionDefault
limitNo
sourceNo
include_archivedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower; the description still adds real behavior: the api:chat scope requirement, newest-first ordering, the default row cap, and the 'truncated is true when more exist' signal. It does not mention pagination cursors or latency, but the disclosed traits are substantive.

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

Conciseness4/5

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

Dense single paragraph that front-loads scope, ordering, and auth before the field list, with no filler sentences. The enumerated return fields are long but each one is load-bearing since there is no output schema.

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

Completeness5/5

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

With no output schema, the description documents the return shape field by field (id, title, source, symbol, mandate_id/case_id, category, timestamps) and explains the truncation flag, which is exactly what an agent needs to call and consume this tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, so the description must carry the full burden and does: limit is bounded 1-200 with a default of 50, source narrows to a single surface (enum values web/api/telegram are defined in the schema), and include_archived adds archived conversations. Every parameter has meaning beyond its name and type.

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

Purpose5/5

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

States a specific verb+resource with ownership scope ('YOUR conversations with your Gambit agent'), ordering (newest activity first), and an auth requirement. It distinguishes itself from get_conversation/manage_conversation by explaining that the returned id feeds those tools.

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

Usage Guidelines4/5

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

Explains how each parameter selects behavior (source narrows to one surface, include_archived adds archived rows, limit caps rows) and routes follow-up calls to get_conversation/manage_conversation. It stops short of an explicit 'use this instead of X when Y' exclusion, so it is clear context rather than full when/when-not guidance.

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

list_gambitsList my GambitsA
Read-onlyIdempotent
Inspect

YOUR Gambits (the API key's user): each situation you track in Gambit, with what Gambit is watching and what it last found. Each row: id (pass it as case_id to get_gambit / get_gambit_history), title, state (open | watching | executed | dismissed | invalidated | played_out | expired), instrument_id and participants (what the Gambit is about), direction / expression_kind / setup_family when it tracks one trade expression, monitoring_status (active | paused), update_categories (news, market_activity, assessment) and monitor_interval_minutes (what is watched and how often), monitor_last_checked_at and monitor_last_result (the newest monitoring pass: status no_change | material_change | degraded, with per-source coverage), latest_observation (the newest news item or post attributed to it, with why_now — attention, not verified evidence), current_judgment (Gambit's current read) and judgment_count (how many assessments exist), mandate_id / mandate_links (the saved Gambits it belongs to), opportunity_entry_count and opportunity_latest_entry_at (captured market opportunities), and created_at / updated_at / last_evaluated_at. A judgment is Gambit's read of the Gambit for YOUR account: stance (recommend | watch | stand_aside), conviction (high | medium | low), summary (the written view), changes_if (what would change it), evidence_refs, user_reported_context (things you told Gambit that shaped it) and as_of. Paginate with limit (1-100, default 100) and offset. The response carries app_url, the Tracking screen. (Requires api:read.)

NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds real behavioral context: the api:read scope requirement, the default page size of 100, that the response carries app_url, and the important caveat that latest_observation/why_now is 'attention, not verified evidence'. The monitoring freshness fields (monitor_last_checked_at, status enum including 'degraded') further signal staleness behavior. It does not discuss rate limits or ordering of results.

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

Conciseness3/5

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

Purpose is front-loaded in the first clause, which is good, but the body is one enormous semicolon-and-slash-delimited run-on enumerating roughly twenty fields. Because no output schema exists, the field dictionary does earn its place, but the density makes it hard to scan and a bulleted or grouped structure would carry the same information far better.

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

Completeness5/5

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

With only two optional parameters, no output schema, and 0% schema description coverage, this description is the sole source of return-shape information and it delivers: field-by-field meanings, enum values, nested judgment structure, auth requirement, and pagination. Nothing an agent needs to decide to call it or interpret the result is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry parameter meaning, and it does: limit is given range and a default of 100 that the schema does not state, and offset is identified as the pagination counterpart. Offset semantics beyond 'paginate' (e.g., ordering, whether it is row- or page-based) are left unstated.

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

Purpose4/5

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

States the resource precisely and scopes it to the API key's own user ('YOUR Gambits'), which distinguishes it from any account-wide listing. It also names the sibling it feeds into ('pass it as case_id to get_gambit / get_gambit_history'), implicitly separating list-from-detail. It never explicitly contrasts itself with get_gambit or list_mandates, so it stops short of a 5.

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

Usage Guidelines4/5

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

The 'id (pass it as case_id to get_gambit / get_gambit_history)' instruction gives a concrete follow-up workflow, and 'Requires api:read' states a prerequisite. Pagination guidance ('limit (1-100, default 100) and offset') tells the agent how to page. No explicit when-not-to-use or alternative-listing guidance, so 4 rather than 5.

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

list_mandatesList saved GambitsA
Read-onlyIdempotent
Inspect

YOUR saved Gambits (mandates): standing instructions, in your own words, that tell Gambit what to watch for you. status filters to active | draft | paused | superseded | all (default all). Each: id (pass it as mandate_id to get_mandate), title, mandate_text (your own instruction), status and effective_status (the status after starts_at / expires_at apply), autonomy_level, policy_delta (your risk bounds and preferences for it), metadata, monitor_interval_minutes and monitor_last_evaluated_at (how often it is checked and when it last was), starts_at / expires_at, supersedes / superseded_by (edit lineage: an active saved Gambit is never edited in place; a successor replaces it), origin and authority, and created_at / updated_at. Only saved Gambits you created and confirmed are listed. What they found: get_mandate_activity. The response carries app_url, the screen where they are managed. (Requires api:read.)

NameRequiredDescriptionDefault
statusNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the api:read scope requirement, the default 'all' filter, the restriction to self-created and confirmed items, and the edit-lineage rule that an active saved Gambit is never edited in place. It omits any pagination or result-size behavior.

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

Conciseness3/5

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

Purpose and filter semantics are front-loaded, which is good, but the long mid-sentence catalog of returned fields is a dense run-on that is hard to scan. Because there is no output schema the field inventory earns some of its place, but it could be structured far more cleanly.

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

Completeness4/5

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

With no output schema, the description takes on the burden of describing the return payload, and it does so thoroughly (id, status vs effective_status, policy_delta, lineage fields, app_url). The remaining gaps are pagination/limits and the Gambit-vs-mandate distinction against list_gambits.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load, and it does: it names every enum value (active | draft | paused | superseded | all) and states the default 'all'. That is exactly the semantics an agent needs to choose a filter value.

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

Purpose4/5

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

The description makes clear this returns the caller's own saved Gambits/mandates, and it explicitly narrows scope with 'Only saved Gambits you created and confirmed are listed.' That scope statement separates it from the broader catalog concepts in siblings like list_gambits, though the distinction between 'Gambits' and 'mandates' is never spelled out for an agent that sees both list_gambits and list_mandates.

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

Usage Guidelines4/5

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

It gives concrete routing: pass the returned id as mandate_id to get_mandate, and use get_mandate_activity for 'what they found.' It also documents the status filter's allowed values and default. It does not say when to prefer list_gambits over list_mandates, which is the one obvious sibling ambiguity left unaddressed.

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

list_recommendationsList recommendationsA
Read-onlyIdempotent
Inspect

Your Gambit agent's trade recommendations for YOUR account (the API key's user). status=pending for ones awaiting a response, status=history for the past ledger. Each row is the lean agent-facing ticket: id, instrument_id, direction, setup_family, entry_price, the exit plan (invalidation_rule, exit_method, targets), thesis, ts, the response fields (user_response, user_response_at, execution_id), and user_facing_recommendation — the same slice generate_recommendation returns (state, reason, strength, sizing, trade_ticket, validity, live_market). By default your wallet address and USD book (current position, portfolio value) are omitted — use get_account_balances / get_positions when you need the book. include_diagnostics: true switches to the full stored row instead: the pipeline snapshot (several kB per row) INCLUDING your wallet address and position values in your context — set it only when you actually need the internals. Row ids are the same ids generate_recommendation returns as recommendation_id and respond_to_recommendation accepts. Not every generated id is listed here: a watch mints no id, and a run whose ledger.status is recorded (a different recommendation on the same instrument/direction was already pending) has a respondable id that is NOT in the pending list — the pending one is its ledger.existing_pending_recommendation_id. generate_recommendation explains each case under ledger. (Requires api:read.)

NameRequiredDescriptionDefault
limitNo
statusYes
include_diagnosticsNoreturn each row's full stored row (pipeline snapshot, several kB per row, including your wallet address and position values) instead of the lean agent-facing row; default false

TDQS

A4.8/5.0
Behavior5/5

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

The annotations already declare readOnly/idempotent/non-destructive, and the description adds real value beyond them: the default row omits wallet address and USD book, while include_diagnostics pulls in wallet address and position values and costs several kB per row of context. It also discloses the api:read requirement and the non-obvious id edge cases (a watch mints no id; a recorded ledger.status has a respondable id absent from the pending list, with the real pending id at ledger.existing_pending_recommendation_id).

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

Conciseness4/5

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

Purpose and the pending/history split are front-loaded, and nearly every sentence carries non-redundant information (id edge cases, book omission, diagnostics cost). It is a single very dense block, though, and the id/ledger caveat at the end could be separated for scanability rather than run on in the same paragraph.

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

Completeness5/5

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

There is no output schema, and the description shoulders that burden fully by enumerating the lean row fields, the user_facing_recommendation slice, and what the diagnostics mode adds instead. Combined with the id semantics and auth requirement, an agent has everything needed to call it correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is only 33%, but the description compensates well for the two semantically loaded parameters: it defines the status enum values and spells out exactly what include_diagnostics returns and its privacy/context cost. The gap is limit: neither the schema nor the description explains what it bounds (pending rows vs history rows, ordering, default), so pagination behavior stays opaque.

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

Purpose5/5

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

States a specific verb+resource (trade recommendations for the API key's user) and immediately splits it into the two modes status=pending and status=history. It also scopes itself against siblings by naming generate_recommendation as the source of the same row slice and respond_to_recommendation as the consumer of the ids, so an agent can place it without opening another schema.

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

Usage Guidelines5/5

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

Explicitly says status=pending is for recommendations awaiting a response and status=history is the past ledger, and routes the agent away from this tool when it needs the book: 'use get_account_balances / get_positions when you need the book.' include_diagnostics has an explicit when-to-set-it condition ('set it only when you actually need the internals'), which is exactly the discrimination an agent needs.

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

list_signalsList my signalsA
Read-onlyIdempotent
Inspect

YOUR signals (alerts): standing checks Gambit runs on a schedule that notify you when a condition holds. view=list (default; status active | paused | all): each signal's id (cron_id), name, description, interval, query (what it reads), predicate (the condition), delivery_channels, edge_triggered, status and last run. view=detail: one signal by cron_id. view=catalog: what a signal can read — the endpoints (live/snapshot for one instrument's price, funding, open interest and features; live/regime; news/search), their params, and the predicate field paths with units (funding.funding_rate, price.mark, features.ret_1h, …) to build save_signal's query and predicate from. Fired signals waiting for your answer: get_fired_signals. The response carries app_url, the Alerts settings screen. (Requires api:read.)

NameRequiredDescriptionDefault
viewNo
statusNolist only
cron_idNoREQUIRED for detail

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description adds real value beyond that: the required api:read scope and the fact that the response carries app_url for the Alerts settings screen. It stops short of stating response shape/size limits, keeping it from a 5.

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

Conciseness4/5

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

Front-loaded with the definition then enumerated by view, with no filler sentences. Dense but long semicolon-chained sentences make it slightly harder to scan than necessary, keeping it below the top mark.

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

Completeness5/5

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

No output schema exists, and the description covers return contents per view mode, the auth scope requirement, and a cross-reference for the adjacent task. An agent has everything needed to choose a view and call it correctly.

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

Parameters4/5

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

Schema coverage is 67% and the description compensates well, spelling out what each view returns (id, cron_id, name, interval, query, predicate, delivery_channels, edge_triggered, status, last run) and what catalog exposes (endpoints, params, predicate field paths with units). It largely restates the status enum from the schema and does not describe cron_id format beyond 'one signal by cron_id', so it falls just short of a 5.

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

Purpose5/5

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

States a specific verb+resource ('YOUR signals (alerts)') and immediately defines what a signal is (scheduled standing checks that notify). It explicitly separates this from get_fired_signals, which covers signals awaiting an answer, so the agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Gives per-mode guidance: view=list is marked default with its status filter, view=detail requires a cron_id, and view=catalog is framed as the prerequisite source of truth for building save_signal's query and predicate. It also redirects to get_fired_signals for fired alerts awaiting a response.

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

manage_conversationRename or delete an agent conversationA
Destructive
Inspect

Rename (action=rename, title 1-200 chars; a title you set is kept, the auto-titler stops changing it) or permanently delete (action=delete) one of YOUR conversations (requires api:chat). Delete removes the conversation and all of its messages and cannot be undone — do it only when the user explicitly asks. A conversation that is not yours answers 404.

NameRequiredDescriptionDefault
titleNoREQUIRED for action=rename
actionYes
conversation_idYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: delete removes all messages and is irreversible, requires the api:chat scope, resets the auto-titler once a title is set, and returns 404 for non-owned conversations. These are exactly the behavioral traits an agent needs before a destructive call.

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

Conciseness4/5

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

Front-loaded with the two actions and no filler sentences; every clause adds import. The nested parentheticals make it slightly dense, but nothing is wasteful.

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

Completeness5/5

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

For a destructive two-mode mutation with no output schema, it covers destruction scope, irreversibility, auth requirement, and error edge cases. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

With only 33% schema coverage, the description compensates by explaining what each action value does and the title constraints (1-200 chars, persists over auto-titling). conversation_id semantics are only implied via the ownership/404 note, leaving a small gap.

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

Purpose5/5

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

States precise verbs (rename, delete) and the resource (one of YOUR conversations), and clearly separates the two action modes. It is trivially distinguishable from read-oriented siblings like get_conversation and list_conversations.

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

Usage Guidelines4/5

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

Gives a strong when/when-not for delete ('do it only when the user explicitly asks') and scopes ownership ('YOUR conversations'). It does not explicitly name alternative/read tools (e.g. get_conversation) for inspecting a conversation, so it stops just short of full routing guidance.

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

manage_news_sourcesManage my news sourcesAInspect

YOUR custom news sources: the X handles and Telegram groups Gambit reads for you, and which of Gambit's curated news sources are on. Reads need api:read; changes need api:account and stay within your plan's caps (a full cap answers 403 tier_limit_exceeded — see get_plan_usage). action=list_x_handles: your handles (handle, is_news_source, name) and cap {tier, current, max, unlimited}. action=suggest_x_handles: handle suggestions for prefix (1-15 chars; limit 1-20), with already_tracked. action=add_x_handle / remove_x_handle: handle (with or without @); an add checks the handle exists on X (400 user_not_found_on_x when it does not). action=list_telegram_groups: your groups (id, title, username_or_invite, joined_at) and cap. action=add_telegram_group: identifier — a public @username, t.me link or invite link; Gambit's reader account joins and screens the group first, which can take ~20 s, and a rejected group is not added. action=remove_telegram_group: group_id from list_telegram_groups. action=toggle_news_source: switch one curated news source on or off for you (handle, included).

NameRequiredDescriptionDefault
limitNosuggest_x_handles
actionYes
handleNoadd_x_handle, remove_x_handle, toggle_news_source
prefixNosuggest_x_handles
group_idNoremove_telegram_group
includedNotoggle_news_source: true turns the source on
identifierNoadd_telegram_group

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description goes well beyond: mutation paths require api:account, plan caps answer 403 tier_limit_exceeded, add_x_handle validates existence on X (400 user_not_found_on_x when it does not), and add_telegram_group joins/screens the group asynchronously (~20 s) and may be rejected so the group is not added. These are the operational traits an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The general framing and auth rules are front-loaded before the action-by-action detail, and every clause carries information — return fields, error codes, async caveats. It is a single dense block, however, and a line-per-action breakdown would have been easier to scan for an eight-action tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-action, seven-parameter mutating tool with no output schema, the description covers what it must: return fields for the list actions (handle/is_news_source/name, id/title/username_or_invite/joined_at), action-specific parameters, auth and cap failure modes, and the slow screening step. Nothing needed to call it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the baseline is 3, but the description materially enriches several params: it documents identifier formats ('a public @username, t.me link or invite link'), points group_id at list_telegram_groups as its source, notes handle works 'with or without @', and binds each parameter to the actions that consume it. Some restatement of schema constraints (limit 1-20, prefix 1-15) dilutes the gain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the resource precisely — 'YOUR custom news sources: the X handles and Telegram groups Gambit reads for you, and which of Gambit's curated news sources are on' — and each of the eight actions is then given its own specific verb+object. An agent can distinguish this config-management tool from read-only feeds like get_news_feed or get_news_headlines without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the auth split ('Reads need api:read; changes need api:account') and the cap consequence (403 tier_limit_exceeded) with an explicit pointer to get_plan_usage for remediation. Per-action descriptions establish when each action applies. It stops short of explicitly naming alternatives or when-not-to-use cases, so it is strong context but not full routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_lesson_readMark today's lesson readA
Idempotent
Inspect

Mark the daily lesson card YOU were served as read (requires api:account). Pass the card's served_on (YYYY-MM-DD) and slug exactly as get_lesson view=daily returned them; the write targets that card or nothing, and a slug that no longer matches the date answers 409 card_changed. Recorded as a card read (the same as the card's mark-read control in the app). Idempotent: marking a read card again keeps the first read.

NameRequiredDescriptionDefault
slugYescard.slug from get_lesson view=daily
served_onYesserved_on from get_lesson view=daily

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true). The description goes well beyond: it discloses the required scope, the 409 card_changed failure mode when slug and date no longer match, and the precise idempotency semantics ('keeps the first read').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph with no wasted sentences; the constraint and error behavior are front-loaded. It is slightly run-on, but every clause (scope, source, error case, idempotency) carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation with no output schema, the description covers inputs, input provenance, auth scope, failure mode, and idempotency — everything an agent needs to invoke it correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: exact-match requirement against get_lesson output, the YYYY-MM-DD format for served_on, and the cross-parameter coupling where a stale slug for the date yields 409 card_changed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('mark the daily lesson card YOU were served as read') with explicit scope (only today's served card). Clearly differentiated from the read-side sibling get_lesson view=daily, which it names as the source of inputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tells the agent exactly where the parameters come from ('as get_lesson view=daily returned them'), and excludes other uses by stating 'the write targets that card or nothing.' The api:account prerequisite is stated up front.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_gambitPlan a trade from your own limits (places nothing)AInspect

A trade plan for one ticker from YOUR own limits (requires api:recommend) — the call for "how would I size this?". The chain for one ticker. Everything it stores is in YOUR personal layer: the shared view never changes because of it. Over this connector Gambit runs no model for you: YOUR OWN model does the personal work. (1) Add data: add_gambit_evidence stores a fact you know. It is labelled unconfirmed until Gambit confirms it from an official or wire source that states it; a confirmed fact's source joins the shared evidence, and the shared view uses it on its normal run. (2) Your view: the take formed again on top of the shared take plus your facts, which are assumed true for your view only. To form it: call get_gambit_pack, form the take with the rules and output_schema in the pack, then call submit_gambit_view. (3) What if: what_if_gambit gives the view if something happened; when the question matches a dated condition the view already lists, the answer is precomputed and no model runs; otherwise it returns the pack with the event added, for your model to answer. (4) Plan: plan_gambit gives entry, stop, size and exits from your own limits. A plan is not a recommendation to trade and places no order. use: shared (plan from the shared view) or mine (plan from your latest accepted view while get_gambit still shows it; the answer also gives the size from the shared view, so the difference your view makes is explicit: differs.line says "With your information" for a view Gambit formed from your facts, and "With your view (formed by )" for one your own model formed). risk_pct (optional): the percent of the account to risk; by default your trade policy's, else Gambit's default. account_value (optional, USD): Gambit does not read it from your portfolio; without it the plan has no size (size_usd null, and needs lists account_value), so ask the user for it. The direction follows the view's lean. With no real lean (|shown_lean| below 1) the answer is action no_trade, with why. Otherwise: entry (the latest price), stop (from the ticker's realized volatility), size_usd and risk_usd (sized so that a stop-out loses about risk_pct of the account; capped_by_max_position is true when your maximum position size cut it, and capped_at_account_value when the size stopped at the whole account value, so risk_usd is then less than risk_pct), exits (the view's dated "wrong if" conditions, plus the stop), check_by (the earliest confirm-by date of your facts), based_on, limits_used, differs and disclaimer. Price levels belong to the plan, never to the view. Tell the user it is a plan from their own limits and not a recommendation to trade. It places no order, writes no trade record, runs no model and uses no recommendation quota; the plan is kept in your personal layer (plan_id), and a daily limit applies (429 rate_limited with retry_after). Errors: 409 gambit_building when Gambit has no view of the ticker yet (get_gambit by symbol queues it; try again later); 404 unknown_symbol; 422 ambiguous_symbol with candidates (call again with one candidate as the symbol); 409 no_user_view when use is mine and you have no current accepted view (add data or submit a view again); 409 price_unavailable or volatility_unavailable when the plan cannot set its levels; 503 gambit_personal_disabled while the personal layer is switched off.

NameRequiredDescriptionDefault
useYesshared: plan from the shared view; mine: from your latest accepted view
symbolYesa ticker such as BTC or NVDA, or an exact id such as xyz:GOOGL or ref:eq:IP, as for get_gambit
risk_pctNopercent of the account to risk on this plan
account_valueNoaccount value in USD

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavior beyond the annotations: no order placement, no trade record, no model run, no recommendation quota, personal-layer storage with plan_id, and a daily rate limit surfaced as 429 rate_limited. It also documents specific error codes and when they occur. The annotations say readOnlyHint=false, which is consistent with storing a personal plan, so there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and organized with numbered steps, but it is very long and repeats some points about not placing orders and not being a recommendation. For a tool with four parameters, the volume of detail is higher than necessary, though much of it is useful for error handling and output interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description sufficiently explains the returned plan fields, limits, differs behavior, and error states. It is complete enough for an agent to call the tool correctly and interpret common failure modes without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds substantial meaning: risk_pct defaults to the user's trade policy or Gambit's default, account_value is not read from the portfolio and omission leaves size_usd null with a needs hint, and use distinguishes shared-view planning from the user's latest accepted view including the differs output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it produces a trade plan for one ticker with entry, stop, size, and exits from the user's own limits. It also distinguishes the tool from sibling view/evidence tools by framing it as the "how would I size this?" call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the use case directly, explains the shared vs mine choices, describes how it fits after get_gambit_pack/submit_gambit_view, and notes that account_value must be requested from the user when absent. It also gives explicit error conditions like no_user_view and price_unavailable that tell the agent when to retry or take another path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_stock_orderPropose a stock order (preview only)AInspect

Check a stock order at YOUR own linked brokerage and return a preview (requires the api:stock_trade scope). This does NOT place an order. Get account_id from get_holdings (accounts[].accountId; get_holdings needs the api:portfolio scope). Rules the server enforces: US-listed stocks, ETFs and ADRs only; whole shares (units is an integer of 1 or more); order_type Market or Limit (limit_price is required for Limit and not allowed for Market); Day orders only; action BUY or SELL — a SELL cannot be more than the shares you hold, so it cannot open a short; a per-order dollar cap. The response has quote (bid, ask, last), preview (check_id, expires_at, account with a masked number, action, symbol, units, order_type, limit_price, estimated_cost, commission, buying_power_after) and confirm_echo. The check expires about 5 minutes after it is made. You MUST show the full preview to the human user. Call confirm_stock_order only after the human explicitly approves this exact order. A 403 trading_disabled means brokerage trading is not enabled for this account; a 429 means the per-minute order limit is spent (wait Retry-After seconds).

NameRequiredDescriptionDefault
unitsYeswhole shares
actionYes
symbolYesUS ticker, e.g. AAPL or BRK.B
account_idYesa brokerage account id from get_holdings accounts[].accountId
order_typeYes
limit_priceNorequired for order_type Limit; not allowed for Market

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: server-enforced trading rules (US-listed only, whole shares, order_type/limit_price coupling, Day-only, no short SELL, dollar cap), the check expiry (~5 min), required scopes, and failure semantics (403 trading_disabled, 429 with Retry-After). This is rich, action-relevant disclosure that the annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the 'does NOT place an order' disclaimer, and nearly every sentence carries operational weight. It is dense and long for a single paragraph, but the structure (purpose → rules → response → error semantics) stays navigable, so the length is mostly justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description enumerates the response shape (quote, preview fields including check_id/expires_at/estimated_cost/buying_power_after, confirm_echo) and the expiry window. Combined with the scope, rules, and error guidance, an agent has everything needed to invoke and interpret the call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description supplements it with meaningful constraints — whole-share integers, limit_price required for Limit and forbidden for Market, SELL capped by holdings, and the account_id/symbol sources. Much of this is already in the schema descriptions, so it adds value but not a great deal beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check a stock order at YOUR own linked brokerage and return a preview'), and immediately clarifies the scope with 'This does NOT place an order.' It explicitly distinguishes itself from confirm_stock_order, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the precondition for account_id (from get_holdings accounts[].accountId), names the alternative explicitly ('Call confirm_stock_order only after the human explicitly approves this exact order'), and states required scopes. When to use, when not to use, and the dependency chain are all spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_tradePropose a trade (preview only)AInspect

Stage a guardrailed trade preview for YOUR Gambit agent wallet (requires the api:trade scope — 403 without it; also needs the user's API-trading opt-in). This does NOT place anything: it returns a proposal_id, an expiry, the full preview (final size, notional, leverage, estimated entry price, disclosure notes), and a confirm_echo naming exactly the asset/side/size_usd a confirm must echo back. Trades execute from the user's AGENT deposit wallet only — never the main wallet. side=close stages a reduce-only close of the existing position. Present the full preview to the human user; the proposal expires if not confirmed.

NameRequiredDescriptionDefault
sideYes
symbolYes
leverageNo
notional_usdNoUSD notional; the user's risk-policy default when omitted

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the sparse annotations: api:trade scope with 403 behavior, the user's separate API-trading opt-in, agent-deposit-wallet-only constraint, expiry of unconfirmed proposals, and the exact return payload (proposal_id, expiry, preview fields, confirm_echo). None of this is in the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but dense, and the critical non-execution guarantee is front-loaded in the second sentence. Every clause carries distinct operational information (auth, wallet, returns, expiry), though it could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and thin annotations, the description carries the full burden and discharges it: it documents the return shape, the auth/scopes, wallet restrictions, the close semantics, and the confirm handoff. An agent has everything needed to call and route this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (just notional_usd), so the description must compensate. It clarifies side=close as a reduce-only close and ties confirm_echo to asset/side/size_usd, but leaves symbol, leverage, and the long/short distinction unexplained. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Stage a guardrailed trade preview') and immediately disambiguates from actual execution with 'This does NOT place anything', separating it from confirm_trade. An agent can tell from this alone that it produces a proposal, not an order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: preview must be presented to the human, the proposal expires if not confirmed, and confirming requires echoing the confirm_echo. It implies the confirm sibling rather than naming it explicitly, so it stops just short of a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rate_opportunityVote on or save an opportunityA
Idempotent
Inspect

Vote on or save one Today's Market opportunity card for YOUR account (needs the api:account scope) — the call for "vote this opportunity down". opportunity_id is a card id from get_opportunities (mo_ + 32 hex); pass rating (up | down, or clear to withdraw your vote), saved (true saves the card, false removes the save), or both. Votes are feedback for Gambit's team and do not change what the feed ranks; each call is also recorded as a view of the card (never as an open or a chat). data.recorded false means the vote did not land — retry once. get_my_opportunity_marks reads your votes and saves back.

NameRequiredDescriptionDefault
savedNo
ratingNo
opportunity_idYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: states the api:account scope requirement, that votes are feedback only and do not affect feed ranking, that each call is recorded as a view (never an open or chat), and that data.recorded=false means the vote failed and should be retried once. That is rich, non-obvious behavioral context layered on top of the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph, but it is front-loaded with purpose and every clause adds operational value (scope, id format, enum meaning, rank-neutrality, retry signal). No filler, though the density makes it a touch hard to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by disclosing the failure signal (data.recorded=false). Combined with auth scope, idempotency implications, and side effects, nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load, and it does: opportunity_id format and source (mo_ + 32 hex, from get_opportunities), rating enum values with the 'clear' withdrawal semantics, and saved true/false meaning, including that either or both may be passed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (vote/save) plus resource (a Today's Market opportunity card) with explicit account scoping ('for YOUR account'). It names the sibling it complements (get_my_opportunity_marks reads back), so an agent can distinguish it from read-oriented siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context ('the call for "vote this opportunity down"') and routes the read-back case to get_my_opportunity_marks. It stops short of an explicit when-not-to-use statement, but the intended usage is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

respond_to_recommendationRespond to a recommendationAInspect

Record YOUR response to a pending recommendation (requires the api:respond scope on your key). recommendation_id is the id from generate_recommendation (any non-null one, including a ledger.status recorded id that is not in the pending list) or a list_recommendations(status=pending) row — never snapshot_id. This is a terminal, idempotent write — 409 means a response was already recorded; 404 means no recommendation with that id belongs to you (a watch outcome mints none). It does NOT execute a trade.

NameRequiredDescriptionDefault
responseYes
recommendation_idYes

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description calls this a 'terminal, idempotent write', but the annotations declare idempotentHint=false — a direct contradiction between the prose and the structured safety profile. The otherwise valuable context (api:respond scope, 409 = already recorded, 404 = not yours, terminal write) is undermined by this conflict.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then id provenance, then error semantics and the trade-execution disclaimer. Every sentence adds distinct information, though the parenthetical clauses make it longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-readOnly mutation with no output schema, it covers scope requirements, id sourcing, error-code meanings, terminal behavior, and side-effect boundaries. It omits success return shape and the semantic meaning of the response enum values, but is otherwise substantial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It explains recommendation_id well (provenance and the 'never snapshot_id' warning), but the second parameter, response, is completely unaddressed — no meaning is given for accepted/rejected/modified beyond the enum values themselves. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Record YOUR response to a pending recommendation') and explicitly delineates the boundary against the sibling execute_recommendation ('It does NOT execute a trade'). An agent can distinguish this from execute_recommendation, generate_recommendation, and list_recommendations without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete guidance on where recommendation_id must come from (generate_recommendation, a ledger.status id, or a list_recommendations(status=pending) row) and an explicit exclusion ('never snapshot_id'). It stops short of naming the execute path sibling as the alternative when the user actually wants to trade, so routing is implied rather than fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

respond_to_signalAccept or reject a fired signalAInspect

Answer one of YOUR fired signals (execution_id from get_fired_signals) with accepted or rejected (needs the api:account scope). This only records your answer and clears it from the waiting list; it never places a trade. A signal that was already answered returns 409; one that is not yours returns 404.

NameRequiredDescriptionDefault
responseYes
execution_idYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: the required api:account scope, the side effect that it records the answer and clears the signal from the waiting list, the explicit non-effect ('never places a trade'), and specific error semantics (409 already-answered, 404 not-yours). The non-idempotent/409 pairing is internally consistent with idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences: purpose, scope/side-effect clarification, then error cases. Every clause earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation with no output schema, the description covers the downstream effect, the scope requirement, the negative guarantee, and failure modes. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load: it supplies the critical provenance of execution_id (from get_fired_signals), which the schema omits entirely. The response values are restated rather than added, and format/constraint detail beyond origin is absent, so it compensates only partially for the zero coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Answer one of YOUR fired signals ... with accepted or rejected') and anchors the resource to a named sibling, get_fired_signals, which supplies execution_id. An agent can tell this apart from list_signals, save_signal, and respond_to_recommendation without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes usage to 'YOUR fired signals' and points to get_fired_signals as the source of execution_id, so the calling workflow is clear. It does not, however, exclude or compare against respond_to_recommendation, the nearest alternative, so guidance stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resync_protectionRe-sync TP/SL orders to position sizeA
DestructiveIdempotent
Inspect

Re-sync the take-profit / stop-loss orders on one of YOUR agent-wallet positions to the position's current size (requires the api:trade scope) — the Gambit app's Manage-position re-sync, used after a position was resized. It rescales the EXISTING TP/SL orders: it does not set new prices, does not add TP/SL to a position without them, and does not change the position. It cancels and re-places those orders on Hyperliquid, so call it only when the user asks. symbol must be a position the agent wallet holds (404 otherwise). An error carries the venue's reason.

NameRequiredDescriptionDefault
symbolYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, but the description adds the mechanism ('cancels and re-places those orders on Hyperliquid'), the auth requirement (api:trade scope), the failure mode (404 when the symbol isn't held), and the error format (venue's reason). This is exactly the additional context the annotations can't convey, and nothing contradicts them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and size premise, then layers scope, exclusions, and failure behavior in descending priority. Dense with em-dash parentheticals, but nearly every clause earns its place; slightly heavier than it needs to be for a one-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers the return/error surface ('an error carries the venue's reason'), the permission requirement, and the preconditions for calling. For a single-param mutation on a live venue with destructive annotations, an agent has all it needs to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with a single required parameter named only 'symbol', so the description must carry the semantics — and it does, specifying that symbol must be a position the agent wallet holds and that a miss returns 404. It stops short of giving an expected format (e.g. exchange ticker convention) despite the 48-char limit in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (re-sync) and resource (TP/SL orders on one of the agent-wallet's positions) and maps it to a concrete counterpart action ('the Gambit app's Manage-position re-sync'). It also negatively defines the tool ('does not set new prices, does not add TP/SL... and does not change the position'), which cleanly separates it from siblings like propose_trade, confirm_trade, and adjust_margin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('used after a position was resized'), a strict precondition ('call it only when the user asks'), and three explicit when-not conditions (no price-setting, no adding TP/SL where absent, no position modification). The agent has everything needed to decide between this and the neighbouring order-management tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_opportunity_tradeReview a trade from an opportunity (preview only)AInspect

Refresh the sized trade ticket of one of YOUR actionable evaluations before the user trades it — the same action as Review trade in the Gambit app. It is a PREVIEW: it places, queues and confirms nothing. Requires the api:recommend scope (403 without it). This runs the recommendation pipeline (LLM calls, except when the answer comes from Gambit's view) and can take up to ~45 seconds: each call uses one run of the SAME monthly recommendation quota generate_recommendation uses (403 tier_limit_exceeded when it is spent) and one of 5 calls per minute that evaluate_opportunity and review_opportunity_trade share (429 rate_limited with Retry-After). Do not call it speculatively. Pass the values from an evaluate_opportunity answer for a Today's Market card (opportunity_id) whose outcome is actionable: opportunity_id, evaluation_id, scenario_id (null when the evaluation has none), advisory_fingerprint and origin_ticket_fingerprint (trade_ticket.advisory_fingerprint and trade_ticket.ticket_fingerprint) and source_snapshot_fingerprint (source.snapshot_fingerprint). The answer is data.status ready, with the refreshed sizing and trade_ticket, or unavailable with reason_code: evaluation_identity_changed (the card or evaluation changed; evaluate again), evaluation_materially_changed (Gambit's judgment moved; evaluate again), evaluation_no_longer_actionable, trade_ticket_unavailable, or a sizing reason. For an evaluation from Gambit's view (it carries a gambit block) the ticket is re-sized from the same view, with the stop from realized volatility around the current mark, and the user's limits; evaluation_materially_changed means the view moved (a new version, direction or listing; a moved price alone only re-sizes the ticket), and gambit_view_not_current, plan_levels_unavailable or instrument_authority_rejected mean it could not be re-sized on this run (retry later). The ticket is sized for the user's connected MANUAL wallet. Placing any order is a separate api:trade step (execute_recommendation, then confirm_trade) that needs the human's explicit approval of the preview; never chain it automatically. A Gambit evaluation's recommendation is advisory: execute_recommendation refuses it (409 advisory_not_executable), so a trade on it is a separately sized propose_trade, approved the same way. The response carries app_url, the card's screen.

NameRequiredDescriptionDefault
scenario_idNoevaluation.scenario_id; null or omitted when it has none
evaluation_idYesevaluation.evaluation_id
opportunity_idYesthe evaluated card's id
advisory_fingerprintYesevaluation.trade_ticket.advisory_fingerprint
origin_ticket_fingerprintYesevaluation.trade_ticket.ticket_fingerprint
source_snapshot_fingerprintYesevaluation.source.snapshot_fingerprint

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond the annotations: discloses the required api:recommend scope (403), the ~45s LLM-pipeline latency, consumption of the same monthly quota as generate_recommendation (403 tier_limit_exceeded), and the shared 5-per-minute rate limit with evaluate_opportunity (429 + Retry-After). It also enumerates unavailable reason codes and gambit-view edge cases, all consistent with readOnlyHint=false (quota-consuming, non-idempotent side effects) and destructiveHint=false (nothing is placed or confirmed).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the essential facts (what it does, that it is a preview, the auth scope) before the quota, rate-limit and response detail. It is a dense single-block paragraph with a long gambit-view clause chain, but essentially every sentence carries actionable operational information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: data.status ready with refreshed sizing and trade_ticket, or unavailable with enumerated reason_codes, plus app_url. For a 6-parameter, mutating, quota-limited tool this is complete enough to call correctly without opening anything else.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value by stating the provenance of every parameter ('Pass the values from an evaluate_opportunity answer') and the cross-references (trade_ticket.advisory_fingerprint / ticket_fingerprint, source.snapshot_fingerprint, scenario_id null when the evaluation has none). It stops short of explaining why each fingerprint must match or what mismatch triggers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Refresh the sized trade ticket of one of YOUR actionable evaluations') and immediately scopes it as a preview that 'places, queues and confirms nothing'. It explicitly distinguishes itself from evaluate_opportunity (the source of the inputs), execute_recommendation/confirm_trade (the separate trade step) and propose_trade (the Gambit-view path).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition (only for an evaluate_opportunity answer whose outcome is actionable, passing its ids/fingerprints), an explicit prohibition ('Do not call it speculatively'), and names the alternatives for acting on the result (execute_recommendation, then confirm_trade with human approval; propose_trade for advisory Gambit evaluations).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_api_keyRotate API keyA
Destructive
Inspect

Revoke the API key this session is using and return a new gk_live_ secret once (requires api:account). Store the new key in the secret manager and reconnect with it. The previous key stops working. The secret is not recoverable after this response.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: the annotations only flag destructive/non-idempotent, while the description discloses that the previous key stops working, that the new secret is returned exactly once, and that it is unrecoverable after the response. Those are the exact facts an agent needs to avoid destroying its own credentials.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and the return value, then the required scope, then the irreversibility warning. Every sentence carries a distinct, actionable fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the full burden and does so: it describes the returned secret's shape (gk_live_), its one-time availability, and the required post-call workflow. Nothing an agent needs to call this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The only input-like information given is the required api:account scope, which is a useful addition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('Revoke the API key this session is using') plus the side effect of returning a new gk_live_ secret. No sibling tool touches credentials, so differentiation is trivially clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the precondition ('requires api:account') and prescribes the follow-up workflow (store the new key in the secret manager, reconnect with it). It does not name when-not-to-use or an alternative path, but no plausible alternative exists among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_mandateCreate, edit or refine a saved GambitAInspect

Create, edit, pause or refine one of YOUR saved Gambits (mandates: standing instructions that tell Gambit what to watch for you; requires api:account). Pick the action. create: a new saved Gambit from title and mandate_text (your own words); status draft (default) or active. update (mandate_id): a draft's content can change in place; status moves draft → active, active → paused (pause), paused → active (resume); monitor_interval_minutes may change at any time. An active or paused saved Gambit is never edited in place: supersede (mandate_id) drafts a successor with your changed fields, then update the successor to status active, which replaces the original. refine: turns loose intent (text) into a suggested title and wording; nothing is saved — pass the result to create. compile_scope: previews which instruments a list of universe terms (terms) resolves to; nothing is saved. autonomy_level 0-3 only: execution autonomy (level 4 and above) can be set only in the Gambit app, and an API key cannot activate, edit or supersede a saved Gambit that holds it (it can still pause or delete one). Your plan limits how many saved Gambits you keep (drafts and paused ones count); over the limit the call answers 403 with code tier_limit_exceeded. A refused lifecycle rule answers 422 with code mandate_rule_violation and reasons, fixed codes naming the rule (e.g. active_mandate_immutable:title — edit through supersede; invalid_transition:draft->paused). Nothing here places a trade. To delete: delete_mandate. create, update and supersede return the saved Gambit (the same fields as get_mandate) and carry app_url, the screen where saved Gambits are managed.

NameRequiredDescriptionDefault
textNoREQUIRED for refine: the loose intent to refine
termsNoREQUIRED for compile_scope
titleNoREQUIRED for create
actionYes
statusNocreate: draft | active; update: draft | active | paused; not for supersede
metadataNo
starts_atNo
expires_atNo
mandate_idNoREQUIRED for update and supersede
mandate_textNoREQUIRED for create: the instruction, in the user's words
policy_deltaNorisk bounds and preferences for this saved Gambit
autonomy_levelNo
monitor_interval_minutesNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: discloses auth scope (api:account), plan-limit behavior (403 tier_limit_exceeded), refusal codes (422 mandate_rule_violation with reason codes like active_mandate_immutable), the immutability of active/paused mandates, API-key restrictions on higher autonomy levels, and the return payload (saved Gambit plus app_url). It also clarifies no trade is placed, which matters given sibling trade tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core purpose and action-dispatch lead, with edge rules trailing. Given 5 actions and 13 params, most sentences earn their place, though the lifecycle/error-detail run-on in the middle could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description supplies return fields and app_url. Combined with lifecycle rules, error codes, auth scope, and limit behavior, an agent has everything needed to invoke correctly across all five actions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 54% schema coverage and 13 params, the description compensates well: it maps text→refine, terms→compile_scope, title+mandate_text→create, mandate_id→update/supersede, explains the status transition matrix, restricts autonomy_level to 0-3, and notes monitor_interval_minutes is editable anytime. A few params (metadata, starts_at, expires_at, policy_delta) remain uncovered in both description and schema, so not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb set and resource: 'Create, edit, pause or refine one of YOUR saved Gambits (mandates...)'. It names the dispatch mechanism ('Pick the action'), enumerates each action's meaning, and differentiates itself from delete_mandate and the read siblings (get_mandate, list_mandates). An agent can distinguish this tool from create_gambit/get_mandate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not guidance for every action: create for new content, update for drafts, supersede when the target is active/paused, refine to turn loose intent into wording (nothing saved), compile_scope to preview term resolution. It routes deletion to delete_mandate and describes the draft→active→paused lifecycle, so selection is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_signalCreate, edit, pause or delete a signalA
Destructive
Inspect

Create, edit, pause, resume or delete one of YOUR signals (needs the api:account scope) — the call for "create a funding signal on HYPE". action=create needs name, interval_minutes (1-59 minutes, or a whole number of hours: 60, 120, … 1440) and query ({endpoint, params}) or queries (up to 8, each with a label), plus a predicate — {field, op, value} with op one of > >= < <= == != in not_in exists, or {operator: AND | OR, conditions: [...]} — over the fields list_signals view=catalog names. Example: query {endpoint: "live/snapshot", params: {instrument_id: "HYPE"}}, predicate {field: "funding.funding_rate", op: ">", value: 0.5}. Optional: description, timezone, expires_at (ISO), delivery_channels (telegram | push | ws; default telegram) and edge_triggered (notify once per crossing; default true). action=update changes only the fields you send (cron_id required). action=pause / resume / delete act on cron_id; delete cannot be undone. Your plan caps how many signals you can have — at the cap, create answers 403 with the quota message. A signal only notifies; it never trades. Gambit Scan signals (run_recommendation_pipeline) are set up in the app, not here; a Scan signal, or a signal Gambit's agent created (created_by agent), can only be paused or deleted here (403 on update or resume).

NameRequiredDescriptionDefault
nameNo
queryNo
actionYes
cron_idNoREQUIRED for update, pause, resume and delete
queriesNo
timezoneNo
predicateNo
expires_atNo
descriptionNo
edge_triggeredNo
interval_minutesNo
delivery_channelsNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint/readOnlyHint/idempotent flags; the description goes well beyond them by disclosing the quota-cap 403 behavior, that delete cannot be undone, that a signal only notifies and never trades, the 403 asymmetry for Scan/agent-owned signals, and the defaults for delivery_channels (telegram) and edge_triggered (true). That is meaningful operational context an annotation cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and the ownership constraint, and every clause carries information. It is, however, a single dense paragraph mixing per-action requirements, defaults and error cases, which makes it harder to scan for a specific action than a short bulleted split would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, nested-object, mutation-heavy tool with no output schema and near-zero schema descriptions, the description supplies everything needed to call it correctly: prerequisites, per-action requirements, predicate syntax, defaults, and failure modes. No output-schema gap exists, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at just 8%, the description carries the full burden and does: interval_minutes range and hour-multiples rule, query vs queries (up to 8, each with a label), the predicate grammar with the full operator list and AND/OR nesting form, cron_id required for non-create actions, and a concrete worked example. Nearly every one of the 12 parameters gains meaning beyond the schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb set and resource: create/edit/pause/resume/delete "one of YOUR signals", and immediately narrows scope with the api:account requirement and the plain-language example "create a funding signal on HYPE". It further distinguishes itself from run_recommendation_pipeline and from list_signals, so an agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing decisions: Gambit Scan signals are set up in the app, not here; agent-created signals can only be paused or deleted here (403 on update/resume). It also directs the agent to list_signals view=catalog to discover valid predicate fields, which is the exact prerequisite an agent would otherwise miss.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_marketsScan Hyperliquid marketsA
Read-onlyIdempotent
Inspect

Scan all Hyperliquid perp markets ranked by funding, volume, open interest, or 24h price change. The best first call for finding opportunities. Includes HIP-3 builder-DEX assets (equities/commodities, symbols like xyz:TSLA) unless disabled. Returned symbol values are the instrument ids the other tools accept.

Funding as a positioning read applies to NATIVE perps (BTC, ETH, HYPE — no dex field), where extreme funding does mean crowded positioning. It does NOT transfer to HIP-3 rows: each builder DEX applies its own deployer-set funding_multiplier to funding, which differs between dexes, differs between assets inside one dex, is ~0 on some (funding effectively switched off), and can be changed by the deployer at any time. A HIP-3 market's funding therefore measures crowding TIMES that multiplier, so raw HIP-3 funding says nothing about positioning on its own and is not comparable with native funding or across dexes.

With sort=funding, data.top ranks native perps only; HIP-3 rows are ranked separately in data.hip3.top_by_scaled_funding on funding_apr_pct_scaled (the multiplier removed — that is the number to compare and to reason about crowding with). data.hip3.funding_not_comparable lists symbols with no usable funding signal, split into data.hip3.funding_disabled (the deployer set the multiplier to ~0 — funding is switched off) and data.hip3.funding_scale_unknown (the multiplier has not been observed yet, so the rate cannot be interpreted). Report either as having no funding signal — never as neutral or balanced positioning — and do not describe an unknown scale as disabled. Every row carries funding_multiplier; funding_apr_pct stays the real cost of carry a holder pays and is correct for every row. (Requires api:read.)

NameRequiredDescriptionDefault
topNo
reverseNoSort direction override: false = ascending (lowest/most negative first, e.g. top 24h losers with sort_by=price_change), true = descending (highest first). Omit for the sort field's default direction.
sort_byNo
min_volumeNo
include_hip3No

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover read-only and safety traits, but the description adds substantial behavioral context beyond them: HIP-3 inclusion behavior, funding multiplier semantics, non-comparability of HIP-3 funding, special output buckets such as data.hip3.top_by_scaled_funding, and the api:read requirement. It also warns how to interpret ambiguous funding data rather than treating it as neutral.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose statement and then grouped logically into HIP-3 inclusion and funding interpretation guidance. It is lengthy and dense, but most sentences carry specific operational meaning rather than filler, though some funding caveat wording could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry return-value semantics; it does this well for symbols, funding buckets, and HIP-3 edge cases. It still leaves some input parameters unmentioned and does not fully describe the general row shape, but the key correctness-critical context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, and the description compensates for some parameters by mapping the ranking choices to sort_by and by explaining include_hip3 behavior. However, it does not explain top, min_volume, or the default behavior for omitted parameters, and reverse is already covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: scanning all Hyperliquid perp markets, ranked by funding, volume, open interest, or 24h price change. It also identifies itself as the best first call for finding opportunities and explains that returned symbol values feed other tools, which distinguishes it from sibling lookup or price tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context by calling itself 'the best first call for finding opportunities' and by explaining HIP-3 inclusion and ranking behavior. It does not explicitly name alternatives or when not to use this tool, but the intended entry-point role is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_symbolsSearch symbolsA
Read-onlyIdempotent
Inspect

Search the US-equity reference universe Gambit charts (active EQUS.MINI listings) by ticker — exact match first, then prefix, then contains. q is a ticker fragment (letters, digits, . : -; a leading $ is ignored). Each item: symbol, chartDataset, summaryDataset, exchange, securityType, securitySubtype, instrumentClass and lastSeenAt. Use it to confirm a ticker before get_symbol_research. Crypto and HIP-3 perps are not in this universe — scan_markets lists those. (Requires api:read.)

NameRequiredDescriptionDefault
qYes
limitNodefault 12

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower, yet the description adds real behavior: the ranking of match types, the accepted character set for q, that a leading $ is ignored, and the auth scope (api:read). It stops short of stating pagination/truncation behavior when limit caps at 25, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, each doing distinct work: scoping, match algorithm, query format, return fields, use case, exclusions, auth. The scope and search semantics are front-loaded before the routing guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by enumerating the returned item fields (symbol, chartDataset, summaryDataset, exchange, securityType, securitySubtype, instrumentClass, lastSeenAt). With universe boundaries, auth requirement, and next-step routing all present, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% (q has no description, limit only carries 'default 12'), and the description fully compensates for q — ticker fragment, allowed characters, leading-$ normalization. limit is left to the schema's default annotation, so one parameter remains unexplained in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) over a precisely bounded resource (US-equity reference universe = active EQUS.MINI listings), and even specifies the match ordering: exact, then prefix, then contains. Siblings are named in negative space (scan_markets for crypto/HIP-3 perps, get_symbol_research for next step), so the agent can distinguish it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case — 'confirm a ticker before get_symbol_research' — plus an explicit exclusion with a redirect: 'Crypto and HIP-3 perps are not in this universe — scan_markets lists those.' Both when-to-use and when-not-to-use are covered with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_brokerage_connectStart brokerage connectionAInspect

Start a SnapTrade connection for YOUR account (requires api:account). Returns a portal URL. Show that URL to the user and have them finish the brokerage login in the browser, then poll get_setup_status until brokerage_connected is true. Optional broker is a SnapTrade slug (for example ROBINHOOD); omit it to let the user pick.

NameRequiredDescriptionDefault
brokerNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-idempotent, open-world operation, and the description adds meaningfully beyond them: it requires the api:account scope, returns a portal URL rather than completing the connection, and hands off to a human browser flow plus polling. That auth and out-of-band completion detail is exactly the context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and return value, then the required human workflow, then the optional-param behavior. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param tool with no output schema, the description supplies the missing pieces: what it returns (a URL), that the connection is not completed synchronously, the scope needed, and the polling follow-up. Nothing an agent needs to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the param burden, and it does: broker is a SnapTrade slug (with ROBINHOOD as an example), it is optional, and omitting it lets the user choose. Only the maxLength/minLength constraint and the full slug vocabulary remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Start a SnapTrade connection for YOUR account') and immediately names the return value (a portal URL), so an agent can distinguish it from sibling setup tools like get_setup_status and list_brokerages without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the exact follow-up workflow: show the URL to the user, have them finish login in the browser, then poll get_setup_status until brokerage_connected is true. It also explains when to omit the broker param. It stops short of explicit when-not-to-use or prerequisite ordering against other siblings, but the routing context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_gambit_viewSubmit your own model's view of a tickerAInspect

Submit the view YOUR OWN model formed from get_gambit_pack (requires api:account). The chain for one ticker. Everything it stores is in YOUR personal layer: the shared view never changes because of it. Over this connector Gambit runs no model for you: YOUR OWN model does the personal work. (1) Add data: add_gambit_evidence stores a fact you know. It is labelled unconfirmed until Gambit confirms it from an official or wire source that states it; a confirmed fact's source joins the shared evidence, and the shared view uses it on its normal run. (2) Your view: the take formed again on top of the shared take plus your facts, which are assumed true for your view only. To form it: call get_gambit_pack, form the take with the rules and output_schema in the pack, then call submit_gambit_view. (3) What if: what_if_gambit gives the view if something happened; when the question matches a dated condition the view already lists, the answer is precomputed and no model runs; otherwise it returns the pack with the event added, for your model to answer. (4) Plan: plan_gambit gives entry, stop, size and exits from your own limits. A plan is not a recommendation to trade and places no order. view: the take your model produced, as a JSON object matching the pack's output_schema. model (1-80 characters): your model's name, for example claude-opus-5.5; the stored view is labelled with it. based_on_version: the based_on_version of the pack your model used; when the shared view has moved on since, the answer is 409 pack_changed: call get_gambit_pack again and form the view again. Gambit checks the take the way it checks its own: it must parse, cite only item_ids from the pack (your own facts included), keep price levels out of the shared tests (they belong in price_levels), give no price targets, market timing or rate forecasts of its own, and say why when it sees no edge. Gambit does not smooth it toward the shared view: it is your model's view. It is stored in YOUR personal layer, accepted or rejected, and never changes the shared view. Returns status (accepted: it is now your view; rejected: it is stored but is not your view), user_view_id, produced_by, based_on_version, the view as rendered (sources are shown only for items of the pack), differs (how it differs from the shared view) and problems. When status is rejected, fix each problem and submit again; a view that cannot be read at all is rejected the same way, with view null. A daily limit applies (429 rate_limited with retry_after). Errors: 409 gambit_building when Gambit has no view of the ticker yet (get_gambit by symbol queues it; try again later); 404 unknown_symbol; 422 ambiguous_symbol with candidates (call again with one candidate as the symbol); 409 pack_changed; 422 reserved_model_name when model is "gambit"; 503 gambit_personal_disabled while the personal layer is switched off.

NameRequiredDescriptionDefault
viewYesthe view your model produced, as a JSON object matching output_schema
modelYesyour model's name, e.g. claude-opus-5.5
symbolYesa ticker such as BTC or NVDA, or an exact id such as xyz:GOOGL or ref:eq:IP, as for get_gambit
based_on_versionYesthe based_on_version of the pack your model used (from get_gambit_pack)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds what annotations provide: it discloses the personal-layer storage model, that the shared view is never altered, the Gambit validation rules applied, rejected-vs-accepted status semantics, daily limits with 429/retry_after, and the full error taxonomy (409/404/422/503). Annotations only say non-readonly, non-idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and organized, but it doubles as a dump of the whole Gambit workflow, devoting four numbered sections to describing sibling tools (add_gambit_evidence, what_if_gambit, plan_gambit) that have their own definitions. Length is partially justified by the absent output schema, but much of the middle does not directly serve calling this tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully specifies the return payload (status, user_view_id, produced_by, based_on_version, view, differs, problems, view null on unreadable input) and every failure mode. Nothing an agent needs to invoke and interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the prose adds real meaning: based_on_version conflict behavior (409 pack_changed and re-form the view), model naming rules including reserved_model_name for "gambit", and that view must match the pack's output_schema. The schema itself already documents these fields well, so the gain is incremental rather than decisive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: submitting YOUR OWN model's view of one ticker over the gambit connector, and explicitly frames the personal-layer nature. An agent can distinguish it from get_gambit_pack and get_gambit without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the exact workflow (call get_gambit_pack, form the take with the pack's rules and output_schema, then call submit_gambit_view) and enumerates when/why each sibling is used instead (add_gambit_evidence, what_if_gambit, plan_gambit). Recovery paths on 409 pack_changed are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_onboardingSubmit onboarding surveyA
Idempotent
Inspect

Store the onboarding survey (requires api:account). Current schema is version 4. q1 investing experience: 10y_plus | 5_10y | 2_5y | 1_2y | under_1y | not_started. q2 markets (one or more): fx | commodities | bonds | us_equities | non_us_equities | crypto | index_funds. q3 risk: no_risk | low | medium | high. q4 shape: conviction | diversified | no_preference. q5 and q6 are optional lists. q5: market_basics | market_briefs | stock_highlights | crypto_basics | innovation_digest. q6: substack_private | social | word_of_mouth | other. q3=no_risk stores the answer but does not provision an agent. After a successful submit, send the user to the agent_setup_url from get_setup_status so the app can derive the trading profile and they can approve the agent wallet.

NameRequiredDescriptionDefault
q1Yes
q2Yes
q3Yes
q4Yes
q5No
q6No

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), non-destructive, and idempotent. The description adds real value beyond them: the required api:account scope, the side-effect nuance that q3=no_risk stores the answer without provisioning an agent, and the post-submit handoff. This is meaningful behavioral context not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose well and is logically ordered, but it re-enumerates every enum value that already appears verbatim in the input schema, which is wasted text. Only the parameter labels and behavioral notes earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param write tool with no output schema, the definition covers the auth scope, all parameter meanings, the conditional provisioning rule, and the required next action. The only gap is an explicit statement of what a successful submit returns, which is partially implied by the handoff instruction.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it labels every parameter (q1 investing experience, q2 markets, q3 risk, q4 shape, q5/q6 optional lists). The enum value re-listing is largely redundant with the schema, but the semantic labels and the q5/q6 optionality note genuinely add meaning the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Store the onboarding survey') and frames it with schema versioning ('Current schema is version 4'). No sibling duplicates this action, and the follow-up reference to get_setup_status makes the workflow boundary explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: submit the completed survey, then route the user to agent_setup_url from get_setup_status. It also names the conditional branch (q3=no_risk) that changes downstream behavior. No explicit when-not-to-use, but the workflow framing is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_opportunityTrack an opportunity as a GambitA
Idempotent
Inspect

Track a Today's Market opportunity as one of YOUR Gambits (requires api:account) — the same action as Track in the Gambit app. opportunity_id comes from get_opportunities (mo_ + 32 hex). Gambit opens a Gambit for it, or joins your existing live Gambit on the same subject, and saves the card. Monitoring starts paused: turn it on with update_gambit_monitoring. Returns case_id (pass it to get_gambit), created (a new Gambit) or joined (an existing one), state, monitoring_status and monitor_interval_minutes. Safe to retry: the same opportunity never opens a second live Gambit. To retry one request exactly, pass the same idempotency_key both times (a fresh key is generated when you omit it). If you already track more than one Gambit on that subject the call answers 409 with code tracking_target_required and choices [{case_id, title}]: ask the user which one, then call again with target_case_id. scenario_id picks one of the card's plan scenarios (scenario:… from get_opportunity_detail). This places no order. The response carries app_url, the Gambit's screen.

NameRequiredDescriptionDefault
scenario_idNo
opportunity_idYesid from get_opportunities, e.g. mo_0123…
target_case_idNowhich of your Gambits to join, from a 409's choices
idempotency_keyNoreuse the same key when retrying one request; generated when omitted

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint=false, idempotentHint=true, and destructiveHint=false, but the description adds substantial context beyond them: monitoring starts paused, an existing live Gambit is joined rather than duplicated, retries are safe, idempotency_key reuse semantics, and no order is placed. The disclosed return fields and 409 error path go well past annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and scope, and every clause carries operative information (auth requirement, id format, retry behavior, error path, return fields). It is dense in a single long paragraph rather than broken into scannable segments, which slightly hurts navigation but not signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full return contract (case_id, created/joined, state, monitoring_status, monitor_interval_minutes, app_url) and the failure mode (409 with code and choices). Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema already documents id, target_case_id, and idempotency_key; the description still adds value by tying scenario_id to the 'scenario:…' prefix from get_opportunity_detail and explaining that target_case_id originates from a 409's choices array. opportunity_id's origin partly duplicates the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Track a Today's Market opportunity as one of YOUR Gambits') and immediately distinguishes itself from siblings by noting it is 'the same action as Track in the Gambit app' and that it places no order, unlike order-oriented siblings. An agent can separate it from create_gambit, evaluate_opportunity, and get_opportunities without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: opportunity_id comes from get_opportunities, scenario_id from get_opportunity_detail, monitoring is turned on via update_gambit_monitoring, and case_id is passed to get_gambit. It also handles the ambiguous case (409 tracking_target_required) with a concrete next step (ask the user, then call with target_case_id).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_gambit_monitoringChange or stop a Gambit's monitoringA
DestructiveIdempotent
Inspect

Change what Gambit watches for one of YOUR Gambits, or stop tracking it (requires api:account) — the call for "stop tracking GOOGL" (find the case_id with list_gambits). active=false pauses monitoring: Gambit stops checking it, and the Gambit and its history stay readable. active=true turns monitoring on or resumes it. monitor_interval_minutes (15 | 30 | 60 | 120 | 240) sets how often it is checked. update_categories (news, market_activity, assessment) sets what it watches for. Send at least one of the three. Only a live Gambit (state open or watching) can change; one that is not yours, or not live, answers 404. Returns the Gambit in full, as get_gambit does. Confirm with the user before stopping a Gambit. The response carries app_url, this Gambit's screen.

NameRequiredDescriptionDefault
activeNofalse stops tracking (pauses monitoring); true turns it on
case_idYesa Gambit id from list_gambits (UUID)
update_categoriesNo
monitor_interval_minutesNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it explains that active=false pauses rather than deletes ('the Gambit and its history stay readable'), that active=true resumes, that a non-live or non-owned Gambit answers 404, the api:account requirement, and that the full Gambit is returned. This is meaningful disambiguation of the destructiveHint=true annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, and every sentence carries information despite being a dense single paragraph. It is on the long side and packs several distinct ideas (routing, semantics, error behavior, confirmation) into one block, which slightly hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still specifies the return ('the Gambit in full, as get_gambit does') and the app_url field, plus error behavior and mutation prerequisites. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates by defining the meaning of every parameter: active toggles pause/resume, monitor_interval_minutes sets check frequency with its allowed values, and update_categories sets what is watched. It also constrains case_id to a UUID from list_gambits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'Change what Gambit watches for one of YOUR Gambits, or stop tracking it.' It names the related siblings (list_gambits for the case_id, get_gambit for the return shape), so an agent can distinguish it from neighbouring tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: it names the trigger utterance ('stop tracking GOOGL'), tells the agent how to obtain the argument (find the case_id with list_gambits), and adds a procedural constraint ('Confirm with the user before stopping a Gambit'). Usage conditions and the required-argument rule ('Send at least one of the three') are all stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_preferencesReplace a preference setA
Idempotent
Inspect

Replace one of YOUR preference sets (requires api:account). kind=market_brief takes market_brief; kind=trade_routing takes trade_routing. Each REPLACES THE WHOLE SET: a field you leave out goes back to its default. So call get_preferences with the same kind first, change only what the user asked for, and send the whole set back. The response echoes what was stored. market_brief: hidden_rows ({category: [row ids]}, categories global | crypto | fx | commodities | sectors | bonds, ≤64 ids each), crypto_rows (3-12), display ({timeframe: 1d | 5d | 1m | 3m | ytd | 1y, view: list | bars | lines, layout: grid | full}), opportunity_hidden_subjects (asset:… subject ids, ≤256), opportunity_hidden_asset_classes (equity | crypto | commodity | fx | index | prediction) and opportunity_hyperliquid_only. trade_routing: default_destination (hyperliquid | brokerage) and symbol_overrides ({TICKER: hyperliquid | brokerage}, ≤200, US tickers only) — it preselects the trade ticket's destination; it never routes or places an order. The trading profile (risk caps, agent mode, chat execution) cannot be changed here.

NameRequiredDescriptionDefault
kindYes
market_briefNoREQUIRED for kind=market_brief: the whole set
trade_routingNoREQUIRED for kind=trade_routing: the whole set

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare mutation/idempotency flags; the description supplies the critical behavior the agent cannot infer elsewhere — whole-set replacement where omitted fields revert to defaults, an api:account auth requirement, and a response echo. It also preempts a dangerous misreading by stating trade_routing 'never routes or places an order.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the highest-stakes facts (replace-not-merge, fetch-then-resend) before the dense per-field reference. The long parenthetical enumerations are information-dense rather than filler, though the block is heavier than strictly necessary for an agent that can read the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description covers the return behavior ('The response echoes what was stored'). Combined with the replace semantics, auth scope, per-kind field expectations, and the out-of-scope profile note, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage across nested objects, the description compensates well: it names the hidden_rows categories (global | crypto | fx | commodities | sectors | bonds), the 3-12 and ≤64 limits, the opportunity_hidden_subjects 'asset:…' id shape, and the ≤200 US-ticker constraint on symbol_overrides. Some of this restates schema enums, but it adds meaning (e.g., what symbol_overrides actually preselects) rather than just echoing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+ownership scope ('Replace one of YOUR preference sets (requires api:account)') and immediately disambiguates the two variants via kind. It clearly distinguishes itself from the sibling get_preferences, which it explicitly tells the agent to call first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit workflow (call get_preferences with the same kind, change only what the user asked for, send the whole set back) and names the sibling to use. It also gives a hard exclusion: 'The trading profile (risk caps, agent mode, chat execution) cannot be changed here.' Both when-to-use and when-not are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_watchlistAdd to or remove from my watchlistA
Idempotent
Inspect

Add a symbol to YOUR watchlist (action=add) or remove it (action=remove); requires api:account. Idempotent: adding a starred symbol or removing an absent one is a no-op. symbol is a canonical market id: a perp ticker (BTC), a spot pair (PURR/USDC), a HIP-3 symbol (xyz:TSLA) or a spot index (@107). This changes a list only; it never trades.

NameRequiredDescriptionDefault
actionYes
symbolYese.g. BTC, PURR/USDC, xyz:TSLA

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which already flag non-readonly, non-destructive, idempotent), the description explains the concrete idempotent behavior ('adding a starred symbol or removing an absent one is a no-op') and adds the auth scope requirement and the reassurance 'it never trades'. These are genuine behavioral additions beyond the hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with purpose, then idempotency, then symbol formats and a side-effect boundary. Every clause carries information and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation with no output schema, the description covers purpose, both parameters, auth scope, idempotency semantics, and the assurance that no trading occurs. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema description coverage (action is an undescribed enum), the description carries much of the load: it maps action=add/remove to outcomes and defines the canonical symbol taxonomy (perp ticker, spot pair, HIP-3 'xyz:TSLA', spot index '@107'). The '@107' format is not present in the schema, so this is real added meaning, though action values are just restated from the enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a symbol to YOUR watchlist ... or remove it') plus the exact action values that select each direction. An agent can immediately distinguish this mutation tool from the read sibling get_watchlist without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear in-tool routing via action=add/remove and states the required scope ('requires api:account'), so the agent knows the precondition. It stops short of naming an explicit alternative (e.g. get_watchlist to read, or when-not-to-use), so it is strong but not fully prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

what_if_gambitAsk what the view would be if something happenedAInspect

What the view of one ticker would be if something happened (requires api:read) — the call for "what if the ETF is approved?". The chain for one ticker. Everything it stores is in YOUR personal layer: the shared view never changes because of it. Over this connector Gambit runs no model for you: YOUR OWN model does the personal work. (1) Add data: add_gambit_evidence stores a fact you know. It is labelled unconfirmed until Gambit confirms it from an official or wire source that states it; a confirmed fact's source joins the shared evidence, and the shared view uses it on its normal run. (2) Your view: the take formed again on top of the shared take plus your facts, which are assumed true for your view only. To form it: call get_gambit_pack, form the take with the rules and output_schema in the pack, then call submit_gambit_view. (3) What if: what_if_gambit gives the view if something happened; when the question matches a dated condition the view already lists, the answer is precomputed and no model runs; otherwise it returns the pack with the event added, for your model to answer. (4) Plan: plan_gambit gives entry, stop, size and exits from your own limits. A plan is not a recommendation to trade and places no order. question (1-1000 characters): the event, in plain words. watch_id (optional): the watch_id of a pending condition, from view.prove_us_wrong[].watch_id or view.would_strengthen[].watch_id in get_gambit (from your_view.view instead when you have your own view), to ask about exactly that condition. The answer starts from your latest accepted view while get_gambit still shows it, else from the shared view (based_on names which, and the shared version it rests on). When the question matches a condition the view already lists (or you pass its watch_id), the answer is precomputed and no model runs: source precomputed, lean_if, condition, check_by and explanation; it is kept, so asking again answers from it (cached true). A question that only looks like a listed condition is not given that condition's answer, and neither is a question about the opposite event (not approved, or below instead of above). Otherwise the answer is source your_model: pack (the shared take with everything behind it, with the event added as the item marked kind assumption), rules (assume the event has happened and give the take as if it had: which levers it moves, by how much against what is priced) and output_schema. Answer it with your own model, keeping to the rules; Gambit runs no model, stores nothing and counts nothing for it. A what-if never changes any stored view. Errors: 409 gambit_building when Gambit has no view of the ticker yet (get_gambit by symbol queues it; try again later); 404 unknown_symbol; 422 ambiguous_symbol with candidates (call again with one candidate as the symbol); 404 unknown_watch when watch_id names no open condition of the view; 503 gambit_reads_disabled while these reads are switched off.

NameRequiredDescriptionDefault
symbolYesa ticker such as BTC or NVDA, or an exact id such as xyz:GOOGL or ref:eq:IP, as for get_gambit
questionYesthe event to assume, in plain words
watch_idNoa pending condition's watch_id, from view.prove_us_wrong or view.would_strengthen in get_gambit

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the api:read requirement, personal-layer isolation, shared-view immutability, no-model-run behavior, precomputed-vs-your_model response paths, caching behavior, and specific error codes. The annotations alone would not communicate any of this operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a sprawling mini-manual that detours into sibling workflows, personal-layer behavior, and repeated no-model/no-store claims. Although the purpose is front-loaded and some numbered structure exists, the signal is buried under excessive detail and redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description explains both possible return paths in detail: the precomputed source with lean_if, condition, check_by and explanation, and the your_model source with pack, rules, and output_schema. It also documents error conditions, making the definition complete for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3. The description adds meaningful parameter context, especially the provenance of watch_id from view.prove_us_wrong[].watch_id or view.would_strengthen[].watch_id in get_gambit, and clarifies that question is the event in plain words.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific hypothetical-view operation for one ticker and explicitly frames it as the call for questions like 'what if the ETF is approved?' It distinguishes itself from siblings by naming get_gambit, add_gambit_evidence, get_gambit_pack, submit_gambit_view, and plan_gambit, so an agent can identify its role without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: use it for what-if questions, pass watch_id to target a listed condition, expect a precomputed answer when the question matches a dated condition, otherwise expect a pack to answer with your own model. It also names alternatives and explains when the question is not eligible for a listed condition's answer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiCheck granted scopesA
Read-onlyIdempotent
Inspect

Your API key's granted scopes and what each unlocks. Call this before attempting writes, or when a tool returns a 401/403 scope error, instead of retrying.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds real behavioral context beyond that: it is a diagnostic call whose purpose is to prevent futile retry loops on permission errors, and it hints at the shape of the response ('what each unlocks'). It stops short of describing return format explicitly, but with no output schema that is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste: the first front-loads what the agent gets back, the second front-loads the trigger condition and the alternative to avoid. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool, the description carries the full burden of explaining returns and does so adequately ('granted scopes and what each unlocks'). The only shortfall is that it does not say whether the response enumerates specific tools or resources blocked by missing scopes, which would help an agent act on a 403.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to compensate for. The description correctly implies a no-argument diagnostic call by focusing entirely on the returned data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool returns – the API key's granted scopes plus what each scope unlocks – which resolves the ambiguity of the opaque name 'whoami'. It does not explicitly contrast with any sibling, but no sibling tool overlaps this diagnostic function, so an agent can identify it without difficulty.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call it (before attempting writes, or on a 401/403 scope error) and names the anti-pattern it replaces ('instead of retrying'). This is a genuine decision rule, not implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Addedget_compute_pricing
  2. 2 tool updates
    • Addedget_sector_radar
    • Changedsave_signal3 fields changed
      • addedInput schema / properties / queries / items / properties / params / $ref
        Added value: +"#/properties/query/properties/params"
      • removedInput schema / properties / queries / items / properties / params / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / queries / items / properties / params / type
        Removed value: -"object"
  3. 1 tool update
    • Addedget_opportunity_scoreboard
  4. 1 tool update
    • Changedscan_markets1 field changed
      • addedInput schema / properties / reverse / description
        Added value: +"Sort direction override: false = ascending (lowest/most negative first, e.g. top 24h losers with sort_by=price_change), true = descending (highest first). Omit for the sort field's default direction."
  5. 2 tool updates
    • Changedask_gambit_agent1 field changed
      • addedInput schema / properties / case_id
        Added value: +{
        +  "description": "talk about this Gambit in its own conversation; a Gambit id from list_gambits (UUID)",
        +  "format": "uuid",
        +  "type": "string"
        +}
    • Changedget_opportunities1 field changed
      • changedInput schema / properties / sort / description
        Previous value: -"re-order by first detection time or a community tally"New value: +"re-order by detector first-seen time (first_seen_ts, not publication) or a community tally"
  6. 1 tool update
    • Changedget_gambit1 field changed
      • addedInput schema / properties / price_levels
        Added value: +{
        +  "description": "default false: add the price-level add-on (key levels, and wrong-if / confirms-if closes with dates) when the view has one",
        +  "type": "boolean"
        +}
  7. 1 tool update
    • Changedrate_opportunity1 field changed
      • changedInput schema / properties / rating / enum
        Previous value: -[
        -  "up",
        -  "down"
        -]New value: +[
        +  "up",
        +  "down",
        +  "clear"
        +]
  8. 8 tool updates
    • Addedadd_gambit_evidence
    • Changedget_gambit4 fields changed
      • changedInput schema / properties / case_id / description
        Previous value: -"a Gambit id from list_gambits (UUID)"New value: +"a Gambit id from list_gambits (UUID); pass case_id or symbol, not both"
      • addedInput schema / properties / mark_seen
        Added value: +{
        +  "description": "symbol reads only, default true: record that the user has now seen this version",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "a ticker such as BTC or NVDA, an exact id such as xyz:GOOGL or ref:eq:IP (the US stock), or a candidate subject id from ambiguous_symbol; pass symbol or case_id, not both",
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "case_id"
        -]
    • Changedget_gambit_history7 fields changed
      • addedInput schema / properties / before_version
        Added value: +{
        +  "description": "symbol reads only: next_before_version from the previous page",
        +  "maximum": 2147483647,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / case_id / description
        Previous value: -"a Gambit id from list_gambits (UUID)"New value: +"a Gambit id from list_gambits (UUID); pass case_id or symbol, not both"
      • changedInput schema / properties / cursor / description
        Previous value: -"history and entries only: next_cursor from the previous page"New value: +"case_id history and entries only: next_cursor from the previous page"
      • changedInput schema / properties / limit / description
        Previous value: -"history and entries only"New value: +"symbol reads, and case_id history and entries"
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "a ticker such as BTC or NVDA, an exact id such as xyz:GOOGL or ref:eq:IP (the US stock), or a candidate subject id from ambiguous_symbol; pass symbol or case_id, not both",
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / view / description
        Added value: +"case_id reads only"
      • removedInput schema / required
        Removed value: -[
        -  "case_id"
        -]
    • Addedget_gambit_pack
    • Changedget_tracking_updates1 field changed
      • addedInput schema / properties / include_gambit_changes
        Added value: +{
        +  "description": "default false; true also returns gambit_changes for the tickers you follow",
        +  "type": "boolean"
        +}
    • Addedplan_gambit
    • Addedsubmit_gambit_view
    • Addedwhat_if_gambit
  9. 1 tool update
    • Addedleave_feedback
  10. 1 tool update
    • Addedcreate_gambit
  11. 5 tool updates
    • Addedconfirm_stock_order
    • Addedevaluate_opportunity
    • Addedget_stock_order
    • Addedpropose_stock_order
    • Addedreview_opportunity_trade
  12. 4 tool updates
    • Changedask_gambit_agent1 field changed
      • addedInput schema / properties / image_urls
        Added value: +{
        +  "description": "url values returned by POST /api/chat/images",
        +  "items": {
        +    "format": "uri",
        +    "maxLength": 512,
        +    "type": "string"
        +  },
        +  "maxItems": 24,
        +  "minItems": 1,
        +  "type": "array"
        +}
    • Addedget_conversation
    • Addedlist_conversations
    • Addedmanage_conversation
  13. 5 tool updates
    • Addedget_portfolio_performance
    • Addedget_wallets
    • Addedlist_brokerages
    • Addedmanage_news_sources
    • Addedunlink_brokerage
  14. 32 tool updates
    • Addedadjust_margin
    • Addedclose_all_positions
    • Addeddelete_mandate
    • Addedexecute_recommendation
    • Addedget_calendar
    • Addedget_daily_move_context
    • Addedget_daily_move_plan
    • Addedget_exposures
    • Addedget_fills
    • Addedget_fired_signals
    • Addedget_lesson
    • Addedget_liquidation_map
    • Addedget_market_brief
    • Addedget_news_feed
    • Addedget_opportunity_news
    • Addedget_orderbook
    • Addedget_plan_usage
    • Addedget_preferences
    • Addedget_symbol_research
    • Addedget_watchlist
    • Addedlist_signals
    • Addedmark_lesson_read
    • Addedrate_opportunity
    • Addedrespond_to_signal
    • Addedresync_protection
    • Addedsave_mandate
    • Addedsave_signal
    • Addedsearch_symbols
    • Addedtrack_opportunity
    • Addedupdate_gambit_monitoring
    • Addedupdate_preferences
    • Addedupdate_watchlist
  15. 9 tool updates
    • Addedget_gambit
    • Addedget_gambit_history
    • Addedget_home_insight
    • Addedget_mandate
    • Addedget_mandate_activity
    • Addedget_my_opportunity_marks
    • Addedget_tracking_updates
    • Addedlist_gambits
    • Addedlist_mandates
  16. 28 tool updates
    • First observedask_gambit_agent
    • First observedconfirm_trade
    • First observedgenerate_recommendation
    • First observedget_account_balances
    • First observedget_bars
    • First observedget_daily_moves
    • First observedget_equity_flow
    • First observedget_feature
    • First observedget_holdings
    • First observedget_live_snapshot
    • First observedget_market_regime
    • First observedget_news_headlines
    • First observedget_open_orders
    • First observedget_opportunities
    • First observedget_opportunity_detail
    • First observedget_portfolio_updates
    • First observedget_positions
    • First observedget_prices
    • First observedget_sentiment
    • First observedget_setup_status
    • First observedlist_recommendations
    • First observedpropose_trade
    • First observedrespond_to_recommendation
    • First observedrotate_api_key
    • First observedscan_markets
    • First observedstart_brokerage_connect
    • First observedsubmit_onboarding
    • First observedwhoami

Publisher details

Operator
EMBR DEV PTE. LTD. · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Requires a Gambit account; the user signs in and chooses scopes at connect. Trading is a separate opt-in scope (api:trade), executes only from the user's agent wallet after a human confirms, and needs trading enabled on the account. Some functionality may be unavailable in the United States and other jurisdictions; sanctioned regions are excluded. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to securely trade on Hyperliquid perpetual exchange, including order placement, position management, market data retrieval, and vault operations via natural language.
    24
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language trading of Hyperliquid perpetual futures, including portfolio checks, market data, order placement with confirmation, and position management.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Perpetual futures trading API for AI agents. Access 275+ markets (crypto, stocks, commodities, forex) via Hyperliquid. Copy trading, leaderboard, up to 50x leverage. No KYC. 20% referral commissions.
    31 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources