以太坊交易MCP服务器(Rust)-解决方案
总结
这个存储库提供了一个用Rust编写的最小模型上下文协议(MCP)风格的服务器。它通过JSON-RPC POST公开了三个工具:
get_balance:查询ETH或ERC20余额。get_token_price:查询代币价格(通过Uniswap V2模拟;见注释)。swap_tokens:建造和 模拟 Uniswap V2交换使用getAmountsOut+estimateGas(不发送交易)。
服务器使用:
______________________________________________________________________
安装说明
- 克隆存储库并
cd进入它。
- 复制
.env.example到.env并设定值:
cp .env.example .env
# Edit .env:
# - ETH_RPC_URL (Infura/Alchemy or other Ethereum RPC endpoint)
# - Optionally set WALLET_PRIVATE_KEY for swap simulations- 构建和运行测试:
cargo build
cargo test
# To see debug logs during tests:
cargo test -- --nocapture- 运行MCP服务器:
cargo run服务器将于启动 127.0.0.1:3030 默认情况下。
______________________________________________________________________
MCP工具调用示例
取得平衡
请求:
{
"jsonrpc": "2.0",
"method": "get_balance",
"params": {
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"token": "0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6"
},
"id": 1
}答复:
{
"jsonrpc": "2.0",
"result": {
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"balance": "32258568.67038",
"decimals": 6,
"raw": "32258568670380",
"token": "0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6"
},
"id": 1
}______________________________________________________________________
模拟交换
请求:
{
"jsonrpc": "2.0",
"method": "swap_tokens",
"params": {
"from_token": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"to_token": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"amount": "1.0",
"slippage": 0.01
},
"id": 1
}答复:
{
"jsonrpc": "2.0",
"result": {
"from_token": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"to_token": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"amount_in": "1.0",
"estimated_amount_out": "1875.123456",
"estimated_gas": 120000,
"gas_price_gwei": "33.000000",
"note": "This is a simulation using getAmountsOut + estimate_gas; transaction not sent on-chain"
},
"id": 1
}______________________________________________________________________
获取代币价格
请求:
{
"jsonrpc": "2.0",
"method": "get_token_price",
"params": {
"token": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
// or "symbol": "WETH"
"in": "USD" // or "ETH"
},
"id": 2
}答复:
{
"jsonrpc": "2.0",
"id": 2,
"result": "3056.51248"
}______________________________________________________________________
设计决策
- 钱包集成: 使用环境中的LocalWallet模拟与真实货币的交换
from地址。 - 十进制处理: 用途
rust_decimal以避免在wei和token单位之间转换浮点舍入误差。 - 灵活的分母:
get_token_price支持美元稳定币(USDT/USDC)或ETH(WETH)作为分母。 - 模拟优先方法: 所有掉期交易首先使用
getAmountsOut+estimateGas在发送到链上之前降低风险。 - 可组合结构:
UniswapService可以重复用于价格查询、掉期模拟或真实的链上掉期。
______________________________________________________________________
已知限制/假设
- 仅支持 Uniswap V2;不支持V3或其他DEX。
- 当使用a 符号 该服务仅检查令牌地址,而不是令牌地址 本地映射 (
symbol → token address).确实如此 不 查询链令牌列表。 - 假设代币合约返回正确的小数。
- 在低流动性或拥塞的RPC节点下,气体估计可能不准确。
- 发送真实交易需要私钥;钱包管理是外部的。
- 滑动被用作一个简单的乘数;还不支持多跳交换。
- 目前支持价格分母:
"USD"(通过USDT/USDC)和"ETH"(仅通过WETH)。
