以太坊交易MCP服务器

一个基于Rust的MCP服务器,使AI代理能够查询以太坊余额并执行代币交换,具有企业级安全性和可靠性。

  • by ljg-cqu
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 ljg-cqu/ethereum-mcp-server

使用说明

以太坊交易MCP服务器

✅ 所有问题已解决 - 所有已识别的安全问题均已得到解决。
状态: 生产就绪 | 211项测试通过 | 51.2%覆盖率 | 无警告 | 仅支持HTTP传输

用Rust语言编写的模型上下文协议(MCP)服务器,使AI代理能够在以太坊上查询余额并执行代币交换,提供企业级的安全性和可靠性。

关键特性

  • 真实的以太坊余额通过alloy获取实际链上ETH余额
  • ERC20 支持查询任何ERC20代币的余额,包括正确的小数位和符号
  • Uniswap V3 集成从Uniswap V3报价合约中获取以ETH计价的真实代币价格
  • 通过Chainlink进行美元定价使用 Chainlink ETH/USD 预言机将代币价格转换为美元
  • 符号支持: get_token_price 接受任意一种 token_address 或者 token_symbol (USDC/USDT/DAI/WETH) 翻译为中文是:(美元稳定币/泰达币/戴奥币/以太坊代币)。不过,更常见的翻译可能是直接保留原缩写,因为这些是特定的加密货币或代币名称,在中文环境中通常直接使用其英文缩写。所以,也可以理解为“(USDC/USDT/DAI/WETH)(美元稳定币/泰达币/戴奥币/以太坊代币)”,但实际使用中往往直接写原缩写
  • 生产交换模拟构建并通过模拟进行真实的Uniswap V3交易 eth_call
  • 智能合约集成生产地址,用于USDC、USDT、DAI、WETH和Uniswap V3合约
  • 费用层级优化自动选择Uniswap V3的最佳费用等级(不执行交易)

运输支持

  • HTTP/HTTPS提供全面支持,包括连接池、速率限制和重试逻辑
  • WebSocket当前不支持(见 docs/WEBSOCKET_IMPLEMENTATION.md)
  • 故障转移跨多个HTTP RPC URL的自动故障转移
  • 并发性基于信号量的限流功能,可配置并发请求限制

🛠️ 技术栈

  • Rust + tokio(可译为“Rust语言与tokio库”) - 异步运行时
  • 合金 - 以太坊RPC客户端
  • 追踪 - 结构化日志记录(必需)
  • `rust_decimal` 翻译成中文是“Rust 十进制库”或“Rust 的十进制数处理库” - 财务精准度(必需)
  • serde(在中文语境中,通常直接保留原名,不进行翻译,因为它是一个专有名词,指的是一个用于序列化和反序列化数据的库或框架,特别是在Rust编程语言中。) - JSON序列化

🚀 快速入门

  • Rust 1.75+
  • 以太坊RPC终端(Infura/Alchemy)

设置

git clone https://github.com/ljg-cqu/ethereum-mcp-server
cd ethereum-mcp-server

# Copy and configure environment
cp .env.example .env
# Edit .env with your Ethereum RPC URL(s) and WALLET_PRIVATE_KEY (64-hex, with or without 0x)
# You can provide a single URL:
#   ETHEREUM_RPC_URL=https://mainnet.infura.io/v3/YOUR_PROJECT_ID
# Or multiple for failover (CSV):
#   ETHEREUM_RPC_URLS=https://rpc1.example,https://rpc2.example

# Build and test
cargo build --release
cargo test

# Run the server
make dev

使用方法

启动服务器:

# Using Makefile (recommended)
make dev

# Or directly with cargo
ETHEREUM_RPC_URL="https://mainnet.infura.io/v3/YOUR_KEY" \
WALLET_PRIVATE_KEY="0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
cargo run

# Or using Docker
cp .env.example .env  # Configure your RPC URL
make docker-build && make docker-run

服务器将在 http://localhost:3000

API 使用

看见 docs/API_REFERENCE.md 如需完整的API文档和示例,请参阅。

🧪 测试

全面测试套件 - 211项测试通过 ✅

# Run all tests (unit + integration + main)
make test

# Individual test categories
make test-unit         # 183 unit tests
make test-integration  # 19 integration tests

# Coverage report
make coverage          # Requires cargo-tarpaulin

# Development testing
make test-watch        # Watch mode for TDD

测试覆盖率:51.2%(551/1076行)

**单元测试 (183)**核心功能、验证、随机数管理、断路器、以太坊提供者工具、HTTP服务器配置、类型转换、配置加载

**集成测试 (19)**端到端流程、安全验证、JSON-RPC协议合规性、地址转换、交易状态类型、配置验证

**主要测试(9)**配置加载、验证、辅助函数

🏗️ 建筑学

简洁而专注HTTP服务器 → JSON-RPC 2.0 → 以太坊RPC → 智能合约。 {{ ... }} 见 docs/SYSTEM_DESIGN.md 以了解详细的架构和设计决策。

📝 生产特性

  • 多提供者RPC故障转移
  • 线程安全的随机数(nonce)管理
  • 断路器模式
  • 速率限制和并发控制
  • 企业级输入验证

安全所有审计问题均已解决。详见 docs/SECURITY_AUDIT_REPORT.md。

⚙️ 操作默认设置

  • 速率限制每个IP的请求限制为约2次/秒,且允许有少量突发请求(tower_governor)。 看 HttpServer::new() 在 src/server/http.rs.
  • 请求超时每个HTTP请求都有15秒的超时时间 TimeoutLayer。
  • 并发控制以太坊RPC调用通过信号量(10个许可)进行限制,并设置5秒的获取超时时间,以避免无限期等待。
  • HTTP并发限制HTTP 路由器的最大并发请求数限制为 100 ConcurrencyLimitLayer。
  • 断路器外部以太坊RPC操作通过断路器执行,以便在重复错误时快速失败并自动恢复。
  • RPC故障转移如果 ETHEREUM_RPC_URLS (以CSV格式)提供后,提供程序将按顺序尝试每个URL,直到初始化成功。
  • **CORS(跨源资源共享)**配置允许的来源 CORS_ALLOW_ORIGINS (“*”或CSV格式的来源列表)。
  • USDC地址已更正: src/contracts.rs 现已使用经验证的主网USDC地址 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48。
  • 安全没有硬编码的凭据 - 所有敏感配置均通过 .env 文件。切勿提交真实密钥。
  • 随机数管理线程安全的随机数分配机制可防止区块链交易冲突。

📊 性能与测试

测试结果:211项测试通过 ✅

make test              # All tests (211 total)
make test-unit         # 183 unit tests  
make test-integration  # 19 integration tests
make bench             # Performance benchmarks

📚 文档说明

架构图在(此处)查看 PlantUML 图表 docs/diagrams/ 或者逃跑 plantuml docs/diagrams/**/*.puml 在本地生成PNG文件。

🔒 安全状态

✅ 已准备好投入生产 - 所有27个安全问题均已解决
✅ 表示“正确”或“对”。 211项测试通过 - 全面的测试覆盖率(51.2%)
✅ 零警告 - 清理编译
✅ 符合OWASP标准 - 企业安全标准

看 docs/SECURITY_AUDIT_REPORT.md 以获取完整详情。

为以太坊生态系统倾心打造。