Vurto Swap
Server Details
Token swaps at the best net price on 9 EVM chains and Solana. No API key, non-custodial.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-03-26
- URL
TDQS
Scored across 13 tools
The three quote tools (swap_quote, double_quote, nn_quote) and three build tools (swap_build, double_build, nn_build) share near-identical shapes, but the descriptions clearly delineate 1:1, 2-leg, and N:N semantics, and invoice_* vs swap_* domains are distinct. The only soft overlap is report_execution (closing a swap) vs invoice_report_payment (closing a payment) and swap_status (re-checking), which are still separable by resource.
Nearly all tools follow a consistent {domain}_{action} snake_case pattern (swap_build, double_quote, nn_build, invoice_create, invoice_get, invoice_pay). Minor deviations are prepare_signing and report_execution, which omit the domain prefix and use verb_noun ordering, but they remain readable and unambiguous.
13 tools is well-scoped for a swap-plus-invoicing server: each family (swap, double, nn, invoice, sign/report/status) is represented by the minimal set of operations needed. No redundant or filler tools are present.
Core swap and invoice lifecycles are covered end to end (quote, build, sign, report, status; invoice create/get/pay/report). Gaps exist: no token discovery/verified-token lookup, no invoice listing/cancel, and no wallet/balance helper, which an agent must work around from external knowledge.
Available Tools
16 toolsdouble_buildAInspect
Builds signable/sendable plans for BOTH legs of a Double Out or Double In swap — two ordinary swap_build calls under the hood, kept together for convenience. Returns { legA, legB }, each a full SwapPlan exactly like swap_build's. The two legs are NOT atomic — there is no combined contract call, each is a transaction (or CoW signature) the wallet sends separately, same as any other swap. Execute leg A fully first (steps, signing, report_execution) and confirm it landed before starting leg B. If leg A fails or is rejected, do NOT execute leg B — proceeding would leave the wallet with only half the ratio the user asked for, which defeats the purpose of a Double swap.
| Name | Required | Description | Default |
|---|---|---|---|
| legA | Yes | ||
| legB | Yes | ||
| wallet | Yes | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| maxSlippageBps | No | Optional ceiling, 0-10000, applied to both legs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only note non-readOnly, openWorld, non-idempotent, non-destructive. The description goes beyond by disclosing that the two legs are NOT atomic, that each is a separate transaction/signature, and the critical sequencing requirements. It also explains the risk of proceeding if leg A fails, which is crucial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph with no bullets, but it's reasonably concise and information-dense. It front-loads the core message (builds both legs) and includes important warnings. However, it could be better structured with visual breaks for the execution sequencing guidance, but it's still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, multiple legs, non-atomic behavior) and lack of output schema, the description covers key aspects: what it does, the non-atomicity, and execution order. It lacks details on error handling and edge cases, but those might be overkill. The presence of sibling tools like swap_build lets an agent infer comparison. Overall, it's well-covered for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, with legA and legB having detailed inner property descriptions (amount vs amountRaw, receiver conditions, Solana nuances). The description adds a global maxSlippageBps applying to both legs and the alias semantics for legA/legB, but these are mostly covered by schema descriptions. The description doesn't add significant new parameter meaning beyond what's in the schema, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it builds plans for both legs of a Double Out or Double In swap, wrapping two swap_build calls, and explicitly differentiates it from ordinary swap_build by noting the convenience wrapper and the separate legs. It also specifies the return shape ({ legA, legB }), which isn't in 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?
Provides explicit instructions: execute leg A fully and confirm it landed before starting leg B, and do NOT execute leg B if leg A fails. It also references sibling swap_build as the underlying mechanism, distinguishing this tool. No explicit alternatives are given, but the context makes it clear when to use this vs a single swap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
double_quoteARead-onlyInspect
Compares ranked routes for TWO swap legs at once — "Double Out" (one source token split into two destinations) or "Double In" (two source tokens converging on one destination). This exists because building a liquidity pool or matching a target ratio needs both legs priced against the market at the same instant, not one after another with the price moving in between. Each leg is independently quoted (two ordinary swap_quote calls under the hood) — this tool is a convenience that keeps them together, not a combined/atomic route. For mode "out": legA.tokenIn must equal legB.tokenIn (the shared source); tokenOut differs. For mode "in": legA.tokenOut must equal legB.tokenOut (the shared destination); tokenIn differs. Pass the exact amount each leg should trade — this tool does not compute percentages or splits for you. If the shared token is the chain's native asset, remember gas is paid twice (once per leg's eventual transaction) — do not quote/build a total that leaves nothing for the second leg's gas.
| Name | Required | Description | Default |
|---|---|---|---|
| legA | Yes | ||
| legB | Yes | ||
| mode | Yes | "out": one source, two destinations. "in": two sources, one destination. | |
| wallet | No | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context: it is two independent quotes, not an atomic route; it does not compute splits/percentages; and it warns about double gas for native assets. These go beyond the structured annotations and meaningfully shape how an agent should invoke and interpret the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but every sentence earns its place: it covers purpose, rationale, non-atomicity, mode-specific constraints, amount responsibility, and a gas caveat. It is front-loaded with the core functionality before diving into constraints. It could be slightly tightened, but the length is justified by 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?
Given the tool's complexity (two nested leg objects, multiple modes) and the absence of an output schema, the description covers the essential invocation logic and key caveats. It does not describe the exact output shape, but it states each leg is independently quoted, giving a reasonable expectation. The description is sufficiently complete for correct invocation, with minor room for output-format details.
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 schema already documents many parameters. The description adds critical relational semantics not in the schema: for mode 'out' legA.tokenIn must equal legB.tokenIn, and for mode 'in' legA.tokenOut must equal legB.tokenOut. It also clarifies that amounts are exact and not split, which directly affects parameter usage. This goes beyond the schema's per-field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('compares ranked routes') and a distinct resource (two swap legs at once), and explicitly names the two modes (Double Out / Double In). It distinguishes itself from a single swap_quote by stating it is 'two ordinary swap_quote calls under the hood,' so an agent can tell it apart from siblings like swap_quote and double_build.
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 gives clear when-to-use context: it exists for 'building a liquidity pool or matching a target ratio' where both legs must be priced simultaneously. It also clarifies it is not a combined/atomic route, which implicitly warns against expecting atomicity. However, it does not explicitly name alternatives or exclusions (e.g., 'use double_build for the actual build'), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoice_createInspect
Create a payment request: who receives, which token, how much, on which network. Returns invoice.id, invoice.label (INV-XXXX-XXXX, what people copy), invoice.url (share this; it previews with the QR on WhatsApp and Telegram) and invoice.qr (PNG). No signature or API key needed. Only VERIFIED tokens of the network are accepted, by address or symbol — an unverified token is refused because a cloned "USDC" with its own pool would let the creator sell a fake at any price. The payer can pay with ANY token on that network.
| Name | Required | Description | Default |
|---|---|---|---|
| memo | No | Optional note, up to 80 chars, visible to anyone with the link. | |
| token | Yes | Token to receive: address/mint or symbol of a verified token on this network. | |
| amount | Yes | Human decimal amount, e.g. "100". Decimals come from the token list, not from you. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| recipient | Yes | Wallet that receives. EVM 0x address, or base58 on Solana (case-sensitive). | |
| confidential | No | Optional, Solana only. A private (confidential) invoice hides the receiving wallet from anyone with the link (invoice_get returns recipient: null), and every payment route screens the payer first: OFAC SDN list plus the issuer freeze of USDC and EURC (Circle), USDT (Tether), PYUSD and USDG (Paxos) and USD1 (World Liberty), the issuer freeze index, and a fund trail up to three hops back through the same checks (a flagged sender on the first hop blocks; on hops two and three it only warns). These are checks of the paying wallet, whatever token it pays with. A blocked payer gets payer_blocked. |
invoice_getRead-onlyIdempotentInspect
Read an invoice by id (INV-XXXX-XXXX, with or without dashes): requested amount, token, network, receiver (null on a private invoice), confidential (true on a private invoice), status (open or paid), the paying transaction once paid, and received (the raw amount measured on-chain so far). Pending payments are re-checked on-chain on every read.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | INV-XXXX-XXXX or the 8-character id. |
invoice_payInspect
Build the plan to pay an invoice from payer, with the token payer holds (default: the invoice token). Nothing is signed or sent here. method "transfer": same token, a direct transfer built from the stored invoice (no fee, no gain; the receiver sees the payer as sender). method "swap": another token; amountIn is computed so the GUARANTEED minimum output covers the requested amount, the route is always the one with GAIN when there is one, and the output goes straight to the receiver (the receiver sees the DEX router as sender). Any surplus over the requested amount goes to the receiver. plan has the same shape as a swap_build plan: on EVM sign steps[] in order with prepare_signing (approve steps first, then the transaction); on Solana pass {transaction, executionRef} to prepare_signing and POST the signed transaction to /v1/svm/execute. If simulation.status is approval_required, send the approve and call invoice_pay again. Then call invoice_report_payment with the hash (EVM) or signature (Solana). Errors: price_moved (the minimum fell below the request between quote and build — call again), no_route, native_sol_only (an invoice in SOL can only be paid in SOL), invoice_already_paid. On a private invoice the payer is screened first (OFAC SDN list and the issuer freeze of USDC and EURC (Circle), USDT (Tether), PYUSD and USDG (Paxos) and USD1 (World Liberty)): payer_blocked (403) means this wallet cannot pay it; screening_unavailable (503) means the screening could not finish, try again in a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | INV-XXXX-XXXX or the 8-character id. | |
| payer | Yes | The wallet that will sign and pay, on the invoice network. | |
| tokenIn | No | Optional: address/mint or symbol of the token the payer pays with. Omit to pay in the invoice token. | |
| slippageBps | No | Optional, default 50. The guaranteed minimum is computed after it, so a tighter slippage asks the payer for less. |
invoice_report_paymentIdempotentInspect
Hand the payment transaction to the server, right after sending it. The server reads the transaction on-chain and measures what reached the receiver in the invoice token; the payer must be the signer and the transaction must be newer than the invoice. Pending until mined; invoice_get re-checks. A hash pays each receiver once (tx_already_used once it confirmed another invoice of the same receiver and token); different receivers in one transaction are a batch payout.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | INV-XXXX-XXXX or the 8-character id. | |
| payer | Yes | The wallet that signed the payment. | |
| method | No | From invoice_pay.method. | |
| txHash | Yes | EVM transaction hash, or the Solana signature. |
nn_buildAInspect
Builds ONE signable/sendable atomic transaction executing every leg of an N:N basket through VurtoSwapRouter. Always re-quotes the whole basket fresh from chainId/inputLegs/outputLegs — there is no quoteId handoff for N:N, pass the same fields used for nn_quote (or skip nn_quote and call this directly). No API key required: pass the wallet that will sign. A machine credential is optional and only raises your limit from the per-IP cap to the credential budget. Returns steps[]: one approve step per DISTINCT input token that still needs allowance, followed by ONE transaction step that executes every leg atomically. The approve target is the VurtoSwapRouter address (steps[].spender / the build's router), NOT each leg's underlying provider — this router pulls every input token itself inside one contract call, so approving providers individually the way swap_build does would approve the wrong address. If simulation.status is approval_required, send the approve step(s) first and call nn_build again for the executable transaction. legs[].routeSwitch, when present on a leg, means the provider the quote picked for THAT leg refused to build (it hit its request limit) and the leg was built with another provider instead: {from, to, reason}. Only that leg changed, the others are untouched, and the replacement is what will be signed: say which provider replaced it before the user signs. IMPORTANT: report_execution and swap_status do NOT support nn_build's transaction step — both key off a single quoteId, and this build has none (it is one transaction covering every leg, not one quote). After sending it, confirm success by checking the transaction receipt directly, not swap_status.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| inputLegs | Yes | ||
| outputLegs | Yes | ||
| slippageBps | No | Optional, 5-500, applied to every leg. Default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavior beyond the minimal annotations: no quoteId handoff, fresh re-quoting, optional machine credential rate-limit effects, approve-step targeting of VurtoSwapRouter rather than underlying providers, approval_required simulation flow, routeSwitch fallback semantics, and unsupported status endpoints. This is far more than the annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the complexity of the tool justifies the length. It is front-loaded with the core purpose and organized around major behavioral topics (quoting, auth, steps, routeSwitch, status). A few sentences are slightly redundant, such as the repeated no-quoteId point, but no sentence 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?
With no output schema, the description fully explains the return shape (steps[] with approve steps and one transaction step), the approval flow, the routeSwitch replacement behavior, and the correct post-send verification path. It covers auth, prerequisites, and error/fallback conditions, leaving no critical gap for an agent to call 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?
Schema coverage is moderate at 60%, and the description adds contextual meaning by tying chainId/inputLegs/outputLegs to the fresh re-quote behavior and by explaining that wallet is the signing wallet. It does not walk through every parameter, but the schema already documents the individual fields, and the description clarifies how they are used together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Builds ONE signable/sendable atomic transaction executing every leg of an N:N basket through VurtoSwapRouter.' It clearly distinguishes itself from related tools by emphasizing the N:N basket scope, the absence of quoteId handoff, and the contrast with swap_build's per-provider approvals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: pass the same fields as nn_quote or skip nn_quote and call directly, and no API key is required. It also states when not to use supporting tools: report_execution and swap_status do not support this build's transaction step, so the agent should check the receipt directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nn_quoteARead-onlyInspect
N:N — quotes a basket where N input tokens fund M output tokens in ONE atomic on-chain transaction. The backend runs a waterfall allocation deciding which input finances which output, then quotes the real tokenIn->tokenOut route for each resulting slice through the same provider fan-out swap_quote uses. NOT decomposable into independent swap_quote/double_quote calls — the allocation itself is the thing being computed, not just N+M separate prices for legs you already know. inputLegs[]: what you sell (tokenIn + amount or amountRaw, each). outputLegs[]: what you want back, as outputPercent — an integer percent of the TOTAL basket value, not a fixed amount, because the actual split depends on the allocation; every outputLegs[].outputPercent in the request must sum to exactly 100. Up to 10 combined input+output legs; the waterfall never produces more than inputLegs.length + outputLegs.length - 1 real on-chain legs. Returns { legs[], failures[] }. Each entry in legs[] is a real quoted tokenIn->tokenOut leg (a NormalizedQuote under .quote, plus amountIn/tokenIn/tokenOut/receiver for that slice) — this is what nn_build will execute, not a rough preview. failures[] lists any slice that found no route; a partial basket is possible and reported, never silently dropped.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | No | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). On EVM the multi-swap router must be deployed on the chain or the quote fails with multi_swap_not_supported_on_chain; on Solana there is no router contract, several top-level instructions in one transaction are already all-or-nothing by runtime rule. | |
| inputLegs | Yes | ||
| outputLegs | Yes | ||
| slippageBps | No | Optional, 5-500, applied to every leg. Default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: the waterfall allocation, the atomicity, the fact that failures[] can result in a partial basket that is 'never silently dropped,' and the relationship to nn_build (legs are what will be executed). It also discloses chain-specific failure modes (multi_swap_not_supported_on_chain) and Solana's runtime all-or-nothing rule. This goes well beyond 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 dense but every sentence earns its place: it defines the tool, explains the allocation, gives the outputPercent constraint, states limits, and describes the return shape. It is longer than average, but the complexity of the tool justifies the length. The most critical differentiator (NOT decomposable) is front-loaded early. Slight redundancy exists between the schema's outputPercent description and the tool description, but that is minor.
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 complex N:N quoting tool with no output schema, the description does a strong job: it explains the return shape (legs[] with NormalizedQuote, failures[]), the partial-basket behavior, the leg count bound, and the chain-specific constraints. It does not detail pagination or exact failure error formats, but those are less critical for a quote tool. The annotations cover safety, and the schema covers parameters. The description is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description carries some burden. It adds meaning to inputLegs[] and outputLegs[] by explaining the allocation semantics: outputPercent is 'an integer percent of the TOTAL basket value, not a fixed amount, because the actual split depends on the allocation.' It also clarifies the leg count limit and the resulting on-chain leg count formula. The wallet parameter is not discussed in the description, but the schema already covers it well. The description compensates for the schema's gaps on the core basket 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?
The description opens with a precise definition: 'N:N — quotes a basket where N input tokens fund M output tokens in ONE atomic on-chain transaction.' It names the specific verb (quotes), the resource (a basket), and the key differentiator (atomic, waterfall allocation). It also explicitly contrasts with swap_quote/double_quote, making sibling differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when NOT to use this tool: 'NOT decomposable into independent swap_quote/double_quote calls — the allocation itself is the thing being computed.' It also explains the outputPercent constraint and the partial-basket behavior, giving an agent clear conditions for invocation. The sibling list includes swap_quote and double_quote, and the description directly addresses why those alternatives are not equivalent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payout_batchInspect
Payroll and supplier payouts on Solana: pay up to 20 wallets their exact amounts, in the token the payer holds (no swap). Every receiving wallet is screened first (OFAC SDN list and the issuer freeze of six stablecoins); one blocked wallet refuses the whole batch with receiver_blocked (403) and details.index of that row, before anything is created. Each recipient becomes a regular invoice (history, on-chain verification). Returns { invoices[], transactions[] }: the transfers are packed in as few transactions as fit the network limit, each with its invoiceIds. Sign each transactions[i].transaction (prepare_signing, then POST to /v1/svm/execute), then payout_report_payment with that signature and those invoiceIds. Errors: batch_svm_only, batch_duplicate_recipient (add the amounts up in one row), batch_self_payment, too_many_recipients, token_not_listed, screening_unavailable (503, try again).
| Name | Required | Description | Default |
|---|---|---|---|
| payer | Yes | The wallet that signs and pays. | |
| token | Yes | Mint or symbol of a verified token, e.g. "USDC". Every recipient is paid in it. | |
| chainId | Yes | ||
| recipients | Yes |
payout_report_paymentIdempotentInspect
Hand one batch transaction to the server, right after sending it, with the invoiceIds that payout_batch listed for it. Each invoice is verified on-chain like any invoice payment (what reached that receiver); call again a few seconds later if some are still pending.
| Name | Required | Description | Default |
|---|---|---|---|
| payer | Yes | The wallet that signed. | |
| txHash | Yes | The Solana signature. | |
| invoiceIds | Yes | From payout_batch.transactions[i].invoiceIds. |
prepare_signingARead-onlyIdempotentInspect
Synthesizes the local CLI signer invocation for one step of a swap_build plan. Does not call the Vurto backend — this only assembles the payload. You (the agent) do not need a private key and must never ask for one in chat: signing happens locally on the user's machine. RUN the command yourself as a background task (it blocks until the user approves/rejects/times out, then prints one JSON line and exits) and react to its exit — never ask the user "did you sign?". EVM supports "approve"/"transaction" steps (send tx.to/tx.data on-chain) and "signature" steps (sign step.typedData off-chain, EIP-712 — a CoW order; no gas, no transaction, no hash). expected_keys in the response tells you which result field to read: txHash for the first two, signature for the third. Solana has no steps[] and no approve: pass chainId "solana-mainnet" and step {transaction: build.transaction, executionRef: build.executionRef}. The response returns a different signer (Solana keys are not EVM keys) with the same shape, and expected_keys is signedTransaction — POST it to /v1/svm/execute, which broadcasts it and returns the signature.
| Name | Required | Description | Default |
|---|---|---|---|
| step | Yes | EVM: one entry from swap_build's steps[]. Solana: {transaction, executionRef} from the build. | |
| buildId | Yes | From a prior swap_build/swap_refresh response. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| walletAddress | Yes | The wallet the plan was built for. The signer refuses to sign if the connected wallet does not match. On Solana this is base58 and CASE-SENSITIVE: lowercasing it produces a different, non-existent address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses critical behavior: the command blocks until user approval/rejection/timeout, prints one JSON line, and exits; expected_keys tells which result field to read; Solana returns a different signer with the same shape and requires POSTing to /v1/svm/execute. This is rich, non-obvious behavioral context that annotations alone would not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries high-signal operational detail. It is front-loaded with the core purpose, then flows into agent instructions, EVM behavior, and Solana behavior. There is no filler or repetition of schema 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?
Despite having no output schema, the description fully explains the return behavior: one JSON line, expected_keys values (txHash, signature, signedTransaction), and the follow-up POST for Solana. It also covers blocking behavior, chain-specific differences, and the private-key handling rule, making it complete for a complex 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 100%, so the baseline is 3, but the description adds meaningful parameter semantics: it explains EVM step types (approve/transaction/signature), Solana's lack of steps[] and approve, the exact step shape to pass for Solana, and the significance of executionRef absence. This goes beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'synthesizes the local CLI signer invocation for one step of a swap_build plan' and explicitly distinguishes itself by noting it 'does not call the Vurto backend'. This clearly separates it from backend-calling siblings and makes its role 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 gives explicit operational guidance: the agent must not ask for a private key, should run the command as a background task, and should never ask the user 'did you sign?'. It also clarifies when EVM vs Solana parameter shapes apply. It does not name sibling tools as alternatives, but the context is clear enough for correct use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_executionAIdempotentInspect
Reports a completed swap, closing the loop. EVM transaction: pass wallet + txHash + quoteId; never report an approve step as an execution. EVM CoW signature: pass wallet + chainId + quoteId + signature; the server reloads the stored build and submits the signed order, returning uid (there is no transaction hash for this path). Solana: pass buildId + signature; the server verifies the fee payer and transaction on the network. No API key required; a machine credential only raises limits.
| Name | Required | Description | Default |
|---|---|---|---|
| txHash | No | EVM transaction swap only; do not report approve hashes. | |
| wallet | No | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| buildId | No | Solana: buildId returned by swap_build. | |
| chainId | No | EVM CoW: integer chain id. Solana may use "solana-mainnet", but buildId + signature are sufficient. | |
| quoteId | No | EVM: quote id from the built plan. | |
| signature | No | EVM: EIP-712 CoW signature. Solana: transaction signature. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing server-side behavior: the server reloads the stored build, submits the signed CoW order, returns a uid, verifies the Solana fee payer/transaction, and has no transaction hash for the CoW path. It also clarifies credential behavior, adding real context without contradicting 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 dense but every clause earns its place. It front-loads the purpose, then gives three compact path-specific sentences and a final credential note, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-path, 6-parameter tool with no output schema, the description covers parameter routing, server-side effects, auth, and the CoW path's uid return. It stop short of describing return or error semantics for the EVM-transaction and Solana paths, which is a minor but real 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 100%, so the baseline is 3, but the description adds crucial cross-parameter relationships: wallet + txHash + quoteId for EVM, wallet + chainId + quoteId + signature for CoW, and buildId + signature for Solana. This combinatorial guidance is not visible in the flat schema and meaningfully helps an agent assemble correct calls.
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 'Reports a completed swap, closing the loop,' which clearly names the action and resource. It then details three distinct invocation paths (EVM transaction, EVM CoW signature, Solana), making it easy to distinguish from sibling build/quote/status 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 gives precise parameter combinations for each execution path and an explicit exclusion: 'never report an approve step as an execution.' It also notes that no API key is required. It does not explicitly name sibling alternatives like swap_status, but the path-specific guidance is strong enough to route correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swap_buildAInspect
Build a signable/sendable plan for a swap. This is the tool that does the work — an agent that only knows this tool can execute a swap end to end. Quotes and builds the best route in one call when quoteId is omitted (recommended): a route with GAIN first, re-quoting up to 3 rounds total before accepting one without gain, the same rule as Invoice; pass quoteId from a prior swap_quote to build exactly that route instead. No API key required: pass the wallet that will sign. A machine credential is optional and only raises your limit from the per-IP cap to the credential budget. Four things to hold onto: 1. steps[] are ORDERED and REQUIRED. Skipping an approve step guarantees a revert. 2. If simulation.status is "approval_required", sign/send only the approve step(s), do not report them as the swap execution, then call swap_build again with quoteId set to the quote.id of that build (the approved route; without it a fresh quote may pick another provider whose spender you never approved). If it is "incomplete", do not sign anything: the transaction was never independently verified. 3. If a step has type "signature", there is no transaction and never will be one for that step — what exists afterward is the uid from report_execution, not a hash. 4. If the provider is cowswap and the token sold is the chain's native asset, the transaction only REGISTERS the order — a successful receipt is not a successful swap. Use swap_status, not the receipt, to know what actually happened. 5. routeSwitch, when present, means the route you asked for refused to build (it hit its request limit) and the plan was built with another provider instead: {from, to, reason}. The quote in the plan is the route that will actually be signed. If the user picked that route themselves, say which provider replaced it before they sign.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Human decimal amount, e.g. "100". Use this OR amountRaw, not both. | |
| wallet | Yes | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| quoteId | No | Optional: build exactly this route from a prior swap_quote, instead of quoting fresh. | |
| tokenIn | No | Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate — pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint. | |
| receiver | No | Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it — others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead. | |
| tokenOut | No | Contract address, or symbol. | |
| amountRaw | No | Raw integer string in tokenIn's smallest unit. | |
| slippageBps | No | Optional, a sane per-pair default applies when omitted. | |
| maxSlippageBps | No | Optional ceiling, 0-10000, enforced on every future refresh of this build — once set it never loosens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavioral traits far beyond the annotations: ordered/required steps, revert risk from skipping an approve, simulation.status handling for approval_required and incomplete, signature-step semantics, cowswap order-registration caveat, and routeSwitch replacement. These are critical execution details the annotations (readOnlyHint, destructiveHint, etc.) 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 description is long but front-loads purpose and organizes the remaining material into five numbered, scannable behavioral points. Each sentence carries a necessary warning for a complex execution tool, though the overall length sits near the upper bound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a multi-step swap execution, rich schema coverage (100%), and no output schema, the description covers the critical edge cases: simulation statuses, ordered steps, cowswap registration, and route switching. An agent has enough information to invoke and sequence the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents every parameter in detail. The description reinforces quoteId and wallet behavior but adds no new syntax, constraints, or parameter meaning beyond what the structured schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (build a signable/sendable swap plan) and explicitly distinguishes itself from swap_quote by describing when it quotes fresh versus building a prior route. An agent can tell this is the end-to-end execution builder, not just a quoting tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: omit quoteId to quote-and-build in one call (recommended), pass quoteId from swap_quote to pin a route, and call swap_build again with quoteId after an approval_required result. It also names swap_status as the way to learn what actually happened, covering when not to rely on a receipt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swap_quoteARead-onlyInspect
Compare ranked routes across providers for a swap, without building or spending anything. Ranked by net value after gas and platform fee, not raw output, with ONE unit price for the output token across every route, so a friendlier price feed can never put a route that delivers fewer tokens on top. Each quote also carries estimatedGas, the gas in units behind the same gasUsd, if you would rather rank against a gas price you read yourself. A quote is only usable by swap_build for about 10-12 seconds — do not hold onto a quoteId and build it later, quote again instead.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Human decimal amount, e.g. "100". Use this OR amountRaw, not both. | |
| wallet | No | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| tokenIn | Yes | Contract address (Solana: mint), or symbol (case-insensitive). A symbol matching more than one token on this chain fails with ambiguous_token and every candidate — pick the address you meant and retry. On Solana only VERIFIED tokens resolve by symbol, because there anyone can mint a token using another one's symbol; an unverified token has to be named by its mint. | |
| receiver | No | Optional: deliver the output to this address instead of the signing wallet. Only providers with supportsReceiver true on the resulting quote honor it — others are left out of quotes[] entirely rather than risk sending to the wrong address. supportsReceiver is present on Solana quotes too, so read it instead of assuming. On Solana, selling into native SOL with a separate destination is refused on every provider (receiver_native_sol_unsupported): closing the wrapped-SOL account sends balance and rent to whoever signs. Ask for wSOL instead. | |
| tokenOut | Yes | Contract address, or symbol. | |
| amountRaw | No | Raw integer string in tokenIn's smallest unit. | |
| slippageBps | No | Optional, a sane per-pair default applies when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations' readOnly and non-destructive hints. It reveals that no spend occurs, explains the ranking is by net value after gas and platform fees rather than raw output, discloses the single unit price behavior, explains estimatedGas vs gasUsd, and highlights a critical time-sensitive behavior: quoteId is only valid for 10-12 seconds and must not be held. This is rich behavioral context an agent needs beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: each sentence earns its place. It leads with the purpose and read-only nature, then explains ranking logic, gas detail, and the critical expiration behavior. No filler or redundancy is present, and the most operationally important warning about quote lifetime is placed at the end where it builds on the previous context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only quote tool with no output schema, the description covers the essential behavior: what the quote compares, how routes are ranked, how fees and gas factor in, and the short-lived validity of quoteId. It also routes to the next step (swap_build) and warns against stale quotes. When combined with the fully documented input schema, the definition is complete enough for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 8 parameters thoroughly, including chainId types, tokenIn symbols and mint behavior, amount vs amountRaw, receiver constraints, and slippage. The description does not need to add parameter-level meaning and mostly reinforces behavioral concepts like quoteId and gas rather than explaining params. Baseline 3 is appropriate because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Compare ranked routes across providers for a swap,' which clearly identifies the tool's job. It also distinguishes the quote step from building by saying 'without building or spending anything' and references swap_build as the consumer. It does not explicitly differentiate from sibling quote tools like double_quote or nn_quote, but the 'across providers' framing and comparison emphasis provide enough clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: call this before building or spending, and use the returned quote as input to swap_build. It also gives explicit temporal guidance not to hold a quoteId because quotes expire in 10-12 seconds and to quote again instead. It does not systematically state when NOT to use this tool versus the other quote siblings, so it stops short of full alternative-comparison guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swap_statusARead-onlyIdempotentInspect
Re-checks a swap. EVM: pass wallet + executionId (the id from report_execution); for CoW ETH-flow this consults the orderbook and distinguishes order_expired_refundable from order_expired_refunded instead of trusting the registration receipt. Solana: pass signature; answers come directly from the network and may be confirmed, pending, failed or expired.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | No | Wallet that will sign. Required for builds and EVM execution/history calls. On an anonymous EVM quote, pass it to make the returned quoteId executable; without it the quote is indicative. | |
| signature | No | Solana: the transaction signature. Answers come from the network itself: confirmed, pending, failed, or expired (past lastValidBlockHeight the transaction can no longer enter any block). | |
| executionId | No | EVM: the id returned by report_execution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent; the description adds meaningful behavioral detail: for CoW ETH-flow it consults the orderbook and distinguishes order_expired_refundable from order_expired_refunded (rather than trusting the receipt), and for Solana it lists the possible network statuses (confirmed, pending, failed, expired). This goes beyond the annotations without contradicting them.
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 well-organized sentences with no fluff. The core purpose is front-loaded ('Re-checks a swap'), and the EVM/Solana split is clear and scannable. Every clause adds value; nothing is 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?
The tool handles multiple chains and optional parameters, yet the description explains the chain-specific inputs and even hints at possible outcomes (statuses for Solana, distinguishing expiry types for CoW). With no output schema, it gives enough about the expected return behavior. It doesn't describe the exact return structure, but for a status-check tool this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3. The description adds cross-chain usage context: it specifies which parameters apply to which chain (wallet+executionId for EVM, signature for Solana), and clarifies that executionId comes from report_execution. This is additional meaning beyond the schema's per-parameter descriptions, which are more generic.
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 ('Re-checks a swap') and immediately separates EVM and Solana variants, clarifying that this is a status-check tool distinct from the build/quote/execution siblings. It even names the source of the executionId (report_execution), which disambiguates it from that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent which parameters to pass for each chain ('EVM: pass wallet + executionId', 'Solana: pass signature') and references report_execution as the source of the id, implying this tool is used after execution to re-check status. It doesn't explicitly say 'use this instead of X', but the contextual guidance is clear enough given the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_checkRead-onlyIdempotentInspect
Check any wallet (EVM 0x address or Solana base58, case-sensitive) before paying it or taking its money: OFAC SDN list on both families; on Solana also the issuer freeze of USDC and EURC (Circle), USDT (Tether), PYUSD and USDG (Paxos) and USD1 (World Liberty), the issuer freeze index, and a fund trail up to three hops back. Returns verdict passed, blocked or unavailable, with each check. Paying an invoice (invoice_pay) runs this check on the receiving wallet and refuses with receiver_blocked, so a payment through Vurto Payments never reaches a sanctioned or frozen wallet. To pay someone directly, create an invoice to their wallet (invoice_create) and pay it with invoice_pay. Plain swaps (swap_build, double_build, nn_build) do not run it.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | Yes | The wallet to check. EVM 0x address, or Solana base58 (case-sensitive). |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Added
payout_batch - Added
payout_report_payment
1 tool update
- Added
wallet_check
1 tool update
- Changed
invoice_create1 field changed- added
Input schema / properties / confidentialAdded value: +{ + "description": "Optional, Solana only. A private (confidential) invoice hides the receiving wallet from anyone with the link (invoice_get returns recipient: null), and every payment route screens the payer first: OFAC SDN list plus the issuer freeze of USDC and EURC (Circle), USDT (Tether), PYUSD and USDG (Paxos) and USD1 (World Liberty), the issuer freeze index, and a fund trail up to three hops back through the same checks (a flagged sender on the first hop blocks; on hops two and three it only warns). These are checks of the paying wallet, whatever token it pays with. A blocked payer gets payer_blocked.", + "type": "boolean" +}
4 tool updates
- Added
invoice_create - Added
invoice_get - Added
invoice_pay - Added
invoice_report_payment
9 tool updates
- First observed
double_build - First observed
double_quote - First observed
nn_build - First observed
nn_quote - First observed
prepare_signing - First observed
report_execution - First observed
swap_build - First observed
swap_quote - First observed
swap_status
Related MCP Connectors
Non-custodial DEX aggregator for autonomous AI agents: best-price swaps on 8 chains, no API key.
Cross-chain swap API for native Bitcoin, Solana and EVM chains. No API key, no custody.
Real-time non-custodial crypto swap estimates and on-chain routing across 240+ pairs.
21On-chain DEX aggregator: quotes and verified swap calldata computed on your own RPC. No API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceFree DEX aggregator API that returns executable swap calldata across 46 EVM chains. No API key required. Single GET request returns ready-to-sign transactions for any token pair.22MIT
- AlicenseNot gradedqualityCmaintenanceNon-custodial Solana swap routing with best-price execution, flat 0.25% fee, and built-in on-chain scam checking for token safety.58 npmMIT
- AlicenseAqualityAmaintenanceEnables cross-chain swap execution across 12 venues and 17 chains, including native Bitcoin as source or destination, with tools for quoting, execution, status, and health checks. No signup, API key, or protocol fee required.5MIT
- AlicenseNot gradedqualityCmaintenanceDeFi execution layer for AI agents - swap, zap in/out of LP, route across AMMs on 5 EVM chains.44 npm7MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.