使用说明
DEX MCP RS - 以太坊去中心化金融(DeFi)MCP 服务器
一个用Rust构建的模型上下文协议(MCP)服务器,它使AI代理能够在以太坊上查询余额并执行代币交换。该服务器提供了与以太坊和Uniswap V2交互的三个核心工具。
特点/特性
- 获取余额 - 查询任意地址的以太币(ETH)和ERC20代币余额
- 获取代币价格 - 从Uniswap V2池中获取实时代币的以太坊(ETH)和美元(USD)价格
- 交换代币 - 在Uniswap V2上模拟代币交换(不在线上执行)
先决条件
- Rust 1.70 或更高版本
- 以太坊RPC端点(Infura、Alchemy或本地节点)
- 用于交易签名的私钥(估算气体费用时必需)
设置说明
1. 克隆仓库
git clone https://github.com/yourusername/dex-mcp-rs.git
cd dex-mcp-rs
2. 配置环境变量
创建一个 .env 项目根目录下的文件:
cp .env.example .env
编辑 .env 并添加您的凭据:
RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY
PRIVATE_KEY=your_private_key_here
⚠️ 安全警告: 永远不要把自己的 .env 不要保存或分享你的私钥!
3. 构建项目
cargo build --release
4. 运行服务器
cargo run --release
服务器将启动并监听标准输入/输出上的MCP请求。
设计决策
为何选择合金? Alloy 是一个现代化的、高性能的 Rust 语言 Ethereum 库,具有出色的类型安全性和模块化设计。与较旧的 ethers-rs 库相比,它提供了更好的用户体验和维护性。
为什么选择Uniswap V2? 与V3的集中流动性模型相比,V2采用了一个更简单的恒定乘积公式(x * y = k),这使得其实现和理解更加容易,同时仍然能为大多数代币对提供准确的定价。
为何采用链上定价? 直接从Uniswap池储备中推导价格,消除了对外部API的依赖,并确保数据始终是最新的且无需信任,尽管这需要更多的RPC调用。
为什么使用 eth_call 进行模拟? 使用 eth_call 它使我们能够在不在线上执行交易的情况下模拟交易,提供准确的燃气费用估算,并在不消耗燃气或要求代币授权的情况下捕获潜在的失败情况。
测试
运行测试套件:
cargo test
注:集成测试用以下标记表示 #[ignore] 默认情况下,它们需要有效的RPC连接才能运行。要运行它们:
cargo test -- --ignored
确保你的 .env 在运行集成测试之前已配置文件。
已知的限制
- 仅限主网当前已配置为以太坊主网。如需使用测试网,请更新RPC URL和合约地址。
- 仅限Uniswap V2不支持Uniswap V3或其他去中心化交易所(DEX)。
- 需要充值钱包估算燃气费用需要一个拥有一定以太币(ETH)余额的钱包。
- 价格准确性假设WETH和USDC交易对具有足够的流动性。流动性较低的交易对可能定价不准确。
- 无交易执行交换工具仅用于模拟,并不执行实际的交换操作。
建筑
src/
├── main.rs # MCP server setup and request routing
├── config.rs # Configuration management
├── types.rs # Shared types and request/response structures
├── ethereum/
│ ├── mod.rs # Ethereum client wrapper
│ └── contracts.rs # Smart contract ABIs (ERC20, Uniswap V2)
└── tools/
├── mod.rs # Tool module exports
├── balance.rs # get_balance implementation
├── price.rs # get_token_price implementation
└── swap.rs # swap_tokens implementation
智能合约地址(主网)
- Uniswap V2 路由器:
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D - Uniswap V2 工厂:
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f - WETH(Wrapped Ethereum,以太坊封装币):
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 - USDC(美元稳定币):
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
发展
项目结构
该项目采用模块化架构:
- 配置环境与配置管理
- 以太坊与合金结合的区块链交互层
- 工具MCP工具实现(平衡、定价、交换)
- 类型共享数据结构
添加新工具
- 定义输入/输出类型于
src/types.rs - 实现工具逻辑在
src/tools/ - 在(系统/平台中)注册该工具
src/main.rs在……中create_router函数 - 添加测试到
tests/integration_tests.rs
做出贡献
欢迎投稿!请确保:
- 代码编译无警告:
cargo build - 所有测试通过:
cargo test - 代码已格式化:
cargo fmt - 代码通过了 clippy 的检查:
cargo clippy
许可证
麻省理工学院(MIT)
安全
这是一段用于教育目的的演示代码。如需生产环境使用:
- 使用安全的密钥管理系统(硬件安全模块,密钥管理服务)
- 实施速率限制
- 添加全面的错误处理
- 彻底审计所有代码
- 切勿在日志或错误信息中暴露私钥
致谢
构建于:
