使用说明
编程任务:以太坊交易MCP服务器
概述
该项目是一个内置于Rust中的模型上下文协议(MCP)服务器,使AI代理能够查询余额并在以太坊上执行代币交换。
特性
get_balance:查询ETH和ERC20代币余额。get_token_price:使用Chainlink价格提要获取当前代币的美元价格。swap_tokens:在Uniswap V2上模拟令牌交换。
技术栈
- 锈 随着 东京 用于异步运行时。
- 醚类 用于以太坊RPC通信。
- rmcp 对于MCP服务器框架。
- rust_decimal 为了财务的精确性。
- Dotenv。 用于管理环境变量。
设置
-
安装Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
克隆存储库:
git clone <repository-url> cd <repository-name> -
设置环境变量: 创建一个
.env在项目的根目录中添加文件,并添加您的以太坊RPC端点和用于模拟的私钥。您可以使用以下服务 英富拉 或 炼金术.# .env INFURA_PROJECT_ID=your_infura_project_id PRIVATE_KEY=your_wallet_private_key -
构建项目:
cargo build --release -
运行服务器:
cargo run --release服务器将于启动
127.0.0.1:8080.
MCP工具调用示例
以下是一个调用 get_balance 工具使用 curl.
请求:
curl -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"method": "get_balance",
"params": {
"wallet_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"
},
"id": 1
}' http://127.0.0.1:8080
答复:
{
"jsonrpc": "2.0",
"result": {
"balance": "..."
},
"id": 1
}
设计决策
- 醚与合金: 我选择了
ethers-rs因为它更成熟,有大量的文档,这对截止日期很紧的项目来说是有益的。 - 用于掉期的Uniswap V2: 为了简单起见,我使用Uniswap V2实现了交换。V2路由器提供简单的功能,如
swapExactTokensForTokens,这比V3更复杂的架构更容易集成。 - 机密的环境变量: Infura项目ID和私钥等敏感信息通过
.env文件,这是一种标准且安全的做法。
已知限制
- 有限令牌支持: 这
get_token_price和swap_tokens这些工具目前支持一个硬编码的代币列表(ETH、DAI、USDC)。这可以通过使用动态令牌列表或发现机制来扩展。 - 仅限Uniswap V2: 交换功能仅限于Uniswap V2。添加V3支持将需要更复杂的实现来处理集中的流动性和路径查找。
- 基本错误处理: 错误处理是基本的。生产就绪的服务器需要更强大的错误处理和报告。
测试
要运行测试,请使用以下命令:
cargo test
测试涵盖了MCP工具的核心功能。请注意,测试需要有效的 INFURA_PROJECT_ID 和 PRIVATE_KEY 在 .env 要运行的文件。
