以太坊交易MCP服务器

一个基于Rust构建的模型上下文协议(MCP)服务器,用于AI代理查询以太坊余额和执行代币交换。

  • by a67793581
  • Rust
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 a67793581/Ethereum-Trading-MCP-Server

使用说明

编程任务:以太坊交易MCP服务器

概述

该项目是一个内置于Rust中的模型上下文协议(MCP)服务器,使AI代理能够查询余额并在以太坊上执行代币交换。

特性

  • get_balance:查询ETH和ERC20代币余额。
  • get_token_price:使用Chainlink价格提要获取当前代币的美元价格。
  • swap_tokens:在Uniswap V2上模拟令牌交换。

技术栈

  • 锈 随着 东京 用于异步运行时。
  • 醚类 用于以太坊RPC通信。
  • rmcp 对于MCP服务器框架。
  • rust_decimal 为了财务的精确性。
  • Dotenv。 用于管理环境变量。

设置

  1. 安装Rust:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. 克隆存储库:

    git clone <repository-url>
    cd <repository-name>
    
  3. 设置环境变量: 创建一个 .env 在项目的根目录中添加文件,并添加您的以太坊RPC端点和用于模拟的私钥。您可以使用以下服务 英富拉 或 炼金术.

    # .env
    INFURA_PROJECT_ID=your_infura_project_id
    PRIVATE_KEY=your_wallet_private_key
    
  4. 构建项目:

    cargo build --release
    
  5. 运行服务器:

    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 要运行的文件。