以太坊交易MCP服务器

一个基于Rust的MCP服务器,提供以太坊余额查询、价格获取和Uniswap交易模拟工具,适用于需要快速访问以太坊数据和模拟交易的开发场景。

  • by sbtobb
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 sbtobb/eth_trading_mcp

使用说明

以太坊交易MCP服务器

Rust MCP服务器,通过stdio公开以太坊余额、价格和Uniswap交换模拟工具。

设置

  • 要求:Rust工具链(1.80+),以太坊RPC端点的网络访问。
  • 环境变量:
    • ETH_RPC_URL –HTTPS主网端点(Infura/Alchemy/public RPC)。默认为 https://eth.llamarpc.com 如果未设置。
    • CALLER_ADDRESS (可选)–钱包地址用作 msg.sender 在掉期模拟期间;如果省略,则默认为零地址。
    • 非主网/调试的可选覆盖: ROUTER_V2_ADDRESS, ROUTER_V3_ADDRESS, UNIVERSAL_ROUTER_ADDRESS, QUOTER_V3_ADDRESS, WETH_ADDRESS, USDC_ADDRESS, DAI_ADDRESS。为主网和Sepolia提供了默认配置。
  • 安装deps并格式化: cargo fmt
  • 运行服务器(stdio): cargo run

工具

  • get_balance:钱包地址+可选令牌地址→ ETH或ERC20余额带小数。
  • get_token_price:代币(符号或地址)和报价(“USD”默认值或“ETH”)→ Uniswap V2/V3价格路径;尝试V2直接/WETH网桥和V3费用等级(500/3000/10000)。
  • swap_tokens:从/到代币、金额、滑点百分比→ 选择V2/V3中的最佳值(单跳或WETH桥接跳),并返回呼叫数据、模拟输出/分钟输出和气体估计(eth_call)。没有签名或广播。

MCP呼叫示例

{
  "method": "tools/call",
  "params": {
    "name": "get_balance",
    "arguments": {
      "wallet_address": "0x00000000219ab540356cBB839Cbe05303d7705Fa"
    }
  }
}

设计注意事项

  • 用途 rmcp 用于声明性工具路由和JSON模式生成的宏。
  • 通过以太坊访问 alloy (提供者+合约sol!绑定)带异步 tokio 运行时间;当缺少直接池时,使用WETH桥接进行Uniswap V2+V3路由;主网/Sepolia加上环境覆盖的链感知默认值。
  • 财务价值格式为 rust_decimal/format_units 以避免浮子漂移。
  • 结构化日志记录 tracing + EnvFilter.
  • 交换模拟仅返回调用数据和气体估计值;无交易签名或有效载荷排放。

已知限制

  • 交换模拟将浮出水面 eth_call 余额/备抵缺失时的失败;在这种情况下,天然气估算可能仍然缺失。
  • 路由覆盖V2/V3上的直接池和单个WETH网桥;没有实现更深的多跳搜索或通用路由器命令编码。
  • 令牌元数据缓存在每个进程的内存中;每次运行都会按需获取新的令牌。

测试

  • 离线和防护测试: cargo test (涵盖滑点处理、金额格式化、路径构建)。除非满足以下条件,否则跳过实时报价测试 ETH_RPC_URL 和 CALLER_ADDRESS 设置。