Ethereum-Trading-MCP-Server

aerialccc/Ethereum-Trading-MCP-Server

3.1

If you are the rightful owner of Ethereum-Trading-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.

Ethereum-Trading-MCP-Server is a specialized server designed to facilitate trading activities on the Ethereum blockchain using the Model Context Protocol (MCP).

Ethereum Trading MCP Server

一个基于 MCP (Model Context Protocol) 的以太坊交易服务器,提供查询余额、获取代币价格和执行代币交换等功能。

功能特性

  • 查询余额 - 支持查询 ETH 和 ERC20 代币余额
  • 获取价格 - 通过 Uniswap V2 获取代币实时价格
  • 代币交换 - 执行 ERC20 代币之间的交换操作
  • 滑点保护 - 支持自定义滑点容忍度
  • 完整测试 - 包含 59 个单元测试和集成测试

前置要求

  • Rust 1.70+
  • 以太坊 RPC 节点访问权限(如 Infura、Alchemy 等)
  • (可选)用于交易的以太坊私钥

快速开始

1. 克隆项目

git clone <repository-url>
cd Ethereum-Trading-MCP-Server

2. 配置环境变量

创建 .env 文件,详细配置细节请查看.env.example文件。

3. 构建项目

# 开发构建
cargo build

# 发布构建
cargo build --release

4. 运行测试

# 运行所有测试
cargo test

# 运行单元测试
cargo test --lib

# 运行集成测试
cargo test --test integration_tests

5. 运行服务器

# 使用 stdio 传输
cargo run

6. 运行示例

我们提供了完整的客户端示例,展示如何与服务器交互:

# 运行完整示例
cargo run --example full_example

示例包含:

  • ✅ 连接和初始化 MCP 服务器
  • ✅ 查询 ETH 和 ERC20 代币余额
  • ✅ 获取代币价格
  • ✅ 错误处理演示
  • ✅ 并发查询示例

详细文档请查看

可用工具

1. get_balance

查询以太坊地址的 ETH 或 ERC20 代币余额。

参数:

  • address (string): 以太坊地址
  • token_address (string, 可选): ERC20 代币合约地址,不提供则查询 ETH 余额

示例:

{
  "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
  "token_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}

2. get_token_price

获取代币的当前价格(相对于另一个代币)。

参数:

  • token_in (string): 输入代币地址
  • token_out (string): 输出代币地址
  • amount_in (string): 输入金额(以 wei 为单位)

示例:

{
  "token_in": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
  "token_out": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "amount_in": "1000000000"
}

3. swap_tokens

执行代币交换操作。

参数:

  • token_in (string): 输入代币地址
  • token_out (string): 输出代币地址
  • amount_in (string): 输入金额(以 wei 为单位)
  • slippage (number): 滑点容忍度(百分比,如 0.5 表示 0.5%)
  • recipient (string, 可选): 接收地址,默认为发送者

示例:

{
  "token_in": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
  "token_out": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "amount_in": "1000000000",
  "slippage": 0.5
}

项目结构

src/
├── ethereum/          # 以太坊相关功能
│   ├── balance.rs    # 余额查询
│   ├── price.rs      # 价格查询
│   ├── swap.rs       # 代币交换
│   ├── wallet.rs     # 钱包管理
│   ├── config.rs     # 配置管理
│   └── error.rs      # 错误处理
├── server/           # MCP 服务器
│   └── handler.rs    # 请求处理器
├── utils.rs          # 工具函数
├── error.rs          # 全局错误
└── main.rs           # 入口文件

tests/
└── integration_tests.rs  # 集成测试

测试覆盖

项目包含全面的测试套件:

  • 单元测试 (27 个): 测试各个模块的功能

    • 余额查询测试
    • 价格查询测试
    • 代币交换测试
    • 钱包功能测试
    • 工具函数测试
  • 集成测试 (32 个): 测试完整的服务器功能

    • 服务器初始化测试
    • 工具注册和发现测试
    • 参数验证测试
    • 并发访问测试
    • 序列化测试

运行测试:

cargo test -- --nocapture

安全注意事项

⚠️ 重要提示:

  1. 私钥安全: 永远不要将私钥提交到版本控制系统
  2. 环境变量: 使用 .env 文件存储敏感信息,并将其添加到 .gitignore
  3. 测试网络: 在主网使用前,先在测试网络(如 Goerli、Sepolia)上测试
  4. 滑点设置: 合理设置滑点以避免交易失败或价格损失
  5. Gas 费用: 确保账户有足够的 ETH 支付 gas 费用

贡献

欢迎提交 Issue 和 Pull Request!

联系方式

如有问题或建议,请通过 GitHub Issues 联系。