themanless/uniswap-mcp-server
3.1
If you are the rightful owner of uniswap-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
An Ethereum MCP server developed in Rust, providing token balance queries, price retrieval, and transaction simulation.
Ethereum MCP Server
一个基于 Rust 开发的以太坊多链客户端协议(MCP)服务器,提供代币余额查询、价格获取和交易模拟功能。
设置说明
依赖项
- Rust 1.65+
- Cargo
- 以太坊 RPC 节点访问权限
环境变量
# 以太坊 RPC URL (可选,默认使用公共节点)
ETH_RPC_URL=https://ethereum-rpc.publicnode.com
# 链 ID (可选,默认为以太坊主网)
CHAIN_ID=1
# 服务器监听地址 (可选,默认为本地)
SERVER_ADDR=127.0.0.1:3000
# 私钥 (可选,用于交易签名)
PRIVATE_KEY=your_private_key_here
# Etherscan API Key (可选,用于合约验证)
ETHERSCAN_API_KEY=your_etherscan_api_key_here
运行方式
# 克隆项目
git clone <repository-url>
cd uniswap-mcp-server
# 构建项目
cargo build --release
# 运行服务器
cargo run
# 或者使用环境变量运行
ETH_RPC_URL="your_rpc_url" cargo run
MCP 工具调用示例
获取代币余额
请求:
{
"jsonrpc": "2.0",
"method": "get_balance",
"params": {
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
},
"id": 1
}
响应:
{
"jsonrpc": "2.0",
"result": {
"balance": "1500.50",
"decimals": 6,
"token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"wallet_address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
},
"id": 1
}
获取代币价格
请求:
{
"jsonrpc": "2.0",
"method": "get_token_price",
"params": {
"token_address": "WETH",
"base_token": "USDC"
},
"id": 2
}
响应:
{
"jsonrpc": "2.0",
"result": {
"token_address": "WETH",
"token_symbol": "WETH",
"base_token": "USDC",
"price": "3500",
"decimals": 18,
"gas_price_wei": "20000000000",
"timestamp": "2023-06-01T10:00:00Z",
"source": "uniswap_v2"
},
"id": 2
}
模拟代币交换
请求:
{
"jsonrpc": "2.0",
"method": "swap_tokens",
"params": {
"from_token": "WETH",
"to_token": "USDC",
"amount": "0.1",
"slippage_tolerance": "0.005"
},
"id": 3
}
响应:
{
"jsonrpc": "2.0",
"result": {
"simulation_status": "success",
"input": {
"from_token": "WETH",
"to_token": "USDC",
"amount_in": "0.1",
"slippage_tolerance": "0.005"
},
"output": {
"estimated_amount_out": "350.0",
"minimum_amount_out": "348.25",
"price_impact": "0",
"gas_estimate": "150000",
"gas_price_wei": "20000000000",
"total_gas_cost_eth": "0.003"
},
"transaction_data": {
"to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
"value": null,
"data": "0x38ed1739000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000......",
"gas": "150000"
},
"timestamp": "2023-06-01T10:00:00Z"
},
"id": 3
}
设计决策
- 采用模块化架构,将 Ethereum 客户端、Uniswap 模拟器和 MCP 服务器分离,便于维护和扩展。
- 使用异步 Rust 和
tokio运行时来处理高并发的 JSON-RPC 请求。 - 实现了基于 Uniswap V2 的价格查询和交易模拟功能,为用户提供去中心化交易的参考信息。
- 通过环境变量配置实现灵活的部署选项,支持不同的以太坊网络和 RPC 提供商。
已知的局限性或假设
- 当前实现主要基于模拟数据,真实的链上交互功能需要进一步完善。
- 价格查询功能目前仅支持预定义的代币对,动态配对发现功能尚未完全实现。
- 交易模拟假设了理想的市场条件,实际交易中可能因滑点、流动性变化等因素导致结果差异。
- 服务器目前仅支持标准的 JSON-RPC 输入输出,未实现 WebSocket 或其他高级通信协议。