使用说明
以太坊交易MCP服务器
A. 模型上下文协议(MCP) 服务器写入 锈,使AI代理或CLI客户端能够:
- 查询 ETH和ERC20余额
- 获取 代币价格 (ETH或美元)
- 模拟 Uniswap V3交换 (通过QuoterV2只读)
服务器通过以下方式进行通信 JSON-RPC 2.0(标准输入/标准输出) 并且可以连接到任何以太坊RPC端点,例如 英富拉, 炼金术,或a 局部砧叉.
安装说明
1.依赖关系
您需要:
- 防锈工具链 ≥ 1.73 (
rustup推荐) - 货物 构建系统(与Rust一起安装)
- 访问a 以太坊RPC节点 (Infura、炼金术或当地叉子)
2.环境变量(.env)
基于.env.example文件在项目根目录中创建.env文件
如果你没有公共RPC密钥,你可以使用本地分叉:
砧叉urlhttps://eth.llamarpc.com--链id 1--端口8545
3.运行MCP服务器
货物运输--安静
服务器从stdin读取JSON-RPC请求,并将响应写入stdout。
要手动测试,请使用jq:
jq-nc'{“jsonrpc”:“2.0”,“id”:1,“method”:“tools/list”,“params”:{}}'|货物运行--安静
MCP工具调用示例
1.️⃣ 列出可用工具
请求
{“jsonrpc”:“2.0”,“id”:1,“方法”:“工具/列表”,“参数”:{}}
响应
{ “jsonrpc”:“2.0”, “id”:1, “结果”:{ “工具”:[ {“name”:“get_balance”,“description”:“查询ETH或ERC20余额”}, {“name”:“get_token_price”,“description”:“以ETH或USD获取代币价格”}, {“name”:“swap_togens”,“description”:“模拟Uniswap V3单跳交换”} ] } }
2.️⃣ 查询特定地址的ETH余额
请求
{ “jsonrpc”:“2.0”, “id”:2, “方法”:“工具/调用”, “参数”:{ “name”:“get_balance”, “参数”:{“地址”:“0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266”} } }
响应
{ “jsonrpc”:“2.0”, “id”:2, “结果”:{ “好”:{ “符号”:“ETH”, “小数”:18, “金额”:“9999.9999999999” } } }
3.️⃣ 获取代币价格(ETH/USDC)
请求
{ “jsonrpc”:“2.0”, “id”:3, “方法”:“工具/调用”, “参数”:{ “name”:“get_token_price”, “论点”:{ “令牌”:“0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48”, “vs”:“ETH”, “费用”:3000 } } }
响应
{ “jsonrpc”:“2.0”, “id”:3, “结果”:{ “好”:{ “令牌”:“0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48”, “vs”:“ETH”, “价格”:“0.00029” } } }
4.️⃣ 模拟Uniswap V3交换(ETH→ USDC)
请求
{ “jsonrpc”:“2.0”, “id”:4, “方法”:“工具/调用”, “参数”:{ “name”:“swap_tomates”, “论点”:{ “从令牌”:“0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2”, “to_token”:“0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48”, “金额”:“10000000000000000”, “slippage_bps”:50, “use_v3”:真, “v3_fee”:3000 } } }
响应
{ “jsonrpc”:“2.0”, “id”:4, “结果”:{ “好”:{ “路由器”:“UniswapV3/KquoterV2”, “方法”:“quoteExactInput(字节)”, “估计输出”:“34021798”, “气体估计值”:0, “gas_price_wei”:“18000000000”, “路由提示”:“0xc02a…->(3000)->0xa0b8…” } } }
设计决策
MCP stdio架构: 服务器遵循模型上下文协议 spec,通过stdin/stdout上的tools/list和tools/call公开工具。 这种设计避免了网络绑定,并易于集成到AI代理运行时。
以太坊RPC抽象: 所有链上读取都使用带有异步I/O的ethers。服务器支持公共RPC端点(Infura/Alchemy)和通过铁砧的本地分叉。
可组合模块:
eth.rs--核心平衡实用程序
price.rs——Uniswap V3+链式定价
uniswap.rs——通过QuoterV2进行交换模拟
mcp.rs——统一JSON-RPC工具调度器
types.rs——共享请求/响应模式
精密处理: 在内部使用rust_decimal和BigDecimal,以便在具有不同小数的令牌对之间进行安全的金融数学计算。
已知限制和假设
仅模拟:交换永远不会在链上广播。
ETH/USD定价假设位于0x5f4e地址的Chainlink主网聚合器。..b8419。
对于非标准erc20,decimals()处理可能会失败,除非您使用提供的safe_erc20_decimals。
RPC端点必须允许eth_call、eth_getCode和eth_gasPrice。
服务器不维护状态或钱包密钥;它是只读的。
快速测试
测试功能概述
测试脚本 test_mcp_client.py 验证MCP(市场连接平台)服务的核心功能,包括:
- 查询可用工具列表
- 获取以太坊地址的ETH余额
- 获取以太坊地址的代币余额(例如USDC)
- 检索与ETH相关的代币价格信息
- 模拟代币交换操作(从WETH到USDC)
先决条件
在运行测试之前,请确保:
- 您已经创建并配置了
.env文件 - 您在本地有一个可用的以太坊RPC节点(如砧节点)
- Python 3环境已安装
运行测试
基本测试(使用默认配置)
cd test
python3 test_mcp_client.py
这将使用默认的cargo命令启动服务,并连接到默认的RPC节点(http://127.0.0.1:8545).
自定义测试参数
您可以通过命令行参数自定义测试配置:
# Specify a different RPC node
python3 test_mcp_client.py --rpc https://eth.llamarpc.com
# Specify the wallet address to test
python3 test_mcp_client.py --addr 0xYourWalletAddress
# Specify different WETH and USDC contract addresses
python3 test_mcp_client.py --weth 0xYourWETHAddress --usdc 0xYourUSDCAddress
# Specify a custom server start command
python3 test_mcp_client.py --server-cmd "cargo" "run" "--release"
环境变量
测试脚本会自动从环境变量中读取配置,特别是:
ETH_RPC_URL:以太坊RPC节点URL(如果未通过命令行参数指定)
测试结果
当测试成功通过时,您将看到类似于以下内容的输出:
✓ tools/list OK
✓ get_balance(ETH) OK
✓ get_balance(USDC) OK
✓ get_token_price(vs=ETH) OK
✓ swap_tokens (simulate) OK
ALL TESTS PASSED ✅
如果测试失败,将显示详细的错误信息和服务器日志以进行调试。
注意:令牌交换功能目前仅执行模拟操作,不会执行实际的链上交易。
