使用说明
以太坊交易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
📚 文档说明
- API 参考文档 - 完整的API文档
- 系统设计 - 建筑细节
- 要求 - 项目规格说明
- 安全审计 - 安全发现
- WebSocket 实现 - WebSocket 尝试详情
- Docker 部署 - 容器部署指南
- 可读性代码映射概述 - 如何浏览架构图和流程图
- 调用图示例指南 - 图表类型与决策流程的比较
架构图在(此处)查看 PlantUML 图表 docs/diagrams/ 或者逃跑 plantuml docs/diagrams/**/*.puml 在本地生成PNG文件。
🔒 安全状态
✅ 已准备好投入生产 - 所有27个安全问题均已解决
✅ 表示“正确”或“对”。 211项测试通过 - 全面的测试覆盖率(51.2%)
✅ 零警告 - 清理编译
✅ 符合OWASP标准 - 企业安全标准
看 docs/SECURITY_AUDIT_REPORT.md 以获取完整详情。
为以太坊生态系统倾心打造。
