Plumbline
Provides read-only Sui DeepBook v3 market data, including pools, mid price and spread, order book depth, volume, live on-chain fees, recent trades, OHLCV candles, BalanceManager fills, swing ranges, pool stats, and fee estimates.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
The Spice Melange Trading Desk: DeepBook market data connector
Read-only DeepBook v3 market data for AI agents. (Package, server id and endpoint keep the name plumbline.)
The Spice Melange Trading Desk (DeepBook market data connector, package plumbline-mcp) is a free, read-only Model Context Protocol server for Sui DeepBook v3 market data. It gives agents pools, mid price and spread, order book depth, volume, live on-chain fees, recent trades and OHLCV candles.
No API keys, no wallet, no signing, no trading. Every tool is annotated
readOnlyHint: true.Small outputs. Compact JSON with column/row arrays for series and sensible rounding.
Fast and polite. An in-memory TTL cache (2 s for books, up to 10 min for metadata), de-duplicated requests and 8 s timeouts.
Disclaimer: for education and information only. This is not financial, investment, legal or tax advice. Data comes from public third-party sources (the Mysten Labs DeepBook indexer and Sui GraphQL). It may be delayed, incomplete or wrong, and is provided "as is" without warranty. Nothing here recommends buying, selling or holding any asset.
Quickstart
npx -y plumbline-mcpThe server runs over stdio and needs Node.js 18.17 or later. It needs no configuration.
Claude Code
claude mcp add plumbline -- npx -y plumbline-mcpClaude Desktop, Cursor, Windsurf, VS Code or any stdio client
Add this to your client's MCP config (claude_desktop_config.json, ~/.cursor/mcp.json, and so on):
{
"mcpServers": {
"plumbline": {
"command": "npx",
"args": ["-y", "plumbline-mcp"]
}
}
}Smithery
npx -y @smithery/cli@latest mcp add nazarenechalice/plumbline --client claude # or cursor, claude-code, vscode, windsurf, ...You can also open the Smithery listing. For one-click Claude Desktop install, download the .mcpb bundle there.
Hosted endpoint (remote, nothing to install)
A hosted instance runs at https://plumbline-mcp.fly.dev/mcp (streamable HTTP, stateless, JSON responses; health at /health, server card at /.well-known/mcp/server-card.json).
claude mcp add --transport http plumbline https://plumbline-mcp.fly.dev/mcpAny client that takes a remote MCP URL (Cursor, VS Code, Claude Desktop connectors, Windsurf):
{
"mcpServers": {
"plumbline": { "type": "http", "url": "https://plumbline-mcp.fly.dev/mcp" }
}
}The hosted endpoint gives each client 100 free tool calls per UTC day, then 0.002 USDC per call, prepaid in USDC on Sui mainnet in batches of about 0.01 USDC. get_indexer_status is always free. After the free calls, a tool returns an x402-style payment-required result with an exact amount and a private payment_token; see docs/PAYMENTS.md. The npm/stdio package stays free with no limits.
Streamable HTTP (self-hosted)
npx -y plumbline-mcp --http --port 8081 # POST http://127.0.0.1:8081/mcp, GET /health
HOST=0.0.0.0 PORT=8081 npx -y plumbline-mcp --httpHTTP mode is stateless and returns JSON. It also serves a static server card at /.well-known/mcp/server-card.json and rate-limits each client to 120 requests per minute. Put it behind TLS before you expose it. Hosting notes are in deploy/DEPLOY.md.
Related MCP server: 0xarchive-mcp
Ask your agent
"What's the spread on DeepBook SUI_USDC right now?"
"How much liquidity is within 1% of mid on SUI_USDC?"
"Show 1h candles for DEEP_USDC for the last day."
"Which DeepBook pools had the most volume in the last 24 hours?"
"What are the current taker and maker fees on SUI_USDC?"
The server also ships prompts (market_snapshot, compare_pools, liquidity_check) and resources (plumbline://guide, plumbline://disclaimer).
Tools
Tool | What it returns | Key inputs |
| All DeepBook pools: base/quote, tick, lot, min size, active flag |
|
| Best bid/ask, mid, spread (abs and bps), last price |
|
| Top N levels per side, plus base qty and quote notional within ±X% of mid |
|
| 24h base/quote volume, high/low, % change, VWAP; or top pools by volume; or a custom trailing window |
|
| Taker/maker fee (pct and bps), DEEP stake required, tick/lot/min, whitelist/stable flags, vault balances (live on-chain) |
|
| Latest fills: time, taker side, price, base and quote qty, buy/sell stats |
|
| Candles, oldest first; volume in the base asset |
|
| Data-source health and freshness | none |
| Fills where one BalanceManager was maker (or taker): time, its side, price, qty, fee and fee token, tx |
|
| 1h/4h/24h range, realized vol, regime (CALM < 2%, ELEVATED 2-4%, HIGH_VOL > 4% 4h range) and a suggested rung count 3/4/5 |
|
| Scorecard-style stats over N hours: trades, taker buy/sell split, volume, VWAP, avg trade, range, spread |
|
| Fee for a fill paid in the input token (rate x 1.25) vs in DEEP (base rate), from live on-chain rates |
|
Pool names use BASE_QUOTE (for example SUI_USDC). Input is case-insensitive, and sui/usdc or SUI-USDC also work. An unknown pool returns a clear error with suggestions; USDC_SUI, for example, suggests SUI_USDC.
Example output (live, Oct 9 2026)
get_mid_price with {"pool":"SUI_USDC"}:
{"pool":"SUI_USDC","quote":"USDC","best_bid":1.0708,"best_ask":1.07106,"mid":1.07093,"spread":0.00026,"spread_bps":2.428,"last_price":1.0708,"as_of":"2026-10-09T08:38:03.997Z"}One depth band from get_order_book (an earlier snapshot the same day):
{"pct":1,"bid_base":204536.4,"bid_quote":216152.61,"ask_base":105721.5,"ask_quote":113063.72,"bid_levels":26,"ask_levels":27}get_pool_params with {"pool":"SUI_USDC"} (read live from the on-chain Pool object; trimmed):
{"pool":"SUI_USDC","source":"sui-onchain","taker_fee":{"pct":0.02,"bps":2},"maker_fee":{"pct":0,"bps":0},"stake_required_deep":100000,"tick":0.00001,"lot":0.1,"min_size":1}get_ohlcv with {"pool":"SUI_USDC","interval":"1h","limit":2}:
{"pool":"SUI_USDC","interval":"1h","count":2,"cols":["open_time","open","high","low","close","volume_SUI"],"candles":[["2026-10-09T07:00:00Z",1.0658,1.07579,1.06268,1.07543,66001],["2026-10-09T08:00:00Z",1.07529,1.07817,1.06721,1.0708,26347.5]]}Configuration (all optional)
Env var | Default |
|
|
|
|
|
|
|
|
How it compares
Plumbline only reads data. Trading MCPs for DeepBook build transactions and may hold keys. Broad Sui analytics MCPs cover many protocols. Plumbline goes deep on DeepBook market data: depth bands around mid, live on-chain fees, OHLCV and pool-name suggestions. You can give it to any agent without risk to funds.
Data sources: books, trades, volume and candles come from the public DeepBook indexer. Fees and pool parameters come from the live Pool object via Sui GraphQL.
Optional: pay-per-call (off by default)
The stdio package is always free. The hosted endpoint meters calls (100 free per day, then 0.002 USDC per call). A self-hosted HTTP operator can choose to meter calls too, for example 100 free calls per day and then 0.002 USDC per call, paid in USDC on Sui. Metering is disabled unless PLUMBLINE_PAYMENTS=1 is set. The server is receive-only and never holds keys. The full design and security model are in docs/PAYMENTS.md.
Build from source
git clone https://github.com/SajanMelcher/plumbline-mcp.git
cd plumbline-mcp
npm install && npm run build
node dist/index.js # stdio; add --http for HTTPDevelopment
npm test # live tests against the public indexer (SUI_USDC); needs network
npm run smoke # spawns the server over stdio and calls every tool via the MCP client
npm run smoke:http # same over streamable HTTP
npm run inspector # MCP Inspector UI
npm run payments:testnet # Sui testnet end-to-end with a throwaway payer (needs testnet SUI + USDC)
npm run pack:mcpb # MCPB bundle at build/plumbline.mcpb, validated with mcpb + a Smithery payload check (publishes nothing)Notes and limits
The public indexer serves at most about 100 price levels per side. When a depth band reaches past that, the response marks it
truncated: true, and the value is a lower bound.list_poolsparameters come from indexer metadata.get_pool_paramsreads the live on-chain Pool object, so it is authoritative when tick sizes or fees change through governance.Fees are DeepBook fixed-point values (1e9 scale), converted to pct and bps.
No margin, balance-manager or wallet-specific endpoints are exposed.
Independence and name
Plumbline is named after a plumb line, the weighted cord used to measure depth and true vertical. Other candidates were Sounding and Tidemark. Plumbline is an independent community project. It is not affiliated with Mysten Labs, the Sui Foundation or DeepBook.
License
MIT. See LICENSE.
Store and desk tools (v0.3.3)
Four extra tools let an agent find, buy and join without a human checkout. They are free (not metered).
Tool | What it does |
| Templates, prices in Sui USDC, licence and the buying flow (from |
| Creates a store order and returns the payee, the exact amount and a private order token. Nothing is charged. A few orders per client per hour. |
| With your payment digest: verifies the payment on-chain and returns the download link. Without it: returns the order status. |
| The desk's weekly rhythm, with the ed25519 signature checked against the pinned release key. If the check fails, the call fails. Guidance only. |
You pay from your own wallet. The connector never holds keys or funds. Your order token goes only to https://thespicemelange.org (pinned), in a header, and is never stored. All sales are final. Not financial advice.
Safety details for the store tools:
Pinned store: they talk only to
https://thespicemelange.org. A preview store needs bothPLUMBLINE_STORE_URLandPLUMBLINE_ALLOW_PREVIEW_STORE=1, for testing only.Payee check:
create_template_orderreads the signedtemplates/versions.json, checked against the pinned release key. It refuses any order whose payee differs from the payee published there, or from the connector's own pin. Until the payee is published, the reply sayspayeeVerified: false: show the full address to your owner and get an explicit yes before paying.
Order limits (hosted). Each client (IPv4 address, or IPv6 /48) gets 3 new orders per hour and at most 2 unpaid orders open at once. The whole server allows 60 per hour and 15 open unpaid. These counters live in memory and reset when the server restarts. The store also enforces its own hourly limits, which persist in its KV: the hosted connector sends a store key and a hashed client id (never the IP), so the store limits each forwarded client separately instead of treating the connector's shared IP as one client. Unpaid orders expire after the store's 30-minute payment window.
Available Tools
16 toolscheck_template_orderVerify payment / get downloadAIdempotentInspect
With a digest: verify your on-chain payment for an order and get the signed download link (plus add-ons). Without: return the order's status (and a fresh link once paid). The token is sent only to the store, in a header, and is never stored. Educational templates, not financial advice; no returns promised. All sales final, except where the law requires otherwise. You pay from your own wallet; this connector never holds keys or funds.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Private order token from create_template_order (smt_...). Sent only to the store, in a header. | |
| digest | No | Sui transaction digest of your exact USDC payment | |
| order_id | Yes | Order id from create_template_order (SM-...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuinely new context: the token travels only in a header to the store and is never persisted, and the connector holds no keys or funds. It still omits failure behavior (unmatched digest, unpaid order) and any retry/rate-limit notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The mode logic is front-loaded and well ordered, which is exactly right. However, two sentences of transactional legal boilerplate ('not financial advice', 'all sales final') do not help an agent select or invoke the tool and dilute an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry return-value burden and handles part of it (signed download link plus add-ons; status plus a fresh link once paid). For a payment-verification tool it still leaves error and partial-payment outcomes unspecified, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies, but the description goes further by explaining the semantic role of 'digest' as the mode switch rather than just 'a Sui transaction digest'. The 'plus add-ons' phrase slightly enriches the intended output of the digest path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('verify your on-chain payment for an order and get the signed download link') and clearly splits the tool into two modes based on the presence of the digest parameter. An agent can tell it apart from create_template_order or list_templates 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional: use with a digest to verify a payment and mint the download link, omit it to poll order status. It does not name siblings (e.g. create_template_order) or state when this tool should *not* be used, so it falls short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_template_orderCreate a template orderAInspect
Create a store order for one template. Returns the order id, a PRIVATE order token (shown once; keep it secret), the payee and the EXACT Sui USDC amount to send from your own wallet before the expiry. Nothing is charged by this call. Limited to a few orders per client per hour. Educational templates, not financial advice; no returns promised. All sales final, except where the law requires otherwise. You pay from your own wallet; this connector never holds keys or funds.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | Template sku from list_templates, e.g. dune-saga-collection or fish-speakers | |
| No | Optional receipt email |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, but the description adds materially beyond them: nothing is charged by this call, the private token is shown once and must be kept secret, the payee and exact amount must be paid from the caller's own wallet before expiry, and the connector never holds keys or funds. This is exactly the kind of safety and side-effect context a write-path tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important facts are front-loaded: purpose, then return values, then payment obligations and limits. It runs long as a single paragraph, and the legal boilerplate ('no returns promised. All sales final...') is lower-value filler for an agent selecting a tool, but nothing is genuinely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so fully (order id, PRIVATE token shown once, payee, exact USDC amount, expiry). Combined with payment mechanics, custody disclaimer, and rate limits, an agent has everything needed to call and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with sku documented as sourced from list_templates and email as an optional receipt address. The description adds no parameter-level detail (no mention of the sku pattern or the email field), so it neither compensates for nor extends the schema. Baseline 3 applies when the schema carries parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('Create a store order for one template') and immediately follows with the concrete artifacts returned (order id, private token, payee, exact Sui USDC amount). This is clearly distinguishable from siblings like list_templates (enumeration) and check_template_order (status lookup).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lays out the usage flow well: create the order, then send the exact USDC amount from your own wallet before expiry, implying check_template_order as a subsequent step. It also states the rate limit context ('a few orders per client per hour'). It stops short of explicitly naming an alternative tool or stating when NOT to use it, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_feesFee estimate (input token vs DEEP)ARead-onlyIdempotentInspect
Estimated DeepBook fee for a fill of qty at price as maker or taker, paid in the input token (rate x 1.25) versus in DEEP (base rate), using the live on-chain fee rates and the DEEP_USDC mid. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | Base quantity | |
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| role | No | taker | |
| price | No | Price; defaults to the current mid |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context beyond that: it relies on live on-chain fee rates and the DEEP_USDC mid, and it warns that data may be delayed or wrong. It does not cover auth or rate limits, but the annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core fee-estimate behavior and stays compact. The disclaimer and data-caveat sentences are relevant, though slightly boilerplate, and do not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey the return concept. It does so by explaining that the estimate compares payment in the input token vs DEEP and depends on live rates and the DEEP_USDC mid, while also disclosing freshness limitations. The only minor gap is that it does not explicitly describe the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema documents most parameters, including qty, pool, and price defaults. The description adds conceptual meaning for role ('maker or taker') and the fee formula, but it does not expand on pool naming syntax beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: estimate the DeepBook fee for a fill of qty at price as maker or taker, comparing payment in input token vs DEEP. It is clear enough to distinguish the tool from generic pool-data siblings, but it does not explicitly name an alternative tool or scope boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit when-to-use or when-not-to-use guidance, nor does it name alternatives such as get_pool_params or get_mid_price. Usage is only implied by the phrase 'Estimated DeepBook fee'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bm_fillsFill history for a balance managerBRead-onlyIdempotentInspect
Fills (OrderFilled) where a given DeepBook BalanceManager was the maker or the taker in one pool, newest first: time, its side, price, qty, fee, tx. Public data; no keys. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| role | No | maker | |
| hours | No | Look-back window in hours (default 168 = 7 days) | |
| limit | No | ||
| balance_manager_id | Yes | DeepBook BalanceManager object id (0x + 64 hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive, so the description's 'public data; no keys' is largely confirmatory. However, it adds genuinely new behavioral context: results are newest-first, includes the returned fields (time, side, price, qty, fee, tx), and warns data 'may be delayed or wrong' — useful caveats not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and returned fields, then adds compact caveats. The 'Education/information only; not financial advice' sentence is boilerplate but short and possibly compliance-required, so it does not badly hurt concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and ordering, and covers data-reliability caveats. However, it leaves important parameter semantics (role default vs 'maker or taker', hours window, limit) under-explained, so an agent could mis-specify a query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description should compensate for the gaps. It only loosely references pool and role, does not explain the role parameter's maker-by-default behavior, and says nothing about the hours look-back or limit parameters (limit has no schema description). The parameter guidance is therefore incomplete relative to the stated coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (OrderFilled fills) and scope (one pool, given BalanceManager, maker or taker), which lets an agent distinguish this from price/volume/order-book siblings. The wording 'maker or the taker' is slightly at odds with the role parameter's default of maker, introducing a small ambiguity about whether both roles are always returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no sibling alternative is named (e.g., get_recent_trades). The agent must infer from the phrase 'fills history' that this is for per-balance-manager fill queries, which is minimal guidance at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_desk_rhythmDesk rhythm (signed guidance)ARead-onlyIdempotentInspect
The desk's weekly rhythm from https://thespicemelange.org/rhythm.json: focus pools, ladder windows, rung guidance, rebalance ranges, projects and lessons. The ed25519 signature is verified against the pinned release key, and the call fails closed if it doesn't match. Guidance only: no orders, no sizes in money, no promised returns. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the readOnly/idempotent/openWorld annotations: the data source URL, ed25519 signature verification against a pinned release key, fail-closed behavior on signature mismatch, and explicit content constraints (no orders, no monetary sizes, no promised returns, not financial advice). The fail-closed semantics are exactly the kind of trait 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence plus two short disclaimer clauses, front-loaded with the source and payload contents. Every clause carries information, though the disclaimer tail could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned content categories and stating the integrity guarantee and failure mode. Nothing an agent needs to call and interpret this tool correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema has nothing to document and the description needs to add no parameter meaning. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and enumerates its payload (focus pools, ladder windows, rung guidance, rebalance ranges, projects, lessons), which lets an agent distinguish it immediately from the market-data siblings like get_ohlcv or get_order_book. The verb is implicit in the tool name but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes context ('guidance only: no orders, no sizes in money, no promised returns') but never states when to call it versus alternatives, nor any prerequisites for invoking it. Usage is only implied by the content summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indexer_statusData source healthARead-onlyIdempotentInspect
Health and freshness of the public DeepBook indexer (status, latest checkpoint, server time). Use when data looks stale. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered structurally. The description adds genuinely new context beyond that: the data is public and 'may be delayed or wrong', which tells the agent how much to trust the result. The 'education only / not financial advice' line is boilerplate but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is returned and followed by when to use it. It is well-sized, though the legal disclaimer sentence is padding that does not help the agent invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only status endpoint with no output schema, the description is nearly complete: it says what comes back, when to call it, and how reliable the data is. Annotations carry the safety profile. Nothing essential is missing, though return-value structure is only sketched rather than detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document and the baseline is 4. The parenthetical list of returned fields (status, latest checkpoint, server time) is a useful stand-in for the absent output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the public DeepBook indexer) and enumerates what it reports: status, latest checkpoint, server time. That is much more concrete than a generic 'health check'. It does not explicitly differentiate itself from the many market-data siblings, keeping it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when data looks stale' gives a clear triggering condition for invoking the tool, so the agent knows when it is relevant. There is no explicit when-not guidance or reference to an alternative diagnostic tool, but for a single-purpose status endpoint the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mid_priceMid priceBRead-onlyIdempotentInspect
Best bid, best ask, mid price and spread (abs and bps) for a DeepBook pool, plus last trade price. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds one genuinely useful behavior note beyond that: the data 'may be delayed or wrong', which tells the agent not to treat values as authoritative. It says nothing about failure modes for an unknown pool name or whether the endpoint is cached/rate-limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payload the tool returns, and the three sentences are short. The disclaimer clause is boilerplate that occupies roughly a third of the text, but it is at least placed after the substantive content rather than before it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating every field returned, which is the most important thing for this tool. The remaining gap is error behavior for an invalid pool identifier, minor for a read-only single-param lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'pool' parameter is fully documented there, including the BASE_QUOTE format and slash/dash tolerance. The description adds no parameter detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (a DeepBook pool) and enumerates exactly what is returned: best bid, best ask, mid, spread in abs and bps, plus last trade price. That is a specific, checkable purpose. It does not explicitly contrast itself with get_order_book or get_pool_stats, which return overlapping market data, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Education/information only; not financial advice' is a legal disclaimer, not usage guidance. There is no statement of when to pick this over get_order_book (full book) or get_pool_stats (aggregates), nor any prerequisite or exclusion. An agent must infer the use case from the returned fields alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ohlcvOHLCV candlesARead-onlyIdempotentInspect
OHLCV candles for a DeepBook pool (oldest first). Intervals: 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. Volume is in the base asset. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| limit | No | Number of candles (1-500, default 24) | |
| end_time | No | Unix timestamp in SECONDS | |
| interval | No | 1h | |
| start_time | No | Unix timestamp in SECONDS |
TDQS
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 genuinely non-redundant context: results are oldest-first, volume is denominated in the base asset, and the data may be delayed or wrong — a data-quality caveat an agent cannot get from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource and ordering, then intervals, then caveats. The legal/educational disclaimer is boilerplate but brief enough to not crowd out the operational content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining returns and does so partially: OHLCV column semantics are implied by the acronym, ordering and volume unit are stated. It omits how to page backwards through history with start_time/end_time, which is the main remaining gap for a 5-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% — pool format, limit range, and second-based timestamps are already documented in the schema itself. The description repeats the interval list from the enum and adds no syntax or semantics beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (OHLCV candles) bound to a specific object (a DeepBook pool) and adds the ordering guarantee (oldest first). It does not explicitly name which sibling it replaces, so an agent must infer the boundary versus get_volume, get_swing_range, or get_recent_trades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Enumerating the supported intervals implies the charting/time-series use case, but there is no explicit when-to-use, when-not, or pointer to an alternative such as get_recent_trades for raw fills. The guidance 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_order_bookOrder book depthARead-onlyIdempotentInspect
Order book for a DeepBook pool: top N price levels per side and cumulative liquidity (base qty and quote notional) within ±X% of mid. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| levels | No | Price levels to return per side (1-100, default 10) | |
| within_pct | No | Depth bands as % distance from mid, e.g. [0.5, 1, 2] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds a real caveat the annotations don't: data 'may be delayed or wrong', which matters for trading-adjacent reads. No disclosure of rate limits, ordering, or whether the book is a snapshot, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is dense and front-loaded, but roughly half the text is legal boilerplate ('Education/information only; not financial advice') that does not help an agent decide or invoke. Trimmable without losing invocation-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does reasonably: price levels per side plus cumulative base/quote liquidity. It stops short of saying whether mid price and the band boundaries are echoed in the response, or how levels are ordered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds value by explaining that within_pct yields cumulative base quantity and quote notional near mid – semantics the schema only hints at with 'Depth bands as % distance from mid'. It also restates 'top N levels per side' for levels, reinforcing the per-side unit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (DeepBook pool order book) and a precise scope: top N price levels per side plus cumulative liquidity within ±X% of mid. An agent can separate it from get_mid_price (single mid) and get_volume (aggregate volume) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'order book depth' – depth/liquidity inspection – but the description never states when to prefer this over get_volume, get_pool_stats, or get_mid_price, nor any exclusions. Context ('read-only public data') is present but no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pool_paramsFees and pool parametersARead-onlyIdempotentInspect
Taker/maker fees, DEEP stake required, tick/lot/min size, whitelist/stable flags and vault balances for a DeepBook pool. Reads the live on-chain Pool object via Sui GraphQL; falls back to indexer pool-creation values if GraphQL is unavailable. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint false), yet the description adds genuinely new behavior: it reads the live on-chain Pool object via Sui GraphQL and silently falls back to indexer pool-creation values if GraphQL is unavailable, plus a data-may-be-delayed-or-wrong caveat. That fallback path materially affects how the agent should trust the result, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The tool-specific content is front-loaded in the first two sentences with no wasted words. The trailing 'Education/information only; not financial advice' sentence is boilerplate legal hedging rather than operational guidance, though it is short enough not to seriously harm the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, no output schema, and annotations already declaring read-only behavior, the description fills the remaining gaps well by naming the returned field groups, the data source, the fallback source, and the staleness risk. An agent can decide whether to call it and how much to trust the result without further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'pool' parameter is already documented as BASE_QUOTE with case-insensitive '/'-or-'-' separators, so the description adds no format or constraint detail beyond it. Baseline 3 is appropriate when the schema fully carries parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the exact data returned (taker/maker fees, DEEP stake, tick/lot/min size, whitelist/stable flags, vault balances) for a DeepBook pool, which is far more specific than the title. It does not explicitly distinguish itself from the close sibling get_pool_stats, leaving the agent to infer the boundary between 'parameters' and 'stats'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content list (call this when you need fee tiers or lot-size constraints), and the GraphQL-with-indexer-fallback note tells the agent what happens if the primary source fails. However, there is no explicit when-to-use/when-not guidance and no mention of an alternative sibling such as get_pool_stats or estimate_fees.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pool_statsPool scorecard statsARead-onlyIdempotentInspect
Scorecard-style stats for one pool over the last N hours: trade count, taker buy/sell split, base/quote volume, VWAP, average trade size, price range, current spread. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| hours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds genuinely new context: the data is public, may be delayed or wrong, and is educational only. It does not mention rate limits or whether history is bounded, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the metric inventory is front-loaded, the disclaimer follows. The metric list is dense but every item earns its place by telling the agent what comes back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, enumerating returned fields is exactly the right compensating move, and the freshness caveat covers the main risk of acting on the data. Minor gap: no mention of pagination, limits, or what happens when hours exceeds the schema maximum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documents 'pool' thoroughly (format, case-insensitivity, separators) but leaves 'hours' undescribed; the description partly compensates with 'over the last N hours', clarifying the window semantics. With 50% coverage this is the expected baseline level of added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Scorecard-style stats for one pool') and enumerates the exact metrics returned, which distinguishes it as a composite metric tool rather than a single-metric one. It doesn't explicitly contrast with siblings like get_volume or get_ohlcv, so no sibling naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to prefer this over get_volume, get_mid_price, get_ohlcv, or get_recent_trades, despite heavy overlap in returned data. Only an implied 'aggregated dashboard' use case is present; no exclusions or selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_tradesRecent tradesARead-onlyIdempotentInspect
Most recent fills in a DeepBook pool (newest first): time, taker side, price, base and quote size. Optional time range. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| limit | No | Number of trades (1-200, default 20) | |
| end_time | No | Unix timestamp in SECONDS | |
| include_tx | No | Include transaction digests (longer output) | |
| start_time | No | Unix timestamp in SECONDS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world, non-destructive behavior. The description adds useful context beyond that: results are newest-first, may be delayed or wrong, and are public read-only data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the key purpose, return fields, optional range, and data caveat stated efficiently. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage and annotations, the definition is largely complete: it names the returned fields and warns about data freshness. The main remaining gap is lack of sibling differentiation for similar market-data tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters such as pool format, limit, and timestamp units are already documented. The description reinforces the optional time range and returned fields but does not add parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: "Most recent fills in a DeepBook pool (newest first)" and lists the returned fields. It is clear what the tool does, but it does not explicitly distinguish itself from nearby siblings such as get_bm_fills or get_ohlcv.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes an optional time range, implying you can bound the query, but it gives no explicit when-to-use guidance or comparison against alternatives like get_bm_fills, get_order_book, or get_ohlcv.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swing_rangeSwing / range signalARead-onlyIdempotentInspect
1h/4h/24h high-low range and realized volatility from hourly candles, a regime (CALM < 2%, ELEVATED 2-4%, HIGH_VOL > 4% 4h range) and a suggested ladder rung count (3/4/5). Information only, not a trading instruction. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds value beyond that by disclosing that the data is public, possibly delayed, and possibly wrong – a real caveat an agent needs before quoting numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the useful signal list, then the regime thresholds. The closing pair "Information only, not a trading instruction" and "Education/information only; not financial advice" is partially redundant and could be one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully enumerates the return values (ranges, volatility, regime bands, rung count) and their numeric cutoffs. Missing only pooling of the response shape or units for volatility, which is a minor gap for a single-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the pool format and case-insensitivity fully documented in the schema. The description adds no syntax or format detail beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: high-low range and realized volatility from hourly candles, plus regime and ladder rung count. It is clearly distinguishable from get_ohlcv or get_volume because it names derived signals, though it never names a sibling directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Information only, not a trading instruction" is a usage constraint, but the description never says when to pick this tool over get_ohlcv, get_pool_stats, or get_volume. The agent must infer the selection rule from the field list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_volumeTrading volumeARead-onlyIdempotentInspect
24h volume, high/low, last price and % change for one DeepBook pool, or the top pools by 24h quote volume if no pool is given. Set window_hours for a custom trailing window (single pool). Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | When no pool is given: how many pools to return (default 10) | |
| pool | No | DeepBook pool name BASE_QUOTE, e.g. SUI_USDC (case-insensitive; '/' or '-' also accepted) | |
| window_hours | No | Trailing window in hours (default 24). Non-24 values need a pool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is a read-only public-data tool, and the description adds freshness and accuracy context that adds to the annotations ('may be delayed or wrong') plus an advice disclaimer. Together these note latency and data-quality caveats rather than repeating readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return shape and mode distinction are front-loaded in the first sentence, and the constraints follow. The disclaimer clause is arguably padding but occupies only a few words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description still enumerates what comes back (volume, high/low, last price, % change, top pools) and notes both modes and window constraints. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented, and the description adds little beyond noting window_hours is single-pool only. That constraint is also in the schema, so the description provides only incremental value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb and resource ('24h volume, high/low, last price and % change') with the resource ('DeepBook pool') and explicitly covers both operating modes: single pool versus top pools. This distinguishes the tool from get_mid_price, get_pool_stats, and get_ohlcv.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the two modes and the condition that selects each ('if no pool is given', 'Set window_hours ... (single pool)'). It does not name competing siblings such as get_ohlcv or get_pool_stats, so the agent must infer which tool to choose for historical candles versus a snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_poolsList DeepBook poolsARead-onlyIdempotentInspect
List Sui DeepBook v3 spot pools with base/quote assets and trading params (tick, lot, min size in human units). Optional filter by asset symbol. Education/information only; not financial advice. Read-only public data, may be delayed or wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Only pools containing this asset symbol, e.g. SUI or USDC | |
| include_ids | No | Include pool object IDs and coin types (longer output) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world safety, and the description adds genuinely new context: data is public, may be delayed or wrong, and is informational only. It stops short of describing pagination or output size behavior beyond the include_ids note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and fields, followed by the filter and a brief disclaimer. Efficient overall, though the 'education only / not financial advice' boilerplate is slightly expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-param, no-output-schema read tool with rich annotations, the description conveys what is returned and the staleness caveat. Sufficient to invoke correctly, with only minor gaps around output shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already fully documented. The description adds a small clarification that trading params are reported 'in human units', but offers nothing further on the asset or include_ids semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List Sui DeepBook v3 spot pools') plus the data returned (base/quote assets, tick, lot, min size). This clearly distinguishes it from siblings like get_pool_params and get_pool_stats, which concern a single pool's parameters/statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions the optional asset-symbol filter and its intent, but gives no explicit guidance on when to choose this over siblings such as get_pool_params or get_pool_stats. Usage is implied (pool discovery) rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesList desk templatesBRead-onlyIdempotentInspect
List The Spice Melange Golden Path Grok Bot templates with prices in Sui USDC, versions and the no-checkout agent buying flow (from https://thespicemelange.org/store/catalog.json). Educational templates, not financial advice; no returns promised. All sales final, except where the law requires otherwise. You pay from your own wallet; this connector never holds keys or funds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 genuinely new context: that this connector never holds keys or funds and that the user pays from their own wallet, which is useful auth/custody information. It stops short of describing pagination or the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the sentence is bloated with legal boilerplate ('Educational templates, not financial advice; no returns promised. All sales final, except where the law requires otherwise.') that consumes space without helping tool selection. Roughly half the text is disclaimer rather than invocation guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema and annotations covering safety, the description is largely sufficient: it names the data source URL and states the fields returned (prices in Sui USDC, versions). It could say more about the response structure, but the essential information for correct invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 per the rubric. The description does not need to add parameter meaning, and nothing contradicts the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('List ... templates') and enumerates what is included (prices in Sui USDC, versions, buying flow), so an agent can tell this is the catalog-reading tool. It does not explicitly name its siblings (create_template_order, check_template_order), so differentiation is only implied by the 'List' verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this tool versus create_template_order or check_template_order, and no prerequisites or exclusions. The phrase 'no-checkout agent buying flow' gestures at a downstream purchase path but never tells the agent which sibling to call for it.
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.
16 tool updates
v0.3.3- First observed
check_template_order - First observed
create_template_order - First observed
estimate_fees - First observed
get_bm_fills - First observed
get_desk_rhythm - First observed
get_indexer_status - First observed
get_mid_price - First observed
get_ohlcv - First observed
get_order_book - First observed
get_pool_params - First observed
get_pool_stats - First observed
get_recent_trades - First observed
get_swing_range - First observed
get_volume - First observed
list_pools - First observed
list_templates
TDQS
Scored across 16 tools
Most market-data tools target distinct queries (book, candles, recent trades, fees, indexer health), but the stats cluster overlaps heavily: get_volume, get_pool_stats, and get_swing_range all return price ranges, volume, and volatility over similar windows, and get_recent_trades vs get_bm_fills both return fills with only a filter difference. An agent can pick reasonably from the descriptions, but it must read carefully to avoid redundant or wrong-stat calls.
Nearly all 16 names follow a snake_case verb_noun pattern (get_*, list_*, estimate_*, create_*), which is predictable and readable. Minor deviations are the abbreviations 'bm' and 'ohlcv' and the use of 'check_template_order' where 'get_' is the house style.
16 tools is at the upper edge but each one maps to a concrete endpoint with a stated output; none looks redundant enough to cut outright. The caveat is that the surface spans two unrelated domains (DeepBook market data and a template store), which inflates the count relative to either purpose alone.
The read-only market-data side is thorough: pools, params, book, fills, OHLCV, volume, volatility, fees, and indexer health are all covered, and the store flow has list/create/check. Gaps are minor — no slippage/depth-cost estimation beyond fee quotes, no way to list a client's own past orders without an order id, and no cross-pool comparison tool beyond the top-volume default.
Related MCP Connectors
Historical tick, order book and settlement data for Polymarket and Predict.fun crypto up/down markets, plus smart-money lists and backtest quotes, over a read-only MCP server.
Hyperliquid MCP — read-only market data from Hyperliquid's public info API.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Real-time crypto market data: candles, tickers, orderbooks across 13+ exchanges via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that provides structured access to Aster DEX market data—covering candlesticks, order books, trades, and funding rates.115MIT
- AlicenseBqualityBmaintenanceMCP server for querying historical and real-time crypto market data across Hyperliquid, Hyperliquid HIP-3, and Lighter.xyz - orderbooks, trades, candles, funding, open interest, liquidations, and data quality metrics.10064 npm13MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for Hyperliquid that provides public market data (prices, order books, funding) and any wallet's positions, orders, and fills via MCP tools, without requiring a private key.MIT
- AlicenseAqualityAmaintenanceRead-only MCP server for Sui blockchain analytics with 44 tools covering wallets, DeFi, NFTs, token prices, transactions, fund tracing, pools, staking, Move decompilation, and MVR name resolution.19444 npm3MIT