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 的工作原理和最佳实践。
一、创建工程
- 创建项目文件夹并初始化项目
mkdir web3-mcp-project
cd web3-mcp-project
npm init -y
- 安装必须的包
npm install @modelcontextprotocol/sdk ethers
- 添加 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"]
}
- 修改 package.json 的配置
"type": "module",
"bin": {
"web3-mcp": "./build/index.js"
},
"scripts": {
"build": "tsc && chmod +x build/index.js"
},
二、编写 server
通过 server.tool 快速创建工具,这里以 sepolia 测试网的 getBalance 为例我们写一个工具
- 首先我们需要注册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)
- 写工具逻辑
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}`,
},
],
};
}
}
);
}
- 启动服务并添加错误处理
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)等。
联系我们
Website | X | Discord | Telegram