RAVN
Server Details
Cross-chain swap API for native Bitcoin, Solana and EVM chains. No API key, no custody.
- Status
- Healthy
- Uptime
- 100.0% over 41 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- ravndex/ravn-examples
- GitHub Stars
- 0
TDQS
Scored across 10 tools
Each tool targets a distinct step or resource in the swap lifecycle: quote, execute, submit signature, poll status, list chains/tokens, resolve arbitrary tokens, check BTC-source coverage, prepare BTC deposits, and check venue health. Overlaps are minimal and descriptions clearly delineate BTC-source-only coverage from generic token listing and quoting.
All names use lowercase snake_case with a consistent `ravn_` prefix, which is immediately readable. However, ordering varies between verb-first (`ravn_submit_signature`), resource-first (`ravn_tokens_resolve`), and pure nouns (`ravn_chains`, `ravn_health`), so it is not a strict verb_noun pattern throughout.
Ten tools is well-scoped for a cross-chain swap routing API, covering quote, execution, status, token discovery, BTC-specific flows, and health checks without obvious redundancy. Each tool earns its place in the workflow.
The surface covers the full swap lifecycle—quote, execute, submit signature, and poll status—plus token/chain discovery, BTC deposit preparation, BTC-source routability coverage, and venue liveness. No critical dead ends are apparent for the stated domain.
Available Tools
10 toolsravn_btc_coverageWhich tokens actually route from native BitcoinARead-onlyInspect
For a swap where native BTC is the source, not every token on the destination chain is reachable. Returns which of ravn_tokens's list on chainId a BTC venue can actually route to, and how many venues serve each, so you can build a token list that matches what will really quote instead of discovering it one NO_LIQUIDITY at a time. BTC-as-source only — selling a token INTO BTC isn't restricted the same way (nearly any token can be sold into BTC), so this has nothing useful to say about that direction.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| chainId | Yes | The destination chain to check BTC-source coverage on |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description doesn't need to repeat those. The description adds the directional asymmetry (BTC-source vs. token-into-BTC) and reveals that output includes venue counts, providing behavioral context beyond the annotations. It also frames the tool as a way to avoid trial-and-error discovery, which is useful. No contradiction with 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 two sentences, front-loaded with the core function and the key limitation. It packs substantial context without redundancy. The second sentence could be slightly tighter, but overall it is efficient and well-ordered.
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 coverage tool with an output schema, the description covers the essential logic, the directional restriction, and the practical motivation. The output schema presumably details the return structure, so the description doesn't need to. Rate limits are hinted at via the apiKey parameter. The only minor omission is explicit mention of error behavior, but the NO_LIQUIDITY reference gives some context. Overall, it is complete enough for an agent to use 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 description coverage is 100%: both apiKey and chainId have descriptive text in the schema (apiKey for rate limit, chainId for destination chain). The description does not add any parameter-specific semantics beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it returns which tokens from ravn_tokens are reachable for BTC-native-source swaps on a given chain, including the number of venues per token. It distinguishes itself from ravn_tokens (which provides the full list) and the reverse swap direction. The title reinforces the scope, making the tool's 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 explicitly scopes usage to BTC-as-source swaps and excludes the sell-into-BTC direction, stating it has 'nothing useful to say' there. It references ravn_tokens as the source list to filter, implying the alternative of using ravn_tokens for the full list. It also explains the practical use case: building a token list that will actually quote without hitting NO_LIQUIDITY errors, which tells the agent exactly when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_btc_prepare_sendPrepare a signable Bitcoin transaction for a RAVN DEPOSITARead-onlyInspect
Turns a DEPOSIT-type ravn_execute result (depositAddress + depositAmount) into a ready-to-sign PSBT, so you don't have to write your own UTXO selection and fee-estimation code. Fetches your UTXOs and the current network fee rate from mempool.space (public, no auth). RAVN never sees or touches a private key — sign the returned PSBT with your own wallet and broadcast it yourself. Only one signer is ever needed (unlike PSBT flows that require coordinating signatures across multiple UTXO-holding wallets), because every RAVN BTC-source venue resolves to a plain single-recipient payment.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Defaults to mainnet | |
| toAddress | Yes | depositAddress from ravn_execute | |
| amountSats | Yes | depositAmount from ravn_execute, in satoshis | |
| fromAddress | Yes | Your Bitcoin address holding the UTXOs to spend — native SegWit (bc1q…) or Taproot (bc1p…) only | |
| feeRateSatsPerVb | No | Omit to use mempool.space's current halfHourFee estimate |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals that the tool fetches UTXOs and the current network fee rate from mempool.space (public, no auth), which is an external behavioral dependency the agent should know. It also discloses that RAVN never sees or touches a private key and that the resulting PSBT needs only one signer, adding meaningful safety and workflow context without contradicting readOnlyHint/openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the core transform in the first sentence and then add relevant behavioral context (mempool.space dependency, private-key handling, single-signer nature). There is no filler or tautology, and each sentence contributes useful information for an agent deciding whether to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and all parameters are documented, the description covers the workflow, the external service used, the privacy boundary, and the single-signer property. The main purpose and relationship to ravn_execute are explicit, and the sibling tools are clearly distinct. Minor details like error handling or default network behavior are left to the schema, which is acceptable.
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?
All five parameters are fully described in the input schema, so the description does not need to repeat syntax details. The description does helpfully map toAddress and amountSats to the depositAddress and depositAmount fields from ravn_execute, easing correct invocation. This adds value above the schema, but the schema already carries the core parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb phrase: 'Turns a DEPOSIT-type ravn_execute result ... into a ready-to-sign PSBT,' clearly identifying the resource, the operation, and the output. It names the upstream tool (ravn_execute) and clarifies that this is a preparation step, not the actual broadcast, which distinguishes it from the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when this tool applies: after a DEPOSIT-type ravn_execute result, and why it is useful, because the agent does not need to write its own UTXO selection or fee-estimation code. It also contrasts single-signer PSBT flows with multi-signer coordination, implicitly defining the appropriate context. It does not explicitly enumerate when-not-to-use cases against all siblings, but the sibling names and workflow context make the distinction easy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_chainsList every chain RAVN supportsARead-onlyInspect
Every chain RAVN lists a token registry for (see ravn_tokens). Static, doesn't change per request, safe to cache instead of hardcoding a chain table.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, but the description adds substantial behavioral value: it states the result is static, does not change per request, and is safe to cache. This is exactly the kind of context beyond the annotation that helps an agent decide whether and how often to call 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?
Two short sentences with zero wasted words: the purpose is front-loaded and the caching guidance follows naturally. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only list with no required parameters and an output schema available. The description covers the key non-obvious facts—stability, cacheability, and the relationship to ravn_tokens—leaving nothing essential missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional apiKey parameter is already fully documented in the schema as a rate-limit booster. The description adds no parameter-level information, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific resource: every chain RAVN maintains a token registry for, and the parenthetical cross-reference to ravn_tokens distinguishes it from the sibling that lists tokens. The title adds the clear verb 'List'. An agent can immediately tell what this tool returns and how it differs from the token-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: the data is static, per-request invariant, and safe to cache instead of hardcoding a chain table. This effectively tells the agent when to call it, though it does not explicitly state when not to use it or name a specific alternative tool beyond the ravn_tokens cross-reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_executeExecute a RAVN swap quoteInspect
Turn a quoteToken from ravn_quote into an execution payload. Returns one of three shapes (executionType): TRANSACTION (sign and broadcast yourself), SIGNATURE (sign, RAVN submits), or DEPOSIT (send the input asset to a given address). RAVN never takes custody of funds — you always sign or send from your own wallet. TRANSACTION and SIGNATURE may also include an approval — an ERC-20 approve() you must broadcast and wait to be MINED before the transaction/signature, or it fails (reverts on TRANSACTION; on SIGNATURE the order is accepted and silently never fills). Only present when the sold token needs it — omitted for native-coin sells and already-approved tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| quoteToken | Yes | The quoteToken returned by ravn_quote | |
| refundAddress | No | Late-bound refund recipient if the swap fails, honoured by the same venues as destinationAddress. Every other venue fixes the refund address when it prices, and a DIFFERENT one here is rejected rather than silently ignored; supply refundAddress on ravn_quote instead | |
| destinationAddress | No | Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, RAVN two-hop routes). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
ravn_healthCheck RAVN venue healthARead-onlyInspect
Liveness check across every venue RAVN routes through — call before a swap if you want to know whether a route is degraded ahead of time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint are already present in annotations, and the description adds behavioral context beyond them: it checks all venues RAVN routes through and is intended as a pre-swap degradation signal. It does not go into response interpretation, but an output schema is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and resource, then immediately adds the practical usage trigger. No filler or repetition of structured metadata.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only health check with an output schema, the description is fully adequate: it names the scope, the timing, and the purpose. Nothing necessary for an agent to decide to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the 0-parameter baseline applies and no parameter documentation is required. The description does not need to add parameter meaning because there is nothing to configure.
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 concrete action ('liveness check') and a specific resource ('every venue RAVN routes through'), making the tool's purpose unmistakable. The scope is clearly differentiated from swap execution and quoting siblings by focusing on route/venue health.
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 a clear usage context: call before a swap when you want advance knowledge of route degradation. It does not explicitly name alternatives or say when not to use it, so it stops short of full sibling routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_quoteGet a RAVN swap quoteARead-onlyInspect
Get a swap quote from RAVN — same-chain or cross-chain, across 17 chains including native (non-wrapped) Bitcoin and Solana as source or destination. Free, no API key or payment required. Returns a quoteToken; pass it to ravn_execute to get a signable/broadcastable execution payload.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| inputToken | Yes | Token contract address, or 0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE for the chain's native coin | |
| inputAmount | Yes | Positive integer string, in the input token's smallest unit (no decimals) | |
| outputToken | Yes | Token contract address, or 0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE for the chain's native coin | |
| rankingMode | No | best_output (default) picks the highest net output; fastest picks the quickest-settling quote within slippageBps | |
| slippageBps | No | Max acceptable slippage in basis points | |
| userAddress | Yes | Address the input asset will be sent from | |
| confidential | No | Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Through this MCP server only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback): RAVN's second private venue, Houdini Swap, needs the end user's IP, user-agent and country for its compliance rules, which an MCP call doesn't carry — use POST /api/v1/quote for it. ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing | |
| inputChainId | Yes | Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status | |
| excludeVenues | No | Drop specific venues from this race, e.g. a risk objection to one of them or ravn_health showing it degraded. Naming a venue that was never eligible for this pair is a no-op, not an error | |
| outputChainId | Yes | Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status | |
| refundAddress | No | Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress | |
| destinationAddress | No | Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error. A malformed address, one from the wrong ecosystem, or a known non-wallet address (a RAVN-listed token's mint/contract, this swap's own tokens, the native-coin sentinel, burn addresses, Solana core programs, and via an on-chain lookup a Solana token account or program — the token-account error names the owning wallet, which is the address to use) IS an error here — funds sent there are unrecoverable. Omit the field rather than passing an empty string; an empty string is treated as omitted |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely non-structured facts: it is free, no API key or payment is required (the apiKey param only raises a rate limit), and the returned quoteToken is the handoff to ravn_execute, making clear this call never moves funds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste: capability and chain scope first, cost/auth second, return-value handoff last. Nothing redundant and nothing buried.
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 a rich output schema present, the description does not need to explain return values and correctly focuses on the quoteToken handoff. Given the 13-parameter, multi-venue complexity, it is nearly complete, though a note on quote validity/expiry would round it out.
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 schema already documents all 13 parameters, including the deep conditional rules for destinationAddress and refundAddress. The description adds no parameter-level meaning of its own, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb and resource (get a swap quote), scoped to same-chain/cross-chain and 17 chains with native BTC/Solana support. It also names ravn_execute as the downstream consumer, so an agent can separate quoting from execution 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?
Clear context for when to call it (any quote, free, no key needed) and it routes the agent to ravn_execute for the actual swap, plus points at ravn_chains/ravn_health for chain and venue data. It stops short of stating exclusions or preconditions, so it is not a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_statusCheck RAVN swap statusARead-onlyInspect
Poll the status of a swap by its quoteToken and ref from ravn_execute (statusRef, deposit address, or origin tx hash). Use the quoteToken execute returned — compose rebinds hop 1 onto hop 2's deposit. Status is authoritative where the venue exposes it; a swap the venue can't track reports 'unknown' rather than a guess.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | statusRef from ravn_execute when it returned one (always for DEPOSIT and SIGNATURE venues — it is the venue's own tracking key, which is not always the deposit address); otherwise the origin tx hash | |
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| quoteToken | Yes | The quoteToken from ravn_quote — the venue is decoded from it |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuine operational context beyond that: status is authoritative only where the venue exposes it, and untracked swaps report 'unknown' rather than a fabricated guess — an important behavioral trait for an agent interpreting results. It does not mention polling frequency or terminal states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose, then usage, then behavioral caveat. Dense but each sentence earns its place; 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?
An output schema exists, so return values need no explanation, and the description covers purpose, inputs, and the key behavioral caveat. Minor gap: no mention of polling interval or how to recognize a terminal/complete state, which an agent calling a status tool would benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it clarifies that the quoteToken should be the one ravn_execute returned (because compose rebinds hop 1 onto hop 2's deposit) and enumerates the valid forms of ref. This goes beyond the schema's own 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?
States a specific verb and resource ('Poll the status of a swap') and immediately names the two identifying inputs, quoteToken and ref. It is clearly distinguishable from ravn_quote (price quoting) and ravn_execute (which produces the reference) 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?
Gives clear context for use: poll after ravn_execute, using the quoteToken execute returned, and explains the ref can be a statusRef, deposit address, or origin tx hash. It stops short of explicit when-not guidance (e.g., polling cadence or when status becomes terminal), so it is strong but not fully routing-aware.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_submit_signatureSubmit a signed RAVN orderAInspect
For a SIGNATURE-type ravn_execute result only: submit the signature(s) you collected (over typedData, and approvalData if present) to actually place the order. RAVN decodes the venue from quoteToken and routes to the right venue-specific submit path — you never touch a per-venue endpoint. Returns a statusRef — pass it to ravn_status as ref to poll this swap.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| signature | Yes | Signature over the typedData from ravn_execute | |
| quoteToken | Yes | The quoteToken from ravn_quote | |
| approvalSignature | No | 0x Gasless only: signature over approvalData, when ravn_execute returned one |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is not read-only and not destructive, and the description reinforces the side effect by saying it 'actually places the order.' It adds useful behavioral context: RAVN decodes the venue from quoteToken, routes automatically, and returns a statusRef for polling. It doesn't cover failure modes, but the annotation profile covers the key safety expectations.
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: the key condition is front-loaded, each sentence carries distinct information, and 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?
With a rich schema and output schema present, the description covers the remaining contextual gaps: when the tool is applicable, what inputs are involved, how venue routing works, and how to follow up via ravn_status. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description doesn't need to re-explain parameters. It adds mild value by linking parameters to their sources (signature from ravn_execute, quoteToken from ravn_quote), but this is context rather than essential semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the exact condition ('For a SIGNATURE-type ravn_execute result only') and states the core action: submit collected signatures to actually place the order. This clearly distinguishes it from sibling tools like ravn_execute, ravn_quote, and ravn_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly scopes when to use the tool ('SIGNATURE-type ravn_execute result only') and tells the agent what inputs are relevant (signature over typedData, approvalSignature if present). It also explains the routing behavior so the agent knows it doesn't need per-venue endpoints, and it points to ravn_status for polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_tokensList RAVN's token registry for a chainARead-onlyInspect
RAVN's own listed token registry for one chain — populate a token picker without hardcoding one. This is "what RAVN knows about and might route", not a per-pair routability guarantee for any specific pair; call ravn_quote to check that.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| chainId | Yes | Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds behavioral nuance by clarifying that the list represents 'what RAVN knows about and might route', not a guaranteed routing list, and directs to ravn_quote for verification. This is valuable context beyond the annotations, though it doesn't discuss rate limits or other behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. It front-loads the core purpose and then adds a crucial caveat and pointer to an alternative. Every sentence earns its place, and the structure is 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 that the output schema exists, the description does not need to explain return values. It covers the purpose, scope, limitations, and directs to the relevant sibling tool for further verification. For a read-only list tool with clear annotations, everything an agent needs to call it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both apiKey and chainId having clear descriptions. The tool description does not add further detail about the parameters themselves (e.g., formatting, optionality), so it remains at the baseline of 3—the schema carries the full burden and the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource ('List RAVN's token registry for one chain') and adds a concrete use case ('populate a token picker without hardcoding one'). It also distinguishes itself from ravn_quote by clarifying it is not a per-pair routability guarantee, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool (to populate a token picker) and when not (for per-pair routability, directing to ravn_quote). It even names the alternative tool and the condition that selects it, leaving no ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ravn_tokens_resolveResolve a token address to its metadataARead-onlyInspect
Resolve an arbitrary token address to its metadata (symbol, name, decimals) via an on-chain read — for a paste-any-address flow, when the token isn't necessarily on ravn_tokens's list.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Your RAVN API key, if you have one — raises your rate limit | |
| address | Yes | Token contract address / mint to resolve | |
| chainId | Yes | Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds 'via an on-chain read,' confirming the operation is a non-mutating lookup. It also sets expectations for arbitrary/unlisted addresses, which is useful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence delivers purpose, output, behavioral mode, and usage context without waste. The em-dash separates the core action from the targeting guidance cleanly.
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 an output schema present and annotations covering read-only/open-world behavior, the description provides all necessary context for correct invocation. It clearly states what this tool does, when to use it, and how it differs from ravn_tokens.
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 schema fully documents address, chainId, and apiKey. The description reinforces that 'address' is a token contract/mint and clarifies the output metadata, but it does not add parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve'), a specific resource ('arbitrary token address'), and the exact metadata returned (symbol, name, decimals). It also distinguishes itself from ravn_tokens by clarifying it handles tokens not necessarily on that list.
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 scopes the tool to a 'paste-any-address flow' and states when it applies: 'when the token isn't necessarily on ravn_tokens's list.' This gives the agent a clear decision rule versus the sibling ravn_tokens.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
ravn_execute1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "approval": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "approvalData": { - "additionalProperties": {}, - "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "deposit": { - "additionalProperties": {}, - "description": "DEPOSIT only", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "executionType": { - "enum": [ - "DEPOSIT", - "TRANSACTION", - "SIGNATURE" - ], - "type": "string" - }, - "quoteToken": { - "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token", - "type": "string" - }, - "statusRef": { - "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash", - "type": "string" - }, - "submit": { - "additionalProperties": {}, - "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "transaction": { - "additionalProperties": {}, - "description": "TRANSACTION only", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "typedData": { - "additionalProperties": {}, - "description": "SIGNATURE only", - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "executionType", - "quoteToken" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "approval": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "approvalData": { + "additionalProperties": {}, + "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "deposit": { + "additionalProperties": {}, + "description": "DEPOSIT only", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "executionType": { + "enum": [ + "DEPOSIT", + "TRANSACTION", + "SIGNATURE" + ], + "type": "string" + }, + "quoteToken": { + "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token", + "type": "string" + }, + "statusRef": { + "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash", + "type": "string" + }, + "submit": { + "additionalProperties": {}, + "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "transaction": { + "additionalProperties": {}, + "description": "TRANSACTION only. On Solana (chainId -2): `serialized`, a base64 versioned transaction — have the user's wallet sign it exactly as returned and send it within a minute; never modify it, it can carry RAVN's partial signatures", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "typedData": { + "additionalProperties": {}, + "description": "SIGNATURE only", + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "executionType", + "quoteToken" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
2 tool updates
- Changed
ravn_execute1 field changed- changed
Input schema / properties / destinationAddress / descriptionPrevious value: -"Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, 2-hop). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours"New value: +"Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, RAVN two-hop routes). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours"
- Changed
ravn_quote1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "alternatives": { - "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - "estimatedTimeIsGuess": { - "description": "True when the time is RAVN's estimate, not the venue's own figure", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "executable": { - "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", - "type": "boolean" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "hops": { - "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "inputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "outputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the output amount. Compare against inputUsd for price impact" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - }, - "noMinimum": { - "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection", - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin", - "noMinimum" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "executable", - "slippage", - "gas", - "inputUsd", - "outputUsd", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt", - "alternatives" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "estimatedTimeIsGuess": { + "description": "True when the time is RAVN's estimate, not the venue's own figure", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "hops": { + "description": "RAVN routes (venue.name \"RAVN\": two-hop, or Relay with a DEX on arrival): the venues it runs through, in order. Sign hop 1; hop 2 is a unique deposit", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "inputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "outputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the output amount. Compare against inputUsd for price impact" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + }, + "noMinimum": { + "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection", + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin", + "noMinimum" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "inputUsd", + "outputUsd", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt", + "alternatives" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
1 tool update
- Changed
ravn_status1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "deliveredAmount": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Actual delivered output, in the output token's smallest unit, when the venue exposes it" - }, - "status": { - "type": "string" - }, - "tracking": { - "const": "unavailable", - "description": "Present instead of venueStatus when this venue has no live tracker yet", - "type": "string" - }, - "txHash": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The destination-chain tx that paid the user out, when the venue names one. Only populated once status is terminal (success/refunded/failed), never while still in flight" - }, - "venue": { - "type": "string" - }, - "venueStatus": { - "type": "string" - } - }, - "required": [ - "status", - "venue" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "deliveredAmount": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Actual delivered output, in the output token's smallest unit, when the venue exposes it. Only populated once status is terminal" + }, + "status": { + "type": "string" + }, + "tracking": { + "const": "unavailable", + "description": "Present instead of venueStatus when this venue has no live tracker yet", + "type": "string" + }, + "txHash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The destination-chain tx that paid the user out, when the venue names one. Only populated once status is terminal (success/refunded/failed), never while still in flight" + }, + "venue": { + "type": "string" + }, + "venueStatus": { + "type": "string" + } + }, + "required": [ + "status", + "venue" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
1 tool update
- Changed
ravn_quote1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "alternatives": { - "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - "estimatedTimeIsGuess": { - "description": "True when the time is RAVN's estimate, not the venue's own figure", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "executable": { - "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", - "type": "boolean" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "hops": { - "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "inputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "outputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the output amount. Compare against inputUsd for price impact" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - }, - "noMinimum": { - "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection", - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin", - "noMinimum" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "executable", - "slippage", - "gas", - "inputUsd", - "outputUsd", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt", - "alternatives" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Every other venue that raced and produced a usable quote, best expected net output first (a quote with slippage.noMinimum counts 0.3% under its outputAmount, the shortfall such a venue typically delivers). Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "estimatedTimeIsGuess": { + "description": "True when the time is RAVN's estimate, not the venue's own figure", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "hops": { + "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "inputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "outputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the output amount. Compare against inputUsd for price impact" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + }, + "noMinimum": { + "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection", + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin", + "noMinimum" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "inputUsd", + "outputUsd", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt", + "alternatives" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
1 tool update
- Changed
ravn_quote1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "alternatives": { - "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - "estimatedTimeIsGuess": { - "description": "True when the time is RAVN's estimate, not the venue's own figure", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "executable": { - "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", - "type": "boolean" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "hops": { - "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "inputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "outputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the output amount. Compare against inputUsd for price impact" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "executable", - "slippage", - "gas", - "inputUsd", - "outputUsd", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt", - "alternatives" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "estimatedTimeIsGuess": { + "description": "True when the time is RAVN's estimate, not the venue's own figure", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "hops": { + "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "inputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "outputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the output amount. Compare against inputUsd for price impact" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + }, + "noMinimum": { + "description": "True when the venue enforces no minimum output (Rift fills at its own rate once the deposit lands); bps is then not a protection", + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin", + "noMinimum" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "inputUsd", + "outputUsd", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt", + "alternatives" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
2 tool updates
- Changed
ravn_quote1 field changed- changed
Input schema / properties / confidential / descriptionPrevious value: -"Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback). ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing"New value: +"Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Through this MCP server only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback): RAVN's second private venue, Houdini Swap, needs the end user's IP, user-agent and country for its compliance rules, which an MCP call doesn't carry — use POST /api/v1/quote for it. ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing"
- Changed
ravn_status1 field changed- changed
Input schema / properties / ref / descriptionPrevious value: -"deposit address (DEPOSIT venues) or statusRef (SIGNATURE venues) from ravn_execute"New value: +"statusRef from ravn_execute when it returned one (always for DEPOSIT and SIGNATURE venues — it is the venue's own tracking key, which is not always the deposit address); otherwise the origin tx hash"
1 tool update
- Changed
ravn_quote1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "alternatives": { - "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - "estimatedTimeIsGuess": { - "description": "True when the venue didn't report a time for this quote", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "executable": { - "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", - "type": "boolean" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "hops": { - "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "inputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "outputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the output amount. Compare against inputUsd for price impact" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "executable", - "slippage", - "gas", - "inputUsd", - "outputUsd", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt", - "alternatives" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "estimatedTimeIsGuess": { + "description": "True when the time is RAVN's estimate, not the venue's own figure", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "hops": { + "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "inputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "outputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the output amount. Compare against inputUsd for price impact" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "inputUsd", + "outputUsd", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt", + "alternatives" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
1 tool update
- Changed
ravn_quote1 field changed- added
Input schema / properties / confidentialAdded value: +{ + "description": "Settle privately via NEAR Intents' Confidential Intents so the deposit and payout can't be linked on-chain. Only NEAR quotes it (NO_LIQUIDITY if it can't, never a public fallback). ~0.3 bps extra on EVM-to-EVM, ~5-8 bps extra when Bitcoin or Solana is a leg, and it can settle slower than a public swap (Bitcoin-source: 13 min public vs 43 min confidential) — read estimatedTimeSeconds before executing", + "type": "boolean" +}
2 tool updates
- Changed
ravn_execute2 fields changed- changed
Input schema / properties / destinationAddress / descriptionPrevious value: -"Late-bound output recipient, for venues that support binding it at execution time (e.g. NEAR Intents, Garden, Chainflip, Rift). Does NOT apply to Relay, Across, Eco, or THORChain — those fix the recipient at quote time with no execute-time re-bind, so this is silently ignored for them; supply destinationAddress on ravn_quote instead"New value: +"Late-bound output recipient, honoured by venues that bind at execution time (Chainflip, Garden, Layerswap, Mayan, NEAR Intents, Rift, 2-hop). Every other venue fixes the recipient when it prices: a DIFFERENT address here is rejected rather than silently ignored. Supply destinationAddress on ravn_quote instead, which every venue honours" - changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay or THORChain quote — both fix the refund address at quote time, so this is silently ignored for Relay and rejected outright for THORChain (a mismatch throws rather than executing against a stale address); supply refundAddress on ravn_quote instead"New value: +"Late-bound refund recipient if the swap fails, honoured by the same venues as destinationAddress. Every other venue fixes the refund address when it prices, and a DIFFERENT one here is rejected rather than silently ignored; supply refundAddress on ravn_quote instead"
- Changed
ravn_quote2 fields changed- changed
Input schema / properties / destinationAddress / descriptionPrevious value: -"Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error"New value: +"Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error. A malformed address, one from the wrong ecosystem, or a known non-wallet address (a RAVN-listed token's mint/contract, this swap's own tokens, the native-coin sentinel, burn addresses, Solana core programs, and via an on-chain lookup a Solana token account or program — the token-account error names the owning wallet, which is the address to use) IS an error here — funds sent there are unrecoverable. Omit the field rather than passing an empty string; an empty string is treated as omitted" - changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead"New value: +"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead. Validated against the INPUT chain (refunds are paid back on the origin), with the same non-wallet-address check as destinationAddress"
2 tool updates
- Changed
ravn_execute1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "approval": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "approvalData": { - "additionalProperties": {}, - "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "deposit": { - "additionalProperties": {}, - "description": "DEPOSIT only", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "executionType": { - "enum": [ - "DEPOSIT", - "TRANSACTION", - "SIGNATURE" - ], - "type": "string" - }, - "statusRef": { - "description": "DEPOSIT only (the deposit address) — SIGNATURE gets its statusRef from submitting to /api/v1/submit-signature instead", - "type": "string" - }, - "submit": { - "additionalProperties": {}, - "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "transaction": { - "additionalProperties": {}, - "description": "TRANSACTION only", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "typedData": { - "additionalProperties": {}, - "description": "SIGNATURE only", - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "executionType" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "approval": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "approvalData": { + "additionalProperties": {}, + "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "deposit": { + "additionalProperties": {}, + "description": "DEPOSIT only", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "executionType": { + "enum": [ + "DEPOSIT", + "TRANSACTION", + "SIGNATURE" + ], + "type": "string" + }, + "quoteToken": { + "description": "Pass to ravn_submit_signature and ravn_status. On compose this is the post-bind token from execute, not the original quote token", + "type": "string" + }, + "statusRef": { + "description": "Poll ravn_status with this. Always set for DEPOSIT and compose; TRANSACTION otherwise uses the origin tx hash", + "type": "string" + }, + "submit": { + "additionalProperties": {}, + "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "transaction": { + "additionalProperties": {}, + "description": "TRANSACTION only", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "typedData": { + "additionalProperties": {}, + "description": "SIGNATURE only", + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "executionType", + "quoteToken" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
- Changed
ravn_quote1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "alternatives": { - "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", - "items": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - "estimatedTimeIsGuess": { - "description": "True when the venue didn't report a time for this quote", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "executable": { - "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", - "type": "boolean" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "inputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "outputUsd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "USD value of the output amount. Compare against inputUsd for price impact" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "executable", - "slippage", - "gas", - "inputUsd", - "outputUsd", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt", - "alternatives" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "estimatedTimeIsGuess": { + "description": "True when the venue didn't report a time for this quote", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "hops": { + "description": "2-hop / dest-call: the venues actually used. Sign hop 1; hop 2 is a unique deposit", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "inputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "outputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the output amount. Compare against inputUsd for price impact" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "inputUsd", + "outputUsd", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt", + "alternatives" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
7 tool updates
- Added
ravn_btc_coverage - Added
ravn_chains - Changed
ravn_quote4 fields changed- added
Input schema / properties / excludeVenuesAdded value: +{ + "description": "Drop specific venues from this race, e.g. a risk objection to one of them or ravn_health showing it degraded. Naming a venue that was never eligible for this pair is a no-op, not an error", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / inputChainId / descriptionPrevious value: -"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_health for the live venue list"New value: +"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status" - changed
Input schema / properties / outputChainId / descriptionPrevious value: -"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_health for the live venue list"New value: +"Numeric chain id, e.g. 1=Ethereum, 8453=Base, -1=Bitcoin, -2=Solana — see ravn_chains for the full list, or ravn_health for live venue status" - changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "approval": { - "additionalProperties": {}, - "description": "Present when the input token needs an ERC-20 approval before executing", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "estimatedTimeIsGuess": { - "description": "True when the venue didn't report a time for this quote", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "executable": { - "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", - "type": "boolean" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "executable", - "slippage", - "gas", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Every other venue that raced and produced a usable quote, best output first. Each has its own quoteToken to pass to ravn_execute instead. Empty when no other venue could serve this pair, or when a route was excluded via excludeVenues", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "estimatedTimeIsGuess": { + "description": "True when the venue didn't report a time for this quote", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "inputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the input amount, same price source as gas.usd. Null when the token can't be priced" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "outputUsd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "USD value of the output amount. Compare against inputUsd for price impact" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "inputUsd", + "outputUsd", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt", + "alternatives" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
- Changed
ravn_status1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "status": { - "type": "string" - }, - "tracking": { - "const": "unavailable", - "description": "Present instead of venueStatus when this venue has no live tracker yet", - "type": "string" - }, - "venue": { - "type": "string" - }, - "venueStatus": { - "type": "string" - } - }, - "required": [ - "status", - "venue" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "deliveredAmount": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Actual delivered output, in the output token's smallest unit, when the venue exposes it" + }, + "status": { + "type": "string" + }, + "tracking": { + "const": "unavailable", + "description": "Present instead of venueStatus when this venue has no live tracker yet", + "type": "string" + }, + "txHash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The destination-chain tx that paid the user out, when the venue names one. Only populated once status is terminal (success/refunded/failed), never while still in flight" + }, + "venue": { + "type": "string" + }, + "venueStatus": { + "type": "string" + } + }, + "required": [ + "status", + "venue" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
- Added
ravn_submit_signature - Added
ravn_tokens - Added
ravn_tokens_resolve
2 tool updates
- Changed
ravn_execute1 field changed- changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay quote — Relay bakes the refund address in at quote time, so this is silently ignored for those; supply refundAddress on ravn_quote instead"New value: +"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay or THORChain quote — both fix the refund address at quote time, so this is silently ignored for Relay and rejected outright for THORChain (a mismatch throws rather than executing against a stale address); supply refundAddress on ravn_quote instead"
- Changed
ravn_quote2 fields changed- changed
Input schema / properties / destinationAddress / descriptionPrevious value: -"Where output should land, if different from userAddress. For a Solana-touching Across quote or a cross-ecosystem Eco quote, this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview (see ravn_quote's executable), since neither venue supports fixing the destination after quoting"New value: +"Where output should land, if different from userAddress. Required here, at quote time, to get an executable quote from Relay (Bitcoin as the source), THORChain (Bitcoin either direction), Across (a Solana-touching route), or Eco (a cross-ecosystem route) — omit it there and you get back a priced-but-unexecutable preview instead (see ravn_quote's executable), not an error" - changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Where to refund the input asset if the swap fails. For a Bitcoin-source Relay quote specifically, this must be supplied here, at quote time — Relay has no execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, THORChain, Chainflip, Rift) support binding this at execute time instead"New value: +"Where to refund the input asset if the swap fails. Required here, at quote time, for a Bitcoin-source Relay or THORChain quote — neither has an execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, Chainflip, Rift) support binding this at execute time instead"
2 tool updates
- Changed
ravn_execute1 field changed- changed
Input schema / properties / destinationAddress / descriptionPrevious value: -"Late-bound output recipient, for venues that need it at execution time rather than quote time"New value: +"Late-bound output recipient, for venues that support binding it at execution time (e.g. NEAR Intents, Garden, Chainflip, Rift). Does NOT apply to Relay, Across, Eco, or THORChain — those fix the recipient at quote time with no execute-time re-bind, so this is silently ignored for them; supply destinationAddress on ravn_quote instead"
- Changed
ravn_quote3 fields changed- changed
Input schema / properties / destinationAddress / descriptionPrevious value: -"Where output should land, if different from userAddress"New value: +"Where output should land, if different from userAddress. For a Solana-touching Across quote or a cross-ecosystem Eco quote, this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview (see ravn_quote's executable), since neither venue supports fixing the destination after quoting" - changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Where to refund the input asset if the swap fails. For a Bitcoin-source quote this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview, and supplying it later on ravn_execute instead has no effect (see ravn_execute's refundAddress)"New value: +"Where to refund the input asset if the swap fails. For a Bitcoin-source Relay quote specifically, this must be supplied here, at quote time — Relay has no execute-time re-bind, so omitting it returns a priced-but-unexecutable preview and supplying it later on ravn_execute has no effect. Other BTC-source venues (Garden, THORChain, Chainflip, Rift) support binding this at execute time instead" - changed
Output schema / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "data": { - "additionalProperties": false, - "properties": { - "approval": { - "additionalProperties": {}, - "description": "Present when the input token needs an ERC-20 approval before executing", - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "estimatedTimeIsGuess": { - "description": "True when the venue didn't report a time for this quote", - "type": "boolean" - }, - "estimatedTimeSeconds": { - "type": "number" - }, - "expiresAt": { - "type": "number" - }, - "fee": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "gas": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "estimated": { - "type": "boolean" - }, - "native": { - "type": "string" - }, - "nativeSymbol": { - "type": "string" - }, - "usd": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "native", - "nativeSymbol", - "usd", - "estimated" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "The native gas the user must hold; null on gasless venues" - }, - "input": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "output": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - }, - "quoteToken": { - "description": "Opaque token — pass to ravn_execute", - "type": "string" - }, - "routeType": { - "type": "string" - }, - "slippage": { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "bps": { - "type": "number" - }, - "guaranteedMin": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "isFirm": { - "type": "boolean" - } - }, - "required": [ - "bps", - "isFirm", - "guaranteedMin" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Null when the venue reports no slippage bound" - }, - "venue": { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "quoteToken", - "venue", - "routeType", - "input", - "output", - "fee", - "slippage", - "gas", - "estimatedTimeSeconds", - "estimatedTimeIsGuess", - "expiresAt" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "data", - "meta" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "details": {}, - "message": { - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "requestId": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "requestId", - "version" - ], - "type": "object" - } - }, - "required": [ - "error", - "meta" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "approval": { + "additionalProperties": {}, + "description": "Present when the input token needs an ERC-20 approval before executing", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "estimatedTimeIsGuess": { + "description": "True when the venue didn't report a time for this quote", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "executable": { + "description": "False = preview-only price, priced against a placeholder destination/refund address. ravn_execute will fail with QUOTE_NOT_EXECUTABLE — request a fresh quote with destinationAddress/refundAddress supplied instead", + "type": "boolean" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "executable", + "slippage", + "gas", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } +]
2 tool updates
- Changed
ravn_execute1 field changed- changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Late-bound refund recipient if the swap fails"New value: +"Late-bound refund recipient if the swap fails, for venues that support binding it at execution time. Does NOT apply to a Bitcoin-source Relay quote — Relay bakes the refund address in at quote time, so this is silently ignored for those; supply refundAddress on ravn_quote instead"
- Changed
ravn_quote1 field changed- changed
Input schema / properties / refundAddress / descriptionPrevious value: -"Where to refund the input asset if the swap fails — defaults to userAddress"New value: +"Where to refund the input asset if the swap fails. For a Bitcoin-source quote this must be supplied here, at quote time — omitting it returns a priced-but-unexecutable preview, and supplying it later on ravn_execute instead has no effect (see ravn_execute's refundAddress)"
5 tool updates
- Changed
ravn_btc_prepare_send2 fields changed- added
Input schema / properties / network / descriptionAdded value: +"Defaults to mainnet" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "changeSats": { + "type": "string" + }, + "estimatedFeeSats": { + "type": "string" + }, + "feeRateSatsPerVb": { + "type": "number" + }, + "inputCount": { + "type": "number" + }, + "psbtBase64": { + "type": "string" + }, + "totalInputSats": { + "type": "string" + } + }, + "required": [ + "psbtBase64", + "inputCount", + "totalInputSats", + "feeRateSatsPerVb", + "estimatedFeeSats", + "changeSats" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
ravn_execute4 fields changed- added
Input schema / properties / apiKey / descriptionAdded value: +"Your RAVN API key, if you have one — raises your rate limit" - added
Input schema / properties / destinationAddress / descriptionAdded value: +"Late-bound output recipient, for venues that need it at execution time rather than quote time" - added
Input schema / properties / refundAddress / descriptionAdded value: +"Late-bound refund recipient if the swap fails" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "approval": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "approvalData": { + "additionalProperties": {}, + "description": "SIGNATURE only, 0x Gasless: a second EIP-712 payload some venues need signed for the approval itself", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "deposit": { + "additionalProperties": {}, + "description": "DEPOSIT only", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "executionType": { + "enum": [ + "DEPOSIT", + "TRANSACTION", + "SIGNATURE" + ], + "type": "string" + }, + "statusRef": { + "description": "DEPOSIT only (the deposit address) — SIGNATURE gets its statusRef from submitting to /api/v1/submit-signature instead", + "type": "string" + }, + "submit": { + "additionalProperties": {}, + "description": "SIGNATURE only: { url, payload? } — POST the signed payload(s) to ravn_status's ref via /api/v1/submit-signature", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "transaction": { + "additionalProperties": {}, + "description": "TRANSACTION only", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "typedData": { + "additionalProperties": {}, + "description": "SIGNATURE only", + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "executionType" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
ravn_health1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "status": { + "enum": [ + "ok", + "degraded" + ], + "type": "string" + }, + "venues": { + "items": { + "additionalProperties": false, + "properties": { + "healthy": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "healthy" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "status", + "venues" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
ravn_quote4 fields changed- added
Input schema / properties / rankingMode / descriptionAdded value: +"best_output (default) picks the highest net output; fastest picks the quickest-settling quote within slippageBps" - added
Input schema / properties / refundAddress / descriptionAdded value: +"Where to refund the input asset if the swap fails — defaults to userAddress" - added
Input schema / properties / slippageBps / descriptionAdded value: +"Max acceptable slippage in basis points" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "approval": { + "additionalProperties": {}, + "description": "Present when the input token needs an ERC-20 approval before executing", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "estimatedTimeIsGuess": { + "description": "True when the venue didn't report a time for this quote", + "type": "boolean" + }, + "estimatedTimeSeconds": { + "type": "number" + }, + "expiresAt": { + "type": "number" + }, + "fee": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "gas": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "estimated": { + "type": "boolean" + }, + "native": { + "type": "string" + }, + "nativeSymbol": { + "type": "string" + }, + "usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "native", + "nativeSymbol", + "usd", + "estimated" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The native gas the user must hold; null on gasless venues" + }, + "input": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "output": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "quoteToken": { + "description": "Opaque token — pass to ravn_execute", + "type": "string" + }, + "routeType": { + "type": "string" + }, + "slippage": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "bps": { + "type": "number" + }, + "guaranteedMin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isFirm": { + "type": "boolean" + } + }, + "required": [ + "bps", + "isFirm", + "guaranteedMin" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Null when the venue reports no slippage bound" + }, + "venue": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "quoteToken", + "venue", + "routeType", + "input", + "output", + "fee", + "slippage", + "gas", + "estimatedTimeSeconds", + "estimatedTimeIsGuess", + "expiresAt" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
ravn_status3 fields changed- added
Input schema / properties / apiKey / descriptionAdded value: +"Your RAVN API key, if you have one — raises your rate limit" - added
Input schema / properties / quoteToken / descriptionAdded value: +"The quoteToken from ravn_quote — the venue is decoded from it" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "properties": { + "status": { + "type": "string" + }, + "tracking": { + "const": "unavailable", + "description": "Present instead of venueStatus when this venue has no live tracker yet", + "type": "string" + }, + "venue": { + "type": "string" + }, + "venueStatus": { + "type": "string" + } + }, + "required": [ + "status", + "venue" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "data", + "meta" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "details": {}, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "requestId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "requestId", + "version" + ], + "type": "object" + } + }, + "required": [ + "error", + "meta" + ], + "type": "object" + } + ], + "type": "object" +}
Related MCP Connectors
Token swaps at the best net price on 9 EVM chains and Solana. No API key, non-custodial.
Quote, create and track cross-chain crypto swaps. Non-custodial exchange, no account, no KYC.
Native cross-chain swaps: Bitcoin, Ethereum, Solana, Polkadot, Tron, Arbitrum. Quote, swap, track.
Non-custodial DEX aggregator for autonomous AI agents: best-price swaps on 8 chains, no API key.
Related MCP Servers
- 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 gradedqualityDmaintenanceCross-chain cryptocurrency swaps via Chainflip. Get quotes, execute swaps, and track progress. No API key required to get started.10MIT
- 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
- AlicenseAqualityDmaintenanceNon-custodial crypto swaps for AI agents: Solana (Jupiter) + 7 EVM chains (KyberSwap), 1288+ assets, cross-chain routing, priority-fee oracle, Hyperliquid perps. Returns unsigned transactions — your wallet signs, no API key, no KYC. Hosted at https://swaptitan.net/mcp181MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.