Web3 新手系列:MCP 一句话完成交易!

概述

MCP(Model-Context Protocol)是 Anthropic 推出的一种开放协议,它为大语言模型提供了一种标准化的方式来安全地访问外部工具、数据源和服务。与传统的插件系统不同,MCP 采用客户端-服务器架构,通过标准化的协议接口实现模型与外部系统的无缝集成。

MCP 的核心优势

标准化接口: MCP 定义了统一的协议规范,避免了每个应用都需要开发自己的集成方案的问题。

安全性: 通过严格的权限控制和沙箱机制,确保外部工具的安全访问。

可扩展性: 支持丰富的工具类型,从简单的 API 调用到复杂的数据处理流程。

互操作性: 任何支持 MCP 的客户端都可以使用兼容的服务,实现了真正的跨平台兼容。

Web3 + MCP 的应用场景

在 Web3 领域,MCP 可以为大语言模型提供丰富的区块链交互能力:

  • 资产查询: 查询各种代币余额、交易历史
  • 链上操作: 发送交易、部署合约、调用智能合约
  • DeFi 集成: 与 DEX、借贷协议、流动性挖矿等 DeFi 应用交互
  • 跨链操作: 支持多链资产管理和跨链转账
  • NFT 管理: 查询、转移、交易 NFT 资产

本文将通过 nodejs+typescript 构建一个简单的 Web3 MCP 服务,带你解析 MCP 的工作原理和最佳实践。

一、创建工程

  1. 创建项目文件夹并初始化项目
mkdir web3-mcp-project
cd web3-mcp-project
npm init -y
  1. 安装必须的包
npm install @modelcontextprotocol/sdk ethers
  1. 添加 typescript的 配置,按个人需要进行修改
{
  "compilerOptions": {
    "target": "es2020",
    "module": "es2020",
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "strict": true,
    "skipLibCheck": true,
    "outDir": "build",
    "rootDir": "src",
    "allowJs": true,
    "checkJs": false,
    "resolveJsonModule": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "build"]
}
  1. 修改 package.json 的配置
"type": "module",
"bin": {
  "web3-mcp": "./build/index.js"
},
"scripts": {
  "build": "tsc && chmod +x build/index.js"
},

二、编写 server

通过 server.tool 快速创建工具,这里以 sepolia 测试网的 getBalance 为例我们写一个工具

  1. 首先我们需要注册zan的账号,开通节点服务,获rpcUrl,然后实例化一个 provider
import { JsonRpcProvider } from 'ethers';

const NETWORK = {
  name: "Sepolia",
  rpc: 'https://api.zan.top/node/v1/eth/sepolia/YOUR_API_KEY',
  chainId: 11_155_111,
  currencySymbol: "SepoliaETH",
  explorer: "https://sepolia.etherscan.io"
  },
}

const provider = new JsonRpcProvider(NETWORK.rpc)
  1. 写工具逻辑
export function registerEvmTools(server: McpServer) {
  server.tool(
    "getEvmBalance",
    "Get native token balance for an EVM address on any supported network",
    {
      address: z.string().describe("EVM account address"),
    },
    async ({ address }) => {
      try {
        const balance = await provider.getBalance(address);
        const formattedBalance = formatEther(balance);
  
        return {
          content: [
            {
              type: "text",
              text: `Balance on ${NETWORK.name}:\n${formattedBalance} ${NETWORK.currencySymbol}`,
            },
          ],
        };
      } catch (err) {
        const error = err as Error;
        return {
          content: [
            {
              type: "text",
              text: `Failed to retrieve balance: ${error.message}`,
            },
          ],
        };
      }
    }
  );
}
  1. 启动服务并添加错误处理
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { registerEvmTools } from "./utils.ts";

const server = new McpServer({
  name: "web3-rpc",
  version: "1.0.0",
});
registerEvmTools(server);

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
}

main().catch((err: unknown) => {
  const error = err as Error;
  console.error("Fatal error in main():", error.message);
  process.exit(1);
});

到此一个最小的 mcp 服务已经编写完成

三、调试服务

到这一步,需要我们打包出 js 产物,然后执行modelcontextprotocol/inspector,就可以调试啦

npm run build

npx @modelcontextprotocol/inspector node build/index.js

四、完善逻辑并在 Cursor 中引用

完善更多的逻辑和方法,比如:支持多个 evm 网络、查询 gas、发送交易、查询代币信息以及代币交易等一些常用的方法,打包后在 Cursor 中引用,Cursor 是一款全新的智能 IDE,无缝集成了 AI 技术。Cursor 基于 VSCode 构建,易于上手,并能大幅提升您的工作效率。同时它也是一个支持 MCP 集成的应用程序。

{
  "mcpServers": {
    "web3-rpc": {
      "command": "node",
      "args": [
        "/Users/wutian/Documents/demoCode/web3-mcp/build/index.js"
      ]
    }
  }
}

五、使用

然后你就可以在 chat 里愉快的使用啦~(chat 是 Cursor 的 AI 助手,它位于侧边栏,可通过自然语言与代码库进行交互。)

比如 “查询下这个地址 0xE21E97Ad8B527acb90F0b148EfaFbA46625382cE 在 sepolia 上的余额”:

再比如 “给这个地址 0x2c1d9ef7ccede70d77e6038701cd63138dd920a0 转 0.1ETH”:


六、写在最后

留给我们的想象空间还很大,本文已经讲解了整体流程,那我们后边还可以做哪些事情呢,比如支持多种链(Bitcoin、Solana、Tron),再比如我们接入跨链,在 chat 里说把我这个链的 USDT,换成另一个链的?Web3 和 MCP 的结合为我们开启了一个充满可能性的新世界。无论是 DeFi 协议集成、NFT 市场操作,还是复杂的跨链资产管理,这些都可以通过简单的对话来实现。

感兴趣的小伙伴快来试试吧!

关于 ZAN

ZAN 是蚂蚁数科旗下 Web3 科技品牌,致力于 Web3 应用优化--降低成本、增强安全和提升性能,围绕 Web3 应用全生命周期,提供可靠、稳定安全、定制化的产品和服务。依托 AntChain OpenLabs 的 TrustBase 开源开放技术体系,ZAN 拥有 Web3 领域独特的优势和创新能力,为 Web3 社区的区块链应用开发、企业和开发者的 Web3 应用提供了全面的技术产品和服务,其中包括节点服务(ZAN Node Service)zk 加速(ZAN PowerZebra)身份验证eKYC(ZAN Identity)以及智能合约审计(ZAN Smart Contract Review)等。

联系我们

WebsiteXDiscordTelegram