news 2026/4/26 6:42:04

基于MCP协议的EVM区块链AI智能体交互服务器部署与实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于MCP协议的EVM区块链AI智能体交互服务器部署与实战

1. 项目概述:为AI智能体打开区块链世界的大门

如果你是一名开发者,或者正在探索AI与区块链结合的领域,那么你一定遇到过这样的困境:想让一个大型语言模型(LLM)或者一个AI智能体(Agent)去查询某个钱包的余额、读取一个智能合约的状态,甚至执行一笔链上交易,却发现这中间隔着一道巨大的鸿沟。AI模型本身并不理解RPC调用、ABI编码或者交易签名这些底层细节。传统的做法是,你需要为每一个区块链操作编写大量的胶水代码,将自然语言指令翻译成复杂的API调用,这个过程不仅繁琐,而且极易出错。

今天要介绍的这个项目——mcpdotdirect/evm-mcp-server,就是为了彻底解决这个问题而生的。它是一个基于模型上下文协议(Model Context Protocol, MCP)的服务器,专门为AI智能体提供了与60多个EVM兼容区块链网络进行交互的统一接口。简单来说,它就像是一个精通所有EVM链的“翻译官”和“执行器”,坐在AI和区块链之间。当AI说“帮我查一下vitalik.eth在以太坊主网上的ETH余额”,这个服务器就能理解这个请求,自动调用以太坊的RPC,解析ENS域名,并返回一个AI能直接理解的结构化结果。

这个项目的核心价值在于标准化自动化。它通过22个精确定义的工具(Tools)和10个引导式提示(Prompts),将区块链交互的复杂性完全封装起来。开发者不再需要为不同的链(以太坊、Optimism、Arbitrum、Polygon等)维护不同的客户端配置,也不需要手动处理ABI获取、数据解码、Gas估算等琐事。更重要的是,它对AI极其友好,支持使用人类可读的ENS域名(如vitalik.eth)替代一长串的十六进制地址,并且具备智能的ABI自动获取能力,让AI可以像查询数据库一样自然地与区块链对话。

无论你是在构建一个能分析链上数据的AI助手,一个能自动执行DeFi策略的交易机器人,还是一个能验证NFT所有权的客服应用,这个MCP服务器都能为你提供坚实、可靠的基础设施。接下来,我将带你深入拆解它的设计思路、核心功能,并分享从零开始部署、配置到实际应用的全过程,以及我在使用中积累的一些关键技巧和避坑指南。

2. 核心架构与设计哲学解析

2.1 为什么是MCP?协议层的统一价值

在深入代码之前,我们必须先理解MCP是什么,以及它为何是连接AI与外部服务的理想桥梁。Model Context Protocol是由Anthropic提出的一种开放协议,旨在为标准化的方式,为LLM提供工具、资源和上下文信息。你可以把它想象成AI世界的“USB协议”——它定义了一套标准的插口(接口)和通信规范,任何符合MCP标准的设备(服务器)都能被任何支持MCP的主机(AI客户端)即插即用。

evm-mcp-server正是这样一个符合MCP标准的“区块链USB设备”。它的设计哲学体现在几个层面:

  1. 声明式接口:服务器向AI客户端“声明”自己拥有哪些能力(工具),每个工具需要什么参数,返回什么格式的数据。AI客户端(如Cursor、Claude Desktop)在连接时就能自动发现这些能力,无需硬编码。这解决了传统集成中需要为每个AI模型定制适配器的问题。
  2. 无状态与松耦合:MCP服务器本身不维护会话状态,每次工具调用都是独立的。这使得服务器可以轻松扩展、负载均衡,也符合区块链交互本身无状态的特性。
  3. 资源抽象:除了工具,MCP还定义了“资源”(Resources)的概念,可以理解为一种只读的数据源。该项目将区块链数据(如区块、交易、余额)也通过资源URI的形式暴露出来(如evm://ethereum/block/latest),让AI不仅能执行操作,还能“浏览”链上数据。

这个架构带来的最大好处是生态互操作性。一旦你的AI应用通过MCP接入了这个EVM服务器,理论上它就能与未来任何其他遵循MCP标准的服务(如数据库查询、天气API、日历服务)无缝协作,构建出功能极其复杂的智能体,而无需修改核心逻辑。

2.2 核心组件拆解:工具、资源与提示的三位一体

项目的功能通过三大核心组件提供,理解它们的分工是高效使用的基础。

工具(Tools):这是服务器的“主动技能”,用于执行会改变状态或需要复杂计算的操作。例如:

  • transfer_native: 发送原生代币(如ETH)。
  • write_contract: 调用智能合约的写入函数。
  • sign_message: 为消息签名。
  • multicall: 将多个合约只读调用打包成一个RPC请求,极大提升查询效率。

每个工具都有严格的输入输出Schema。例如,get_balance工具要求addressnetwork参数,并返回包含原始值和格式化值的JSON。这种强类型约束确保了AI调用时的安全性和准确性。

资源(Resources):这是服务器的“被动信息”,提供对链上数据的只读访问。它们通过统一的URI模式来定位。例如:

  • evm://optimism/address/vitalik.eth/balance: 获取vitalik.eth在Optimism上的ETH余额。
  • evm://arbitrum/tx/0x...: 获取某笔交易的详情。

资源的妙处在于,AI客户端可以像浏览器访问网页一样“读取”这些URI,获取实时数据作为上下文,而无需显式调用工具。这非常适合用于数据监控、信息展示等场景。

提示(Prompts):这是引导AI正确使用工具的“脚手架”或“工作流模板”。它超越了简单的工具描述,提供了更上层的指导。例如:

  • transaction_preparation: 引导AI逐步规划一笔交易:检查余额、估算Gas、确认接收地址等。
  • approval_auditing: 引导AI系统性地检查一个地址对各类代币的授权情况,识别潜在风险。
  • error_diagnosis: 当交易失败时,提供一套排查逻辑(Gas不足?合约暂停?参数错误?)。

提示的存在,极大地降低了AI犯低级错误的概率,使其能够执行更复杂、更安全的链上操作。它相当于把资深区块链开发者的经验,编码成了AI可执行的检查清单。

2.3 多链支持的实现:Viem与统一抽象层

支持60多条链并非易事。项目底层依赖于Viem这个优秀的以太坊TypeScript接口库。Viem本身提供了对多链的良好支持,但evm-mcp-server在其之上构建了一个更友好的抽象层。

src/core/chains.ts中,你会找到一个庞大的链配置对象。它不仅包含了每条链的idnamerpcUrl,还预置了对应的公共RPC端点。这是项目开箱即用的关键——用户无需自己寻找或搭建RPC节点。

// 示例:链配置的结构 export const CHAINS: Record<string, ChainConfig> = { ethereum: { id: 1, name: 'Ethereum', network: 'homestead', rpcUrl: 'https://eth.llamarpc.com', // 使用的公共RPC explorerUrl: 'https://etherscan.io', nativeCurrency: { symbol: 'ETH', decimals: 18 } }, optimism: { id: 10, name: 'Optimism', network: 'optimism', rpcUrl: 'https://mainnet.optimism.io', explorerUrl: 'https://optimistic.etherscan.io', nativeCurrency: { symbol: 'ETH', decimals: 18 } }, // ... 其他60+条链 };

当用户通过network参数(如"optimism")指定一条链时,服务器会根据这个配置表,自动创建连接到对应RPC的Viem客户端。所有后续的余额查询、合约调用、交易发送都通过这个统一的客户端接口进行,从而实现了“写一次逻辑,跑在所有链上”的效果。

实操心得:RPC的选择与备用方案虽然项目提供了公共RPC,但在生产环境或高频使用场景下,公共RPC可能有速率限制或稳定性问题。我的经验是,对于主网操作,最好配置自己的RPC节点服务(如Infura、Alchemy、QuickNode)。你可以修改chains.ts文件,将rpcUrl替换为你自己的节点URL。对于测试网,使用公共RPC通常问题不大,但也要注意其可用性。

3. 从零开始:环境配置与服务器部署

3.1 环境准备与依赖安装

项目推荐使用Bun作为运行时,这是一个新兴的、速度极快的JavaScript/TypeScript工具链。当然,使用Node.js 20+也完全兼容。

步骤一:安装Bun(推荐)如果你还没有Bun,可以通过以下命令安装(macOS/Linux):

curl -fsSL https://bun.sh/install | bash

安装完成后,重启终端,运行bun --version确认安装成功。

步骤二:克隆项目并安装依赖

git clone https://github.com/mcpdotdirect/evm-mcp-server.git cd evm-mcp-server bun install

bun install会读取package.json,安装所有必要的依赖,主要是viem@modelcontextprotocol/sdk以及其他工具库。整个过程通常很快。

如果遇到网络问题导致依赖安装失败,可以尝试切换npm源或使用bun install --verbose查看详细日志。

3.2 钱包配置:私钥与助记词的安全抉择

要让服务器能够执行发送交易、调用合约等写入操作,必须为其配置一个钱包。项目提供了两种方式,各有优劣。

方式一:使用私钥(简单直接)

export EVM_PRIVATE_KEY="0x你的64位十六进制私钥(不带0x前缀也可)"
  • 优点:配置简单,一目了然。
  • 缺点:安全性最低。私钥一旦泄露,对应地址的资产将完全失控。不适合团队协作或需要管理多个地址的场景。

方式二:使用助记词(推荐,更灵活)

export EVM_MNEMONIC="你的12个或24个助记词,用空格分隔" export EVM_ACCOUNT_INDEX="0" # 可选,默认为0
  • 优点
    1. 安全性相对更好:助记词可以离线生成和保管,私钥由程序在内存中按需派生。
    2. 支持HD钱包:遵循BIP-44标准,派生路径为m/44'/60'/0'/0/{accountIndex}。这意味着你可以通过一个助记词管理无数个地址,只需改变EVM_ACCOUNT_INDEX即可切换操作账户。这对于区分测试账户、主账户、合约部署账户等场景非常有用。
  • 如何选择accountIndex:通常0是第一个外部账户。你可以使用钱包工具(如MetaMask)查看你常用地址对应的索引。如果你不确定,保持为0即可。

安全警告与最佳实践

  1. 绝对不要将私钥或助记词提交到版本控制系统(如Git)。.env文件如果包含这些信息,必须加入.gitignore
  2. 对于生产环境,考虑使用硬件钱包的签名服务,或使用AWS KMS、GCP Secret Manager等云服务密钥管理方案来注入私钥,而不是使用环境变量。
  3. 为MCP服务器创建一个专用的、仅包含少量测试资金的地址,切勿使用存有大量资产的主钱包。
  4. 助记词要离线备份在安全的地方(如物理保险箱中的助记词板)。

3.3 可选但重要的配置:Etherscan API密钥

ABI(应用二进制接口)是调用智能合约的“说明书”。该项目一个杀手级特性是自动从区块链浏览器获取ABI。为此,你需要一个Etherscan API密钥。

  1. 访问 Etherscan 并注册账号。
  2. 在API Keys页面,点击“Add”创建一个新的API Key,名称可以填mcp-server
  3. 复制生成的密钥(一串字母数字组合)。
  4. 设置环境变量:
    export ETHERSCAN_API_KEY="你的API密钥"

这个密钥不仅用于以太坊主网,还通过Etherscan的v2 API支持了项目中列出的所有60多条链的ABI查询。没有这个密钥,get_contract_abi工具和read_contract/write_contract工具的自动ABI获取功能将无法工作,你必须在每次调用时手动提供ABI JSON,便利性大打折扣。

3.4 启动服务器:两种模式详解

配置好环境变量后,就可以启动服务器了。项目支持两种运行模式,适应不同场景。

模式一:Stdio模式(默认,用于CLI/桌面AI集成)

bun start # 或开发模式,代码修改后自动重启 bun dev

这种模式下,服务器通过标准输入输出(stdio)与父进程通信。这是与Cursor、Claude Desktop等AI客户端集成的最常用方式。客户端会作为一个子进程启动这个服务器,并通过管道进行JSON-RPC通信。

模式二:HTTP模式(用于Web应用/远程调用)

bun start:http # 或开发模式 bun dev:http

这种模式下,服务器会启动一个HTTP服务(默认端口3001),并提供一个Server-Sent Events (SSE) 端点 (http://localhost:3001/sse)。这允许远程的Web应用或其他服务通过HTTP连接到这个MCP服务器。当你需要在一个中心化的服务中运行MCP服务器,供多个前端或多个AI Agent同时连接时,这个模式非常有用。

启动后,你应该能在终端看到类似MCP EVM Server running on stdioHTTP server listening on port 3001的日志,表示服务器已就绪。

4. 与AI工作流深度集成:以Cursor为例

服务器跑起来只是第一步,如何让它成为你AI工作流中无缝的一部分才是关键。这里以目前非常流行的AI代码编辑器Cursor为例,展示最优雅的集成方式。

4.1 项目级配置:使用.cursor/mcp.json

最推荐的方式是在你的项目根目录下创建.cursor/mcp.json文件。这样,当你在这个项目中打开Cursor时,它会自动加载这个MCP服务器配置,并且这个配置可以提交到Git,与团队成员共享。

{ "mcpServers": { "evm-mcp-server": { "command": "npx", "args": ["-y", "@mcpdotdirect/evm-mcp-server"] } } }
  • command: 告诉Cursor用什么命令启动服务器。这里用npx直接从npm运行包,无需全局安装。
  • args: 传递给命令的参数。-y让npx在找不到本地包时自动同意安装,@mcpdotdirect/evm-mcp-server是包名。

更高级的配置示例:

{ "mcpServers": { "evm-mcp-local": { "command": "bun", "args": ["/绝对路径/到/你的/evm-mcp-server", "start"], "env": { "EVM_MNEMONIC": "你的助记词", "ETHERSCAN_API_KEY": "你的Etherscan密钥" } }, "evm-mcp-http": { "url": "http://localhost:3001/sse" } } }
  • evm-mcp-local: 指向你本地克隆并开发的项目目录,并直接设置环境变量。适合深度定制和开发。
  • evm-mcp-http: 连接到已运行的HTTP服务器。适合服务器常驻后台的场景。

创建好配置文件后,重启Cursor或打开该项目。你会在Cursor界面的MCP Servers区域看到新添加的服务器,并可以启用/禁用它。

4.2 实战演练:在Cursor中与区块链对话

配置成功后,魔法就开始了。你不再需要编写复杂的Web3代码,可以直接用自然语言指挥AI。

场景一:快速查询在Cursor的Chat界面中,你可以直接提问:

  • vitalik.eth在以太坊主网上有多少ETH?”
  • “查一下Arbitrum Sepolia测试网最新的区块号是多少?”
  • 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48这个合约是什么代币?它的符号和精度是多少?”

Cursor会理解你的问题,自动调用MCP服务器中对应的工具(get_balance,get_latest_block,read_contract),并将结果清晰地展示给你。

场景二:辅助编程与调试假设你正在写一个DeFi相关的脚本,需要与合约交互。

  1. 你可以在代码注释中写下:“这里需要调用Uniswap V2 Router的getAmountsOut函数,计算用1个ETH可以换多少USDC。”
  2. 然后问Cursor:“帮我写一下调用0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D这个合约getAmountsOut函数的代码,参数是1e18和[WETH地址, USDC地址],在以太坊主网上。”
  3. Cursor会利用MCP服务器获取合约ABI,理解函数签名,并为你生成使用Viem或Ethers.js的正确调用代码片段。

场景三:执行链上操作(需谨慎!)在配置了钱包私钥/助记词后,你甚至可以让AI协助执行操作:

  • “从我的钱包转0.01个ETH到0x...这个地址,在Sepolia测试网上。”
  • “为我的地址查询一下对Uniswap Router的USDC授权额度是多少。”
  • “帮我在Goerli测试网上的某个合约上调用mint函数,参数是5。”

重要警告:让AI执行写入操作风险极高!务必遵循以下原则:

  1. 仅在测试网操作:所有涉及资产转移或合约写入的操作,先在Sepolia、Goerli等测试网上充分测试。
  2. 小额测试:即使是在测试网,也先用极小金额测试流程。
  3. 人工复核:对于任何AI生成的交易,在发送前,务必自己仔细检查接收地址、金额、Gas Limit等关键参数。AI可能会“幻觉”出错误的地址或数值。
  4. 使用Prompt引导:充分利用服务器内置的transaction_preparation等提示,让AI按步骤检查,减少错误。

4.3 集成到Claude Desktop等其他客户端

除了Cursor,任何支持MCP的客户端都可以连接。例如,在Claude Desktop中,你可以通过命令行添加:

claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server

然后启动Claude,它就能获得同样的区块链能力。这为构建跨平台的AI区块链助手提供了可能。

5. 核心工具深度解析与实战技巧

了解了基本集成后,我们来深入剖析几个最常用、最强大的工具,并分享一些教科书里不会写的实战技巧。

5.1 智能合约交互的“黑科技”:自动ABI获取

read_contractwrite_contract是使用频率最高的工具。它们的强大之处在于abiJson参数是可选的。如果你不提供ABI,服务器会尝试自动从Etherscan获取。

内部工作原理:

  1. 你调用read_contract,传入contractAddress,functionName,args,但不传abiJson
  2. 服务器检查是否有缓存的ABI。
  3. 若无缓存,则使用配置的ETHERSCAN_API_KEY,向对应网络的区块链浏览器发起API请求。
  4. 获取到ABI后,解析并找到匹配的函数。
  5. 使用Viem对参数进行编码,发起RPC调用。
  6. 对返回的数据进行解码,并以结构化JSON返回。

实战技巧:处理未验证合约自动ABI获取的前提是合约在区块链浏览器上已经验证过源代码。对于未验证的合约,此功能会失败。此时你有两个选择:

  1. 手动提供ABI:如果你通过其他途径拿到了ABI,可以将其作为JSON字符串传入abiJson参数。
  2. 使用低级调用:对于非常简单的调用(如获取余额),你可以直接使用eth_call,但这就需要你手动处理编码,失去了工具的便利性。建议优先寻找或验证合约ABI。

5.2 性能利器:Multicall批量查询

在DeFi仪表盘或数据分析场景中,经常需要同时查询大量数据(如多个用户的多个代币余额)。如果逐个调用RPC,速度会非常慢。multicall工具就是为了解决这个问题。

它底层集成了Multicall3合约。这是一个部署在几乎所有EVM链上的通用合约,允许你将多个view/pure函数调用打包进一个交易进行静态调用,仅消耗一次RPC往返的开销。

示例:同时查询多个信息假设你想获取一个地址的ETH余额、USDC余额和某个NFT的所有权状态。

// 通过MCP工具调用multicall const result = await mcp.invokeTool('multicall', { network: 'ethereum', calls: [ { target: '0x...Multicall3地址...', callData: encodeBalanceOfCall('0x目标地址') }, { target: USDC_ADDRESS, callData: encodeBalanceOfCall('0x目标地址') }, { target: NFT_ADDRESS, callData: encodeOwnerOfCall(tokenId) } ] });

注意:你需要自己用Viem或Ethers提前编码好callData。虽然多了一步,但对于批量查询场景,性能提升是数量级的。

避坑指南:Multicall的局限性

  1. 仅支持只读调用:Multicall只能用于viewpure函数,不能用于发送交易或改变状态的函数。
  2. Gas限制:虽然是一次RPC调用,但合约内部执行每个调用仍需消耗Gas。如果批量调用的函数非常复杂,可能会达到Gas限制而失败。需要合理控制批量调用的数量和复杂度。
  3. 错误处理:默认情况下,一个调用失败会导致整个批量调用失败。你可以设置allowFailure: true来容忍单个失败,只返回成功的结果。

5.3 消息签名:打通Web2与Web3的桥梁

sign_messagesign_typed_data是两个至关重要的工具,它们使得AI能代表用户进行“链下”的授权和认证。

sign_message的应用场景:

  • Sign-In with Ethereum (SIWE):让用户用钱包签名一条特定格式的消息(如“我同意使用服务X”),完成去中心化登录。
  • 简单授权:证明某个地址持有特定私钥,用于API访问控制等。

sign_typed_data(EIP-712) 的进阶应用:这是更强大、更安全的结构化数据签名标准。它签名的不是普通字符串,而是一个包含类型信息的JSON对象。主要用途:

  • Gasless Trading (Meta-Transaction):用户签名一个“订单”,包含交易详情(如用A代币换B代币),然后将签名提交给一个中继服务器,由中继服务器支付Gas并提交交易。这是很多DEX聚合器(如Matcha)的基础。
  • Permit授权:ERC-20代币的permit函数允许用户通过签名授权其他地址使用自己的代币,而无需事先发起一笔链上approve交易,节省了Gas费和等待时间。
  • 复杂协议签名:如DAO投票、数字资产所有权证明等。

在AI工作流中的意义:这意味着你的AI助手不仅可以“看”链上数据,还可以代表用户进行安全的、无需即时支付Gas的授权操作,极大地扩展了应用场景。

6. 常见问题排查与性能优化实录

在实际使用中,你肯定会遇到各种问题。下面是我踩过坑后总结的常见问题速查表和优化建议。

6.1 连接与配置问题

问题现象可能原因解决方案
服务器启动失败,提示Cannot find module依赖未安装或Node.js版本过低。1. 运行bun installnpm install
2. 确保Node.js版本 ≥ 20 或 Bun版本 ≥ 1.0。
工具调用返回Missing or invalid private key/mnemonic未配置钱包环境变量,或变量值格式错误。1. 检查EVM_PRIVATE_KEYEVM_MNEMONIC是否已正确设置。
2. 私钥需为64位十六进制数(可带0x前缀)。
3. 助记词需为12或24个单词,用空格分隔。
ABI获取失败,错误信息包含Max rate limit reachedEtherscan API调用频率超限。免费API有每秒/每天调用次数限制。1. 申请多个Etherscan API Key,在代码中实现简单的轮询。
2. 对于高频使用的合约,将获取到的ABI缓存到本地文件或数据库,避免重复查询。
3. 考虑使用付费的Etherscan API套餐。
调用write_contract时交易一直pending或失败Gas费设置过低、网络拥堵、合约逻辑错误、或账户余额不足。1. 使用get_gas_price工具获取当前网络Gas价格,并适当提高Gas Premium。
2. 检查发送地址的Native Token余额是否足够支付Gas。
3. 在测试网充分测试合约调用逻辑,使用read_contract先模拟调用看是否会报错。
ENS解析失败1. 当前连接的RPC节点不支持ENS。
2. ENS域名不存在或已过期。
3. 网络参数错误(如在Polygon网络查询以太坊主网的ENS)。
1. 确保使用的RPC支持ENS(公共RPC通常支持)。
2. 手动在Etherscan或ENS官网检查域名状态。
3. 确认调用工具时指定的network参数是ethereum(ENS是以太坊主网的服务)。

6.2 性能优化与最佳实践

  1. RPC节点选择

    • 公共RPC:方便,但有速率限制和延迟。仅适用于低频测试。
    • 自建节点:性能最好,控制力最强,但运维成本高。
    • 节点服务商:推荐折中方案。使用Infura、Alchemy、QuickNode等服务。它们提供稳定的连接、更快的响应、更高的调用限额,以及诸如Webhook等高级功能。在chains.ts中替换rpcUrl即可。
  2. ABI缓存策略: 自动获取ABI虽然方便,但每次调用都去Etherscan查询是无法忍受的。实现一个简单的内存或Redis缓存能极大提升性能。

    // 伪代码示例:简单的内存缓存 const abiCache = new Map<string, any>(); async function getCachedAbi(contractAddress: string, network: string) { const cacheKey = `${network}:${contractAddress}`; if (abiCache.has(cacheKey)) { return abiCache.get(cacheKey); } const abi = await fetchAbiFromEtherscan(contractAddress, network); abiCache.set(cacheKey, abi); return abi; } // 可以设置TTL,例如1小时过期
  3. 错误处理与重试: 区块链网络不稳定是常态。为所有RPC调用添加指数退避重试机制。

    import { retry } from 'async'; async function robustRpcCall(action: () => Promise<any>) { return retry( { times: 3, interval: (retryCount) => Math.pow(2, retryCount) * 1000, // 指数退避 }, action ); }
  4. 监控与日志: 为生产环境中的MCP服务器添加详细的日志记录,特别是对于交易发送、签名等敏感操作。监控RPC调用延迟、失败率以及Etherscan API的剩余配额。

6.3 安全加固建议

  1. 最小权限原则:为MCP服务器配置的钱包,只授予其完成任务所必需的最小权限。如果是用于查询,则根本不需要私钥。如果需要发送交易,确保钱包里只有完成任务所需的资金。
  2. 输入验证与沙箱:虽然MCP客户端(如Cursor)会做一层校验,但在服务器端对传入的参数(如地址格式、金额数值)进行严格的二次验证是必要的。防止恶意构造的参数导致意外行为。
  3. 操作确认机制:对于涉及资产转移或重要合约调用的操作,可以考虑实现一个二次确认流程。例如,AI生成交易参数后,先返回给用户界面审核,用户手动点击确认后再实际发送。
  4. 环境隔离:将测试网和主网的配置完全分开。使用不同的环境变量文件(.env.testnet,.env.mainnet),甚至运行不同的服务器实例,避免误操作。

7. 扩展开发:添加自定义工具与网络

开源项目的魅力在于可以按需定制。如果你需要支持一条新的EVM链,或者添加一个项目特有的工具,可以轻松地扩展这个服务器。

7.1 添加新的EVM网络

假设要添加一条新的链,如Berachain

  1. 打开src/core/chains.ts文件。
  2. CHAINS常量对象中添加新的配置项:
    export const CHAINS: Record<string, ChainConfig> = { // ... 已有配置 berachain: { id: 80094, // Berachain的主网Chain ID name: 'Berachain', network: 'berachain', rpcUrl: 'https://rpc.berachain.com', // 替换为实际的RPC URL explorerUrl: 'https://berascan.com', nativeCurrency: { symbol: 'BERA', decimals: 18 } }, 'berachain-testnet': { id: 80085, // 测试网ID name: 'Berachain Testnet', network: 'berachain-testnet', rpcUrl: 'https://rpc.testnet.berachain.com', explorerUrl: 'https://testnet.berascan.com', nativeCurrency: { symbol: 'BERA', decimals: 18 } } };
  3. 确保你使用的Viem版本支持该链的特定交易格式或预编译合约(大多数EVM链都是兼容的)。
  4. 重新启动服务器,新的网络标识符(如berachain)就可以在工具调用的network参数中使用了。

7.2 创建自定义工具

假设你想添加一个工具,用于计算两个ERC20代币在Uniswap V2中的实时兑换率。

  1. src/core/services/目录下创建一个新文件,例如swap.ts
  2. 实现核心逻辑:
    import { createPublicClient, http, parseAbi } from 'viem'; import { getChainConfig } from '../chains.js'; import { handleError } from './utils.js'; export async function getSwapRate(params: { network: string; tokenIn: string; tokenOut: string; amountIn: string; }) { try { const chain = getChainConfig(params.network); const client = createPublicClient({ chain, transport: http(chain.rpcUrl), }); // Uniswap V2 Router地址 (假设) const routerAddress = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D'; const routerAbi = parseAbi([ 'function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts)', ]); const path = [params.tokenIn, params.tokenOut]; const amounts = await client.readContract({ address: routerAddress, abi: routerAbi, functionName: 'getAmountsOut', args: [BigInt(params.amountIn), path], }); return { tokenIn: params.tokenIn, tokenOut: params.tokenOut, amountIn: params.amountIn, amountOut: amounts[1].toString(), path, network: params.network, }; } catch (error) { handleError(error, 'Failed to get swap rate'); } }
  3. src/core/services/index.ts中导出这个新函数。
  4. src/core/tools.ts中注册新的MCP工具:
    import { getSwapRate } from './services/index.js'; // 在 tools 数组中添加 { name: 'get_swap_rate', description: 'Get the estimated swap output amount from Uniswap V2.', inputSchema: { type: 'object', properties: { network: { type: 'string', description: 'EVM network name' }, tokenIn: { type: 'string', description: 'Input token address' }, tokenOut: { type: 'string', description: 'Output token address' }, amountIn: { type: 'string', description: 'Input amount in smallest unit' }, }, required: ['network', 'tokenIn', 'tokenOut', 'amountIn'], }, handler: async ({ params }) => { return await getSwapRate(params); }, }
  5. 重新编译并启动服务器,你的AI助手现在就可以使用get_swap_rate这个新工具了。

通过这种方式,你可以将任何复杂的区块链逻辑封装成简单的工具,极大地增强AI智能体的能力边界。这个项目不仅仅是一个开箱即用的服务器,更是一个强大的、可扩展的区块链AI集成框架。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 6:39:44

AI智能体驱动网页自动化:Surfer CLI从入门到实战应用

1. 项目概述与核心价值 最近在折腾一些自动化内容生成和网页交互的脚本时&#xff0c;发现了一个挺有意思的工具&#xff1a; hcompai/surfer-h-cli 。这本质上是一个命令行接口&#xff08;CLI&#xff09;工具&#xff0c;它背后连接的是一个名为“Surfer”的AI智能体服务。…

作者头像 李华
网站建设 2026/4/26 6:39:40

ClawSuite:面向外包项目的自动化测试套件设计与实践

1. 项目概述&#xff1a;一个面向外包场景的自动化测试套件最近在整理过往的自动化测试项目时&#xff0c;我反复思考一个问题&#xff1a;为什么很多为特定产品定制的自动化测试框架&#xff0c;一旦换了项目或团队&#xff0c;复用率就变得极低&#xff1f;尤其是在外包或项目…

作者头像 李华
网站建设 2026/4/26 6:31:47

ChatArena多智能体对话框架:从原理到实战的完整指南

1. 项目概述&#xff1a;从零理解ChatArena&#xff0c;一个多智能体对话竞技场如果你对构建多智能体系统、研究智能体间的协作与竞争&#xff0c;或者想为你的大语言模型&#xff08;LLM&#xff09;应用增加“社交”与“博弈”维度感兴趣&#xff0c;那么Farama Foundation旗…

作者头像 李华
网站建设 2026/4/26 6:28:19

LM文生图效果展示:真实用户生成的100+张时尚人像高清作品精选

LM文生图效果展示&#xff1a;真实用户生成的100张时尚人像高清作品精选 1. 惊艳效果开场 想象一下&#xff0c;只需输入简单的文字描述&#xff0c;就能获得专业级时尚人像摄影作品。LM文生图镜像让这个想象成为现实&#xff0c;它基于强大的Tongyi-MAI / Z-Image底座&#…

作者头像 李华