mcpField
R
RAVN

RAVN

已认证精选远程服务
ravn.exchange金融数据02 周前更新

关于 RAVN

RAVN 提供跨链兑换 API 示例,涵盖 EVM 链、原生 Bitcoin 和 Solana,面向集成兑换的开发者与 Agent。示例展示报价、执行和状态查询流程,以及如何使用托管 MCP 服务。

主要功能

  1. 01覆盖 EVM、Bitcoin 与 Solana
  2. 02并行比较执行场所报价
  3. 03支持原生 Bitcoin 兑换
  4. 04提供 TypeScript SDK 示例
  5. 05展示执行与状态查询流程

适用场景

  1. 01将 Base 上的 USDC 兑换为原生 BTC
  2. 02为 Claude 构建工具调用兑换流程
  3. 03查询可用场所并运行健康检查
  4. 04通过 x402 按次付费调用 API

MCP 相关

提供托管 MCP 服务,README 指引 Claude 或 Cursor 连接该服务;服务地址为 `https://app.ravn.exchange/api/mcp`。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://app.ravn.exchange/api/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

10
参数类型必填说明
inputChainIdinteger是数字链 ID,例如 1=Ethereum、8453=Base、-1=Bitcoin、-2=Solana — 完整列表请参阅 ravn_chains,或参阅 ravn_health 查看实时 venue 状态
outputChainIdinteger是数字链 ID,例如 1=Ethereum、8453=Base、-1=Bitcoin、-2=Solana — 完整列表请参阅 ravn_chains,或参阅 ravn_health 查看实时 venue 状态
inputTokenstring是代币合约地址;若为该链的原生币,则使用 0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE
outputTokenstring是代币合约地址;若为该链的原生币,则使用 0xEeeeeEeeeEeEeeEeEeEeeeEEeeeeEeeeeeeeEEeE
inputAmountstring是正整数字符串,单位为输入代币的最小单位(不含小数)
userAddressstring是输入资产的发送方地址
destinationAddressstring否输出资产的接收地址;若与 userAddress 不同则填写。对于 Relay(Bitcoin 为源链)、THORChain(Bitcoin 任一方向)、Across(涉及 Solana 的路线)或 Eco(跨生态路线),必须在此处、即获取报价时提供,才能获得可执行报价;若在这些情况下省略,则会返回仅含价格、不可执行的预览(请参阅 ravn_quote 的 executable),而不会报错。地址格式错误、属于错误的生态系统,或已知的非钱包地址(RAVN 列出的代币铸造/合约地址、本次兑换涉及的代币地址、原生币哨兵地址、销毁地址、Solana 核心程序,以及通过链上查询发现的 Solana 代币账户或程序——代币账户错误会指出其所属钱包,该钱包地址才是应使用的地址)都会在此处报错——发送到此类地址的资金无法追回。应省略该字段,而不是传入空字符串;空字符串会被视为省略。
refundAddressstring否兑换失败时退还输入资产的地址。对于 Bitcoin 为源链的 Relay 或 THORChain 报价,必须在此处、即获取报价时提供——两者都不支持在执行时重新绑定,因此省略后会返回仅含价格、不可执行的预览,而在 ravn_execute 中稍后提供也不会生效。其他以 BTC 为源链的 venue(Garden、Chainflip、Rift)支持在执行时绑定此地址。根据输入链验证(退款会退回源链),并执行与 destinationAddress 相同的非钱包地址检查
slippageBpsinteger否可接受的最大滑点,单位为基点
rankingModeenum否best_output(默认)选择净输出最高的报价;fastest 选择在 slippageBps 范围内结算最快的报价best_output | fastest
excludeVenuesarray否从此次竞价中排除指定 venue,例如因风险顾虑而排除某个 venue,或 ravn_health 显示其性能下降。指定对此交易对从未符合条件的 venue 不会产生任何影响,也不会报错
confidentialboolean否通过 NEAR Intents 的 Confidential Intents 私密结算,使存款和付款无法在链上关联。通过此 MCP 服务,只会对 NEAR 报价(若无法报价则返回 NO_LIQUIDITY,绝不会回退到公开方式):RAVN 的第二个私密 venue Houdini Swap 需要最终用户的 IP、user-agent 和国家/地区信息以满足其合规规则,而 MCP 调用不包含这些信息——如需使用,请调用 POST /api/v1/quote。EVM 到 EVM 额外约 0.3 bps;涉及 Bitcoin 或 Solana 时额外约 5-8 bps;结算速度可能慢于公开兑换(Bitcoin 源链:公开方式 13 分钟,私密方式 43 分钟)——执行前请查看 estimatedTimeSeconds
apiKeystring否你的 RAVN API 密钥(如果有)——可提高速率限制

详细介绍

RAVN 示例

smithery badge

RAVN 跨链兑换 API 的可运行代码示例——包括原生 Bitcoin,而非封装版 BTC。

一次集成即可覆盖 EVM 链、原生 Bitcoin 和 Solana。每次报价都会并行竞速所有实时执行场所,并采用净输出最佳的结果。**RAVN 在每条路线上的费用均为 0 bps。**非托管:RAVN 绝不会持有你的资金,也不会自行编写智能合约。

无需注册即可开始。以下每个示例都可以匿名运行。

git clone https://github.com/ravndex/ravn-examples
cd ravn-examples && npm install
npm run health

示例

展示内容
src/health.ts10 秒冒烟测试——当前正在竞速的场所有哪些。从这里开始。
src/btc-out.tsBase 上的 USDC → 原生 BTC,端到端使用 SDK 的 executeAndTrack,包含费用和状态报告。这是大多数兑换 API 无法实现的功能。无需钱包即可试运行。
src/agent-swap.tsClaude 工具调用循环:由模型选择兑换,密钥仍由你的代码保管。
src/x402-client.ts通过 x402 按调用付费——无需密钥,无需账户。
src/ravn.ts共享客户端:官方 @ravnexchange/sdk(零依赖、带类型)以及金额辅助工具。
MCP.md将 Claude 或 Cursor 指向托管的 MCP 服务。只需三行配置。

调用约定

始终按相同顺序调用 4 次。

POST /quote   → best route + an opaque quoteToken
POST /execute → an execution payload tagged by executionType, with its own quoteToken
                (+ submit-signature, when the type is SIGNATURE)
POST /status  → pending → processing → success (or refunded / failed)

使用 /execute 返回的 quoteToken,以及它的 statusRef(否则使用兑换的交易哈希),并将你在兑换旁发送的费用支付哈希作为 txHash 传入 /status 进行轮询;对于双步骤路线(TRANSACTION 中包含 statusRef),则将兑换本身的交易哈希作为 txHash,直到状态最终确定。 使用 POST:quoteToken 可能达到几十 KB,过长的内容放在 GET 查询字符串中会导致请求失败。

一切都由一个字段决定:

switch (execution.executionType) {
  case "TRANSACTION": // sign and broadcast it yourself
  case "SIGNATURE":   // sign typed data; RAVN submits it, no gas
  case "DEPOSIT":     // send the input asset to an address
}
最容易让人踩坑的一点

ERC-20 兑换实际上需要两笔交易。在任何合约能转移你的代币之前,你必须先签署一笔独立的链上授权——即 approve()。需要授权时,TRANSACTION 和 SIGNATURE 负载中会携带可直接发送的内容,字段为 approval。

if (execution.approval) {
  const { to, data, value } = execution.approval;            // value is a decimal string
  const hash = await wallet.sendTransaction({ to, data, value: BigInt(value) });
  await client.waitForTransactionReceipt({ hash });   // MINED, not just broadcast
}
// …now send the swap

在授权上链确认之前广播兑换,会导致 transferFrom 回滚,用户还得承担 Gas 费。在免 Gas 场所(CoW、Bebop),情况更隐蔽,也更糟:订单会被接受,却永远不会成交,并且没有错误提示。原生币卖出和 DEPOSIT 路线都不会携带 approval。

RAVN 会在 /execute 时读取用户链上的授权额度,如果额度已覆盖兑换金额,就不会返回 approval。如果读取失败,则仍会包含 approval,因此你需要自行检查 approval.spender 的授权额度;如果额度已覆盖 approval.amount,则跳过授权(btc-out.ts 会通过 executeAndTrack 的 hasAllowance 完成这项检查)。RAVN 只读取最新区块,因此同一代币和 spender 同一时间只能执行一笔兑换。如果返回 approval.reset(Ethereum 上的 USDT 存在部分授权额度),则需要先发送 approve(spender, 0) 并等待其上链确认;executeAndTrack 会处理这一流程。

0x Gasless 也可能返回 approvalData:用于免 Gas 授权代币的第二个类型化数据签名,并作为 approvalSignature 发送到 /submit-signature。executeAndTrack 会为你完成签名。

收取你的费用

如果你的密钥设置了费用,只有完成以下两件事,兑换才会向你支付费用:

  1. 按 execution.fee 返回的内容准确支付,如果有该字段(Rift、私人兑换、Eco Routes、Layerswap、Mayan 不支付推荐费的路线)。EVM:兑换成功后发送 fee.transaction,或将 ERC-20 费用与兑换打包发送。Bitcoin:费用是存款交易自身的第二个输出。Solana:转账包含在存款交易自身中。
  2. 持续向 /status 报告兑换状态,直到交易最终确认,每次轮询都将该笔费用支付的哈希(两步路线中,则使用兑换本身的哈希)作为 txHash。对于同链交易平台,RAVN 只能通过你的轮询得知兑换已发生:从未报告,就从未支付。

对于 TRANSACTION,executeAndTrack 会支付费用,并将供你轮询的哈希(statusTxHash)交给你;从 SDK 0.2.0 起,它自身的轮询也会持续到 expired 和 not_found,并在状态调用失败时重试。DEPOSIT 则由你处理:btc-out.ts 会发送存款和费用,然后在一个循环中轮询所有交易。完整检查清单:https://docs.ravn.exchange/collecting-your-fee

unlimitedRecommended: true(CoW)表示交易平台更倾向于让你一次性批准较大金额,而不是每次兑换都支付批准手续费。data 仍会编码准确金额;是否调高由你决定。

金额

始终使用字符串,始终使用代币的最小单位——wei、lamports、satoshis。绝不使用浮点数。 src/ravn.ts 中的 toBaseUnits() / fromBaseUnits() 可安全转换。

跨生态系统兑换

在 EVM 上卖出并接收 BTC 或 SOL 时,需要提供 destinationAddress——收款链不知道你的 EVM 地址。

速率限制

无密钥每个 IP 每分钟 30 次请求,另加每分钟 120 次 /status 轮询
免费密钥,即时获取,无需审核每分钟 120 次请求,另加每分钟 480 次 /status 轮询

状态轮询有独立的额度(为你的限制的 4 倍)。每个受速率限制的响应都包含 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset(Unix 时间戳秒数);429 响应还会添加 Retry-After。 将密钥作为 x-api-key 传入。每个端点都已启用 CORS,因此浏览器端的 dapp 和钱包小组件可以直接调用 API,无需服务端代理。

错误

根据稳定的 code 进行分支处理,切勿依赖错误消息。

INVALID_REQUEST(不支持的链也属于此类) · UNSUPPORTED_TOKEN · NO_LIQUIDITY · QUOTE_EXPIRED · QUOTE_INVALID · QUOTE_NOT_EXECUTABLE · BUILD_FAILED · ORDER_REJECTED · VENUE_RATE_LIMITED · RATE_LIMITED · UNAUTHORIZED · UNAVAILABLE · NOT_FOUND · NOT_CONFIGURED · INTERNAL。若完全没有收到响应,SDK 会添加 NETWORK_ERROR。完整列表:https://docs.ravn.exchange/errors

每个响应都包含 x-request-id。如果要报告有问题的报价,请附上该 ID——我们会据此查找记录。

链接

采用 MIT 许可。欢迎提交问题和 PR。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。