17.1 MCP 是什么
Model Context Protocol,让 Agent 用标准方式接外部工具。Cloudflare Agents 两种都支持:当客户端、当服务器。
17.2 当客户端:连别人的 MCP
export class ToolAgent extends Agent {
async onStart() {
await this.addMcpServer("github", "https://mcp.github.com/mcp");
}
async onRequest(request: Request) {
const workersai = createWorkersAI({ binding: this.env.AI });
const { text } = await generateText({
model: workersai("@cf/zai-org/glm-4.7-flash"),
prompt: "Summarize latest issue activity.",
tools: this.mcp.getAITools(), // 把远程工具喂给模型
});
return Response.json({ text });
}
}
要鉴权?addMcpServer 返回授权状态,连接持久化进 Agent 的 SQL。
17.3 当服务器:把自己的 Agent 暴露成 MCP
最简有状态 MCP Server,约 20 行:
import { McpAgent } from "agents/mcp";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
export class TinyMcp extends McpAgent {
server = new McpServer({ name: "", version: "v1.0.0" });
async init() {
this.server.registerTool(
"square",
{ description: "Squares a number", inputSchema: { number: z.number() } },
async ({ number }) => ({ content: [{ type: "text", text: String(number ** 2) }] })
);
}
}
export default TinyMcp.serve("/"); // 整个 Worker 就这么一行
| 维度 | 当客户端 | 当服务器 | 标叔的结论 |
|---|---|---|---|
| 目的 | 用别人工具 | 暴露自己能力 | 双向都重要 |
| 配置 | addMcpServer |
McpAgent.serve |
都简单 |
| 状态 | 连接存 SQL | 每会话一个 DO | 都持久 |
注意
无状态的createMcpHandler每次请求必须new一个McpServer实例——已连接的 server 不能重复挂 transport。这是新手第二坑。
MCP 讲完。下一章把知识库/RAG 交给托管。