arcgate
Server Details
Token search, swap quotes and ready-to-sign swap transactions on Arc, paid per call via x402
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 7 tools
Most tools map to clearly distinct lifecycle steps: health check, venue listing, token search, quote, swap, permit completion, and receipt verification. The main possible confusion is between tradeSwap and tradeSwapTx, which are tightly coupled sequential tools, though descriptions clearly separate paid first-round from free permit second-round behavior.
All names use lowerCamelCase consistently, and six of seven share a predictable 'trade' prefix for domain operations. The standalone 'health' is a minor but sensible deviation for a system diagnostic tool.
Seven tools is well-scoped for a swap/trading service, covering health, venues, search, quote, swap, permit completion, and receipt verification. No tool feels redundant or unnecessary for the apparent purpose.
The set covers the full trade lifecycle from discovery and venue selection through quoting, unsigned transaction generation, Permit2 completion, and post-trade receipt confirmation. Readiness, approvals, and cost/health checks are handled inside the relevant tools, leaving no obvious dead ends.
Available Tools
7 toolshealthAInspect
Reports whether the service is up, with its diagnostics.
Cost: free, never x402-gated.
Returns: DB import health, rule set version, the deployed commit, cache/RPC/spend counters and the payer-identity mode.
Next: call before search/quote/swap to check the service is up.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it declares the cost model (free, never x402-gated) and enumerates what the diagnostics include (DB import health, rule set version, commit, counters, payer-identity mode). It stops short of describing failure/error behavior when the service is down, which is the one remaining transparency gap.
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 one-line purpose followed by tightly scoped Cost/Returns/Next bullets. Every line earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, no-output-schema probe, the description covers the return contents and the recommended call timing, which is everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. There is nothing for the description to clarify beyond what the empty schema already conveys.
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+resource: reports whether the service is up and returns its diagnostics. Clearly distinguishable from the trade* siblings, which are all action-oriented trading tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ('call before search/quote/swap to check the service is up'), giving the agent a concrete pre-flight trigger. No exclusions needed for a health probe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tradeQuoteInspect
Prices a swap between sell and buy across the indexed venues and stores it under a quoteId.
Cost: 0.01 USDC per call over x402: the first call gets a 402 with payment requirements in the
PAYMENT-REQUIREDheader (base64 JSON); sign them and retry with aPAYMENT-SIGNATUREheader carrying the payment payload.sell/buy: two different assets (native and ERC-20 USDC count as the same asset; either side may be USDC). Resolve a ticker with POST /trade/v1/search first.Response shape: when one side is USDC,
best.typeisdirect/two_hop/splitandbest.legslists one leg per path actually used;routes[]lists every discovery candidate. When neither side is USDC, or when a USDC-side allocation can't be expressed as legs,best.typeisgraph,best.legsis empty, and the execution plan is inbest.graph. Both shapes supportside: exactInandexactOut, and both execute the same way through POST /trade/v1/swap.amount: a human-readable decimal string in the token's own units, e.g. "1.5" for 1.5 USDC, not base units. It is thesellamount forside: exactInand thebuyamount forside: exactOut.Optional:
side(exactIn/exactOut),slippageBps, split and hop limits,venues/excludeVenues(ids from GET /trade/v1/venues),taker,ttlSec.Executability: POST /trade/v1/swap executes every quote through ArcgateRouter.
best.executableisfalse, with warninggraph_execution_unavailable, when no ArcgateRouter is configured (or, for an Aerodrome edge, no Aerodrome router), or when the operator has disabled a selected path's venue - even with both routers configured. In that last case, POST /trade/v1/swap may still fall back to an executable candidate the quote already priced instead of failing outright.Readiness: name the wallet that will trade in
takerand the answer carriesreadiness, read at the quote's block: whether that wallet holds the input (balance), which approval or Permit2 signature POST /trade/v1/swap will need (approvalfor the default permit2,approveforapproval: "approve"), enough native USDC for gas (gas), and whether this call's x402 payer can pay the swap fee (fees).totalCostUsdcis the swap fee plus gas: what finishing costs. Whenreadyis false,nextisstop. Withouttakerthere is noreadiness.Lifetime: the
quoteIdis good forttlSecseconds (default and max 120).Next: POST /trade/v1/swap with the returned
quoteId. Costs 10000 base units (0.01 USDC) per call. Payment goes in params._meta["x402/payment"]; use an x402-aware MCP client (see https://docs.arcgate.dev/#arcgate/description/mcp-for-agents).
| Name | Required | Description | Default |
|---|---|---|---|
| buy | Yes | ||
| sell | Yes | ||
| side | No | exactIn | |
| taker | No | ||
| amount | Yes | ||
| ttlSec | No | How long the stored quote (and this response's expiresAt) stays live, in seconds (1-120, default 120). A caller may shorten it to re-quote sooner; it can never lengthen past 120s. Safe to shorten or leave at default: POST /trade/v1/swap always re-quotes and re-simulates at the current block and 409s quote_stale below the stored minAmountOut, so this bounds staleness risk, not price risk. The on-chain execution deadline is a separate parameter (deadlineSec, POST /trade/v1/swap). | |
| venues | No | ||
| maxHops | No | ||
| sources | No | ||
| maxSplits | No | ||
| allowSplits | No | ||
| slippageBps | No | ||
| excludeVenues | No |
tradeReceiptAInspect
Tells you whether the transactions POST /trade/v1/swap returned did what the quote promised, once you've sent them. It only reads the chain.
Cost: free, never x402-gated.
Key inputs:
quoteId(the one you called POST /trade/v1/swap with) andtxHashes, the 1 to 4 transactions you sent for it: the swap, and any approvals. It answers for a quote /trade/v1/swap handed transactions for in the last hour, else 404swap_not_found, and only for that quote's transactions, sent from itstaker: an approval to the input token, or a swap to ArcgateRouter whose deadline one of the quote's /trade/v1/swap or /trade/v1/swap/tx answers issued and whose output goes to itsrecipient, else 400invalid_request.Smart-contract wallets: a Safe, an ERC-4337 account or a batching EIP-7702 wallet sends its transaction from an executor or bundler, or to itself, not from the taker to ArcgateRouter, so this answers 400
invalid_requestfor it. Check that transaction's own receipt and your wallet's success event instead.Returns:
result, from the swap transactions. One that filled decides it:passwhendeliveredis at leastminAmountOut, elsefail(a round 1 that reverted doesn't undo a round 2 that filled). With none filled:pendingwhile one is not mined yet, elsefail: it reverted or was never mined by 60s after its deadline (statusexpired, ornot_foundwhen the chain never saw it). Approvals are listed but don't change the result.deliveredis whatrecipientreceived oftoken(the output), read from the swap transaction's Transfer logs, in base units. Alsoblock, each transaction'sstatus, andreason, one sentence on a fail or pending. The first result from a mined swap is final: asking again returns it.Limits: one chain read per quote every 5s (the same
txHashesinside that get the last answer; other hashes get 429receipt_rate_limitedwithretryAfterSec), and at most 132 per quote (then 429receipt_reads_exhausted, for good).Next:
pass: tell the user what they bought (deliveredoftoken).fail: follownext:requotewhen no swap transaction succeeded (nothing filled; quote again),stopwhen one did (tell themreason, and don't trade again).pending: ask again in a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| quoteId | Yes | ||
| txHashes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: cost model (free, never x402-gated), error codes and their triggers (404 swap_not_found, 400 invalid_request), rate limits (one read per quote every 5s, 132 per quote then permanent 429), and finality semantics ('the first result from a mined swap is final'). This is far beyond anything a schema or annotation would 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?
Bold headers (Cost, Key inputs, Returns, Limits, Next) front-load the critical routing info, and most sentences are information-dense. It is long and occasionally dense enough that a few clauses could be tightened, but the detail is largely warranted for the tool's complexity.
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 2-param tool with no annotations, no output schema, and no param descriptions, the description supplies everything needed: return-value semantics (pass/fail/pending, delivered, block, status, reason), failure reasons, rate limits, and post-result actions. Nothing an agent needs to call or interpret it correctly appears 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 coverage is 0%, so the description must compensate, and it does: quoteId is identified as the one passed to POST /trade/v1/swap, and txHashes as the 1-to-4 transactions sent (the swap plus any approvals). It also explains the validation scope tied to each parameter, adding real meaning the bare schema cannot.
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?
Starts with a specific verb+resource statement: it tells you whether the transactions that POST /trade/v1/swap returned did what the quote promised, and clarifies 'It only reads the chain.' This cleanly separates it from the mutating siblings (tradeSwap, tradeSwapTx), so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about when to call it ('once you've sent them'), when it does not apply (smart-contract wallets sending from an executor/bundler instead get 400 invalid_request, with a redirect to checking the transaction's own receipt), and what to do next based on result (requote/stop/pending). Alternatives and exclusions are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tradeSearchAInspect
Resolves a ticker, name, prefix or 0x address to candidate ERC-20 tokens on Arc.
Cost: 0.005 USDC per call over x402: the first call gets a 402 with payment requirements in the
PAYMENT-REQUIREDheader (base64 JSON); sign them and retry with aPAYMENT-SIGNATUREheader carrying the payment payload.Key inputs:
query(required),limit(1-25, default 10).Returns: each match with its verification status, safety verdicts and USDC/hub pools, most relevant first.
Next: pass the chosen result's
addressassellorbuyto POST /trade/v1/quote. Costs 5000 base units (0.005 USDC) per call. Payment goes in params._meta["x402/payment"]; use an x402-aware MCP client (see https://docs.arcgate.dev/#arcgate/description/mcp-for-agents).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the x402 payment flow (402 with PAYMENT-REQUIRED header, retry with PAYMENT-SIGNATURE), the exact cost, where payment goes in `params._meta`, and that results are ordered by relevance. It omits error/no-match behavior and rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and structured in labelled bullets (Cost, Key inputs, Returns, Next) that scan well. Slightly overlong: the 0.005 USDC cost is stated twice in different units, adding mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must stand alone; it summarizes return contents (verification status, safety verdicts, pools) and the downstream handoff. It leaves out failure modes and whether results are paginated, which is a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it marks `query` as required, specifies `limit` range 1-25 and default 10, and — most valuably — expands the semantic space of `query` to ticker, name, prefix or 0x address, which the bare string schema does not convey.
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 first sentence gives a precise verb (resolves) and resource (ERC-20 tokens on Arc) plus the accepted input forms (ticker, name, prefix, 0x address). It is clearly distinguishable from tradeQuote/tradeSwap siblings, though it never explicitly says how it differs from other search-like tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the enabling context (resolve a token before trading) and the explicit next step: pass the chosen result's `address` as `sell` or `buy` to POST /trade/v1/quote. No when-not-to-use guidance is given, which holds 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.
tradeSwapAInspect
Turns a stored quote into unsigned transactions for the taker to sign and send. arcgate never signs, broadcasts or holds funds.
Cost: 0.01 USDC under $1,000; 0.05 USDC from $1,000 to $10,000; above that 0.05 USDC plus 0.5 bps of the amount over $10,000, capped at 5 USDC, size-tiered by the quote's USD notional (the USDC side for a USDC pair, or a token-to-token quote's USD valuation; a quote with no valuation prices at tier 1), over x402 (402 with
PAYMENT-REQUIRED, retry withPAYMENT-SIGNATURE). Charged once per quote: POST /trade/v1/swap/tx, the Permit2 second round below, is free.Key inputs:
quoteId(from POST /trade/v1/quote),taker; optionalrecipient(defaults totaker),deadlineSec,approval. Neverpermit- that belongs to POST /trade/v1/swap/tx; sending one here is 400invalid_request(the strict schema rejects the unknown key).Every quote executes through ArcgateRouter: it is always the Permit2
spenderand the ERC-20approvespender below. When every source pool of the route being executed trades native USDC, the swap is funded byvalueinstead - no approval transaction and no signature at all.Permit2 (default, one or two calls):
Returns
transactions- an unlimited ERC-20approve(Permit2, type(uint256).max)first, if the token's ERC-20 allowance to Permit2 is below the amount, then the swap, which carries an empty Permit2 signature and is only directly sendable as-is when a Permit2 allowance to ArcgateRouter already covers the amount, in which casesignaturesis empty too. Otherwise it also returnssignatures: [{ kind: "permit2", typedData }]; signtypedDatawith the taker's key (EIP-712, e.g. viem'ssignTypedData).Sign, then call POST /trade/v1/swap/tx with the same
quoteId,takerandrecipient, andpermit: { message: typedData.message, signature }, while the quote is live: free, because this call already paid the swap fee. The first call to it that succeeds uses the round up; a failed one doesn't.Send that response's
transactionsin order.
approval: "approve"(one call): returns at most one ERC-20approve(ArcgateRouter, amountIn)transaction instead of a permit to sign - an exact amount, never Permit2, never a signature - and only when the taker's current allowance is below it.Freshness: the quote lives for the
ttlSecthe quote call asked for (default/max 120s); after thatquoteIdis 410quote_expired. Every call re-quotes and re-simulates at the current block and returns 409quote_stalewhen the fresh re-quote fails or falls below the storedminAmountOut, when the pre-flight simulation reverts on slippage, or when the simulated delivery is belowminAmountOut. A 409 or 410 carries a free fresh quote inquote, withnext: "requote": the original quote request (same amount, tokens, side,slippageBpsand venues, defaultttlSec) quoted again through the same pipeline, exactly as POST /trade/v1/quote answers it; when the original named ataker, the fresh quote is for this call'staker, the wallet swapping now. Nothing executes on it: check its price,safety.verdictandreadiness, then swap itsquoteId. When the fresh quote can't be traded (no_route,insufficient_liquidity,unsupported_venueorbuy_reverts, acannot_sellorilliquidverdict, not executable, or the taker isn't ready) the answer isnext: "stop"with noquote, anderror.hintsays why. One fresh quote per paid quote: a second 409/410 for the samequoteId, a quote that itself came from a 409/410, or a quote expired over 5 minutes ago gets plainrequotewith noquote, as does one whose re-quote couldn't run or failed on the server's side; then quote again yourself.Fallback: A stored route on a disabled/undeployed venue falls back to the best executable candidate the quote already priced (warning
route_not_executable), or 422not_executablewhen no such candidate exists, none re-quotes, or no ArcgateRouter is configured at all.Attempts: a quote gets at most 5 failed calls here; the next call on that
quoteIdis 429swap_attempts_exhausted(next: "requote"), answered without running the swap pipeline. A failed call is a 409, a 410 (its fresh quote may run), a 422, 500 or 503, or a successful pipeline whose payment settlement or delivery fails. An attempt stays reserved until its 200 is delivered (after settlement when paid); that delivery, a 404, or a 400 (at parse, or a reservedtaker/recipient) uses none. A delivered 200 does not reset this quote's previous failures. POST /trade/v1/swap/tx counts its own, per permit round.Next: a 200 with
signaturesnon-empty needs POST /trade/v1/swap/tx before sending anything (next: "sign_permit"); otherwise sign and sendtransactionsin order, then confirm the fill with POST /trade/v1/receipt (free). Costs 0.01 USDC under $1,000; 0.05 USDC from $1,000 to $10,000; above that 0.05 USDC plus 0.5 bps of the amount over $10,000, capped at 5 USDC; the exact amount for your quoteId comes back in the payment-required result. Payment goes in params._meta["x402/payment"]; use an x402-aware MCP client (see https://docs.arcgate.dev/#arcgate/description/mcp-for-agents).
| Name | Required | Description | Default |
|---|---|---|---|
| taker | Yes | ||
| quoteId | Yes | ||
| approval | No | permit2 | |
| recipient | No | ||
| deadlineSec | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the entire behavioral burden and does so thoroughly: fee tiers and x402 payment handshake, quote TTL/default/max, 409/410/422/429/400/404 error semantics, attempt reservation rules, and the fact that 200 responses require downstream signing/sending. This is well beyond what structured fields supply.
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 opening sentence is front-loaded and bold section headers aid scanning, but the fee block is duplicated almost verbatim in the opening and the closing 'Next:' paragraph, and the Permit2 bullet is a dense wall of text. For a tool this complex some length is warranted, yet the redundancy costs 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 annotations and no output schema, the description is the sole source of truth and covers return shape (`transactions`, `signatures`), next-step guidance (`sign_permit`, `requote`, `stop`), and failure modes. Nothing an agent needs to call this 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?
Schema description coverage is 0%, so the description must compensate, and it does for most inputs: `quoteId` origin (POST /trade/v1/quote), `recipient` defaulting to `taker`, and the `approval` enum's two modes are each explained with concrete behavior. `deadlineSec` is listed as optional but its meaning and the schema's 10-600 bounds are never elaborated, leaving one 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 first sentence states a specific verb and resource ('Turns a stored quote into unsigned transactions for the taker to sign and send') and immediately distinguishes the tool's role from siblings by noting arcgate never signs, broadcasts or holds funds. An agent can tell this apart from tradeQuote and tradeSwapTx 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to POST /trade/v1/swap/tx when a permit must be signed, explains the `approval: "approve"` alternative path, and describes fallback, retry and requote conditions in detail. When-not-use cases (never send `permit` here) and the 5-attempt limit are also stated, 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.
tradeSwapTxAInspect
The free Permit2 second round: finishes a POST /trade/v1/swap call whose signatures asked the taker to sign a Permit2 PermitSingle.
Cost: free, never x402-gated - a payment header, if one is sent anyway, is ignored and nobody is charged. Only reachable once, right after the paid call that opened it.
Key inputs: the SAME
quoteId,takerandrecipient(defaults totaker) as the paid POST /trade/v1/swap call, plusdeadlineSecand the requiredpermit: { message: signatures[0].typedData.message, signature }(signtypedDatawith the taker's key, EIP-712, e.g. viem'ssignTypedData).permitaccepts onlymessageandsignature, end to end - any other field, at any level, is 400invalid_requestat parse. The service rebuilds the Permit2 domain itself and checks the signer, spender, token, amount, nonce and both deadlines: a mismatched spender or token, or an amount belowamountIn(a larger amount is accepted), is 400invalid_request; a stale nonce, an expiredsigDeadline/expiration, or an invalid signature (verified via ERC-1271 on chain for a contract taker) is 422swap_reverts. A contract taker can swap, but POST /trade/v1/receipt only reads transactions the taker sends itself, so it answersinvalid_requestfor a Safe, ERC-4337 or batching EIP-7702 wallet: check your own transaction receipt instead.No pending round: 409
no_pending_swapwhen thisquoteId/taker/recipientnever paid, named a different taker or recipient, or already used its one free call - call POST /trade/v1/swap first, which is paid and returns the permit this call takes.Freshness: re-quotes and re-simulates exactly like POST /trade/v1/swap, and can answer the SAME 410
quote_expired/409quote_staleit would - but never with a freshquote(issue #124's free re-quote is /trade/v1/swap's own paid-quote courtesy, not this free route's).Attempts: a permit round (
quoteId,taker,recipient) gets at most 5 failed calls; the next one is 429swap_attempts_exhausted(next: "requote"), answered without running the swap pipeline. A failed call is a 400 from the permit checks above, a 409, 422, 500 or 503, or an undelivered 200; a delivered 200, a 400 at parse, a 404, a 410 orno_pending_swapuses none. Failed POST /trade/v1/swap calls don't count here. A new POST /trade/v1/swap permit response resets this round's attempts only once delivered (after settlement when paid).Next: sign and send
transactionsin order, then confirm the fill with POST /trade/v1/receipt (free). This is the last call in search -> quote -> swap -> swap/tx.
| Name | Required | Description | Default |
|---|---|---|---|
| taker | Yes | ||
| permit | Yes | ||
| quoteId | Yes | ||
| recipient | No | ||
| deadlineSec | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and delivers: cost model (free, x402 header ignored), single-use reachability, the 409/422/429 error taxonomy with retry accounting (5 failed attempts, next: requote), signature-validation rules (ERC-1271, nonce/deadline checks), and the receipt caveat for Safe/4337/7702 takers. This is well beyond what any structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then bolded bullet headers make it scannable, and virtually every sentence carries operational content. It is dense and long, with some restatement (free/x402 repeated across cost and freshness notes), so not a perfect 5, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param nested-Object tool with 0% schema descriptions and no output schema, the description covers inputs, error semantics, attempt limits, freshness behavior and the downstream confirmation step. An agent has everything needed to invoke it correctly and interpret failures.
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 0%, so the description must compensate and does: it maps quoteId/taker/recipient to the paid call, gives recipient's default, names deadlineSec, and spells out the permit object shape (only message+signature allowed end-to-end, extra fields 400) plus which fields are validated and how. No parameter is left to guesswork.
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?
Opens with a specific verb+resource+scope: it is the free Permit2 second round that finishes a POST /trade/v1/swap call whose signatures requested a PermitSingle. This cleanly distinguishes it from the sibling tradeSwap (the paid first round) without needing to open either 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?
States the exact precondition ('only reachable once, right after the paid call that opened it'), names the alternative to call when no pending round exists (POST /trade/v1/swap), and closes by placing it in the pipeline 'search -> quote -> swap -> swap/tx'. When/when-not/alternatives are all explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tradeVenuesAInspect
Lists the DEX venues, hub tokens and launchpads this deployment indexes.
Cost: free, never x402-gated.
Returns: each venue with an
executableflag, hubs and launchpads.Next: use venue ids in POST /trade/v1/quote's
venues/excludeVenues.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose cost behavior ('free, never x402-gated') plus the return shape (`executable` flag, hubs, launchpads). It omits pagination, auth, and error behavior, but for a read-only listing the disclosure is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by three tight bullets (cost, returns, next step). Every line carries distinct information with zero padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description must explain returns and cost — which it does, including the key `executable` flag and the hand-off to the quote tool. Minor gaps (auth, pagination, error cases) keep it from 5.
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?
Zero parameters with 100% schema coverage; there is nothing to document, so the baseline 4 applies. The description adds no parameter-level detail, which is correct here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Lists) and resource (DEX venues, hub tokens, launchpads) scoped to 'this deployment indexes'. An agent can tell it apart from quote/swap siblings functionally, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Next' line gives concrete downstream usage: feed venue ids into POST /trade/v1/quote's `venues`/`excludeVenues`. No explicit when-not-to-use or named alternative, so it stops short of 5.
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.
7 tool updates
- First observed
health - First observed
tradeQuote - First observed
tradeReceipt - First observed
tradeSearch - First observed
tradeSwap - First observed
tradeSwapTx - First observed
tradeVenues
Related MCP Connectors
Token swaps and honeypot/rug checks for AI agents on 8 chains, paid per-call in USDC via x402.
x402 pay-per-call: onchain data (Solana/Base/Polygon), crypto market, JWT/unit utils, x402 stats.
Crypto rug/scam-risk scans + wallet snapshots (EVM + Solana), paid per call via x402.
17-model LLM gateway + 350+ data/KYB/sanctions tools. Pay-per-call USDC via x402, no API key.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables paid, per-request access to raw on-chain token security data (honeypot, taxes, holders, liquidity) on Arc mainnet via x402 payments, without scores or advice.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to resolve tokens, get quotes, check for honeypots/rug pulls, build swaps, and retrieve receipts via x402 micropayments.1MIT
- AlicenseNot gradedqualityCmaintenanceGet the best swap quotes across Uniswap, SushiSwap, Aerodrome with pay-per-call via x402 (USDC on Base).MIT
- AlicenseNot gradedqualityCmaintenanceEnables fetching best swap quotes on Solana via Jupiter aggregator with pay-per-call x402 micropayments.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.