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)等。