uniswap-mcp-server

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 或其他高级通信协议。