RAVN
Server Details
Cross-chain swap aggregator across 16+ chains, incl. native Bitcoin/Solana. 0% fees, non-custodial.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- ravndex/ravn-examples
- GitHub Stars
- 0
TDQS
Scored across 10 tools
Each tool has a distinct role in the swap lifecycle or supporting data path, but a few names share root terms (ravn_status/ravn_health, ravn_tokens/ravn_tokens_resolve) that could cause superficial confusion. The descriptions are clear enough that an agent should select correctly once it reads them.
All tools share a consistent ravn_ prefix and snake_case style, which makes them recognizable. However, the pattern mixes resource nouns (ravn_chains, ravn_tokens), action verbs (ravn_execute, ravn_submit_signature), and modifier-heavy names (ravn_btc_prepare_send, ravn_tokens_resolve), so it is not uniformly verb_noun.
Ten tools is well-scoped for a swap routing and execution API: each tool maps to a distinct lifecycle phase, data registry, or BTC-specific helper. Nothing feels redundant, and the count is comfortable for an agent to navigate.
The core swap lifecycle is covered end-to-end: quote, execute, submit signature, and poll status, with supporting token/chain registries and health checks. Minor gaps like swap history, cancellation, or explicit venue inspection could exist, but agents can complete real workflows without dead ends.
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 quoteAInspect
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, 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 | |
| destinationAddress | No | 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 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=false/destructiveHint=false annotations, the description reveals the three return shapes, the no-custody guarantee, and the approval requirement with exact failure modes for each executionType. This is exactly the kind of behavioral context an agent needs before calling the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and packs a lot of crucial caveats (approval mining, silent-fill failure) into a compact block. It is dense but every sentence earns its place, though the long em-dash clauses could be more readable with bullet structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the schema covers all parameters, the description covers all unique behavioral concerns: output shapes, custody, approval timing, and conditional presence of approval. Minor gap: it doesn't explicitly link the SIGNATURE shape to the ravn_submit_signature sibling, but that's not essential for executing this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters in detail. The description only restates that quoteToken comes from ravn_quote, adding no new parameter-level meaning, which meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the exact job—converting a ravn_quote quoteToken into an execution payload—and the three executionType shapes make the output scope explicit. This cleanly separates it from ravn_quote (which produces the quote) and ravn_submit_signature (which handles a later step).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the precondition (a quoteToken from ravn_quote) and the interaction model (you sign or send; RAVN never takes custody). It doesn't explicitly name an alternative for the SIGNATURE shape or rule out use cases, but the 'execute after quote' context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | |
| 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 | |
| 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 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the readOnlyHint and openWorldHint annotations, such as being free, requiring no API key or payment, and returning a quoteToken for later execution. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all substantive: the purpose and scope, the cost/authentication requirement, and the follow-up workflow. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input and output schemas, the description is sufficiently complete for an agent to understand what the tool does and how it fits into the RAVN workflow. It could have briefly mentioned that some quotes are unexecutable without refund or destination addresses, but those details are already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter description coverage, including chain IDs, token addresses, refund address, and destination address nuances. The description adds marginal context such as no API key needed and native Bitcoin/Solana support, but the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (get a swap quote), a specific resource (RAVN), and its scope (same-chain or cross-chain across 17 chains, including native Bitcoin and Solana). It also distinguishes itself from ravn_execute by noting it returns a quoteToken rather than an execution payload.
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: this tool produces a quote and the quoteToken should be passed to ravn_execute for the signable/broadcastable payload. It also clarifies no API key is needed, but it does not explicitly address when to prefer sibling tools like ravn_health or ravn_chains.
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; Jupiter is the one live venue that reports 'unknown' honestly rather than guessing.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | deposit address (DEPOSIT venues) or statusRef (SIGNATURE venues) from ravn_execute | |
| 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?
readOnlyHint and openWorldHint already establish the read-only, external-world nature of the tool. The description adds meaningful nuance beyond the annotations by explaining that status is authoritative only where the venue exposes it and that Jupiter reports 'unknown' honestly rather than guessing, which is important for interpreting results correctly.
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 cover purpose, invocation guidance, and an interpretation caveat with no filler. The middle sentence is somewhat cryptic ('compose rebinds hop 1 onto hop 2's deposit'), which keeps this from a perfect score, but the description is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the readOnlyHint, openWorldHint, a declared output schema, and 100% schema coverage, the description is nearly complete for correct invocation. It explains where the required values come from and how to interpret venue statuses; only the minor quoteToken provenance ambiguity and lack of explicit poll/retry guidance keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds provenance information: ref can be a statusRef, deposit address, or origin tx hash, and the quoteToken should relate to execution output. This goes beyond the schema, though the phrase 'quoteToken execute returned' is slightly ambiguous relative to the schema's 'quoteToken from ravn_quote'.
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 ('Poll'), a specific resource ('status of a swap'), and names the exact inputs (quoteToken, ref) plus their source (ravn_execute). It clearly distinguishes this tool from siblings like ravn_execute, ravn_quote, and ravn_health by focusing on post-execution status checking.
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 clear invocation context: the agent should pass the quoteToken and ref returned by ravn_execute, with concrete examples of what ref may be. It does not spell out explicit when-not-to-use conditions or alternatives, but no sibling status tool exists, so the guidance is sufficient for correct use.
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.
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" +}
5 tool updates
- First observed
ravn_btc_prepare_send - First observed
ravn_execute - First observed
ravn_health - First observed
ravn_quote - First observed
ravn_status
Related MCP Connectors
Native cross-chain swaps: Bitcoin, Ethereum, Solana, Polkadot, Tron, Arbitrum. Quote, swap, track.
Quote, create and track cross-chain crypto swaps. Non-custodial exchange, no account, no KYC.
Non-custodial cross-chain crypto swap MCP — 1288+ assets, no KYC. Solana/EVM/Monero, RPC, oracle.
Non-custodial value router: ranked fiat/crypto & cross-chain routes, swaps, onramp, gasless wallet.
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 gradedqualityCmaintenanceNon-custodial Solana swap routing with best-price execution, flat 0.25% fee, and built-in on-chain scam checking for token safety.35 npmMIT

deBridgeofficial
AlicenseAqualityDmaintenancedeBridge MCP finds optimal cross-chain swap routes, check fees and conditions, and initiate non-custodial trades across major blockchain networks. Supported: Ethereum, Solana, Arbitrum, Base, BNB Chain, Polygon, Optimism, Avalanche, Linea, Berachain, Tron, Cronos, Gnosis, Monad, Sonic, Flow, HyperEVM, Sei, Story, Injective, Abstract, MegaETH, Mantle, Plasma, Zilliqa, Sophon, Bob, Neon, and more536 npm32MIT- AlicenseNot gradedqualityDmaintenanceCross-chain cryptocurrency swaps via Chainflip. Get quotes, execute swaps, and track progress. No API key required to get started.10MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.