以太坊交易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设置。
