Cloudflare Agents 从入门到精通
附录

§17 用 MCP 把能力接到外部世界

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 交给托管。