你的 Agent 可以连接到外部 Model Context Protocol (MCP) ↗ 服务器,访问其 tool 并扩展 Agent 能力。本教程将创建一个连接到 MCP 服务器并使用其 tool 之一的 Agent。
一个具备以下端点的 Agent:
- 连接到 MCP 服务器
- 列出已连接服务器上的可用 tool
- 获取连接状态
要连接的 MCP 服务器(或使用本教程中的公开示例)。
-
使用
hello-world模板创建新的 Agent 项目:npm create cloudflare@latest -- my-mcp-client --template=cloudflare/ai/demos/hello-worldyarn create cloudflare my-mcp-client --template=cloudflare/ai/demos/hello-worldpnpm create cloudflare@latest my-mcp-client --template=cloudflare/ai/demos/hello-world -
进入项目目录:
cd my-mcp-clientAgent 已就绪!模板在
src/index.ts中包含一个最小 Agent:import { Agent, routeAgentRequest } from "agents"; export class HelloAgent extends Agent { async onRequest(request) { return new Response("Hello, Agent!", { status: 200 }); } } export default { async fetch(request, env) { return ( (await routeAgentRequest(request, env, { cors: true })) || new Response("Not found", { status: 404 }) ); }, };src/index.tsts import { Agent, routeAgentRequest } from "agents"; type Env = { HelloAgent: DurableObjectNamespace<HelloAgent>; }; export class HelloAgent extends Agent<Env> { async onRequest(request: Request): Promise<Response> { return new Response("Hello, Agent!", { status: 200 }); } } export default { async fetch(request: Request, env: Env) { return ( (await routeAgentRequest(request, env, { cors: true })) || new Response("Not found", { status: 404 }) ); }, } satisfies ExportedHandler<Env>;
-
添加连接到 MCP 服务器的端点。在
src/index.ts中更新 Agent 类:export class HelloAgent extends Agent { async onRequest(request) { const url = new URL(request.url); // Connect to an MCP server if (url.pathname.endsWith("add-mcp") && request.method === "POST") { const { serverUrl, name } = await request.json(); const { id, authUrl } = await this.addMcpServer(name, serverUrl); if (authUrl) { // OAuth required - return auth URL return new Response(JSON.stringify({ serverId: id, authUrl }), { headers: { "Content-Type": "application/json" }, }); } return new Response( JSON.stringify({ serverId: id, status: "connected" }), { headers: { "Content-Type": "application/json" } }, ); } return new Response("Not found", { status: 404 }); } }src/index.tsts export class HelloAgent extends Agent<Env> { async onRequest(request: Request): Promise<Response> { const url = new URL(request.url); // Connect to an MCP server if (url.pathname.endsWith("add-mcp") && request.method === "POST") { const { serverUrl, name } = (await request.json()) as { serverUrl: string; name: string; }; const { id, authUrl } = await this.addMcpServer(name, serverUrl); if (authUrl) { // OAuth required - return auth URL return new Response( JSON.stringify({ serverId: id, authUrl }), { headers: { "Content-Type": "application/json" } }, ); } return new Response( JSON.stringify({ serverId: id, status: "connected" }), { headers: { "Content-Type": "application/json" } }, ); } return new Response("Not found", { status: 404 }); } }
addMcpServer() 方法连接到 MCP 服务器。若服务器需要 OAuth 认证,会返回 authUrl,用户需访问该 URL 完成授权。
-
启动开发服务器:
npm start -
在新终端中连接到 MCP 服务器(使用公开示例):
curl -X POST http://localhost:8788/agents/hello-agent/default/add-mcp \ -H "Content-Type: application/json" \ -d '{ "serverUrl": "https://docs.mcp.cloudflare.com/mcp", "name": "Example Server" }'应看到包含服务器 ID 的响应:
{ "serverId": "example-server-id", "status": "connected" }
-
添加端点以查看已连接服务器上的可用 tool:
export class HelloAgent extends Agent { async onRequest(request) { const url = new URL(request.url); // ... previous add-mcp endpoint ... // List MCP state (servers, tools, etc) if (url.pathname.endsWith("mcp-state") && request.method === "GET") { const mcpState = this.getMcpServers(); return Response.json(mcpState); } return new Response("Not found", { status: 404 }); } }src/index.tsts export class HelloAgent extends Agent<Env> { async onRequest(request: Request): Promise<Response> { const url = new URL(request.url); // ... previous add-mcp endpoint ... // List MCP state (servers, tools, etc) if (url.pathname.endsWith("mcp-state") && request.method === "GET") { const mcpState = this.getMcpServers(); return Response.json(mcpState); } return new Response("Not found", { status: 404 }); } } -
测试:
curl http://localhost:8788/agents/hello-agent/default/mcp-state将看到所有已连接服务器、其连接状态及可用 tool:
{ "servers": { "example-server-id": { "name": "Example Server", "state": "ready", "server_url": "https://docs.mcp.cloudflare.com/mcp", ... } }, "tools": [ { "name": "add", "description": "Add two numbers", "serverId": "example-server-id", ... } ] }
你创建了一个可以:
- 动态连接到外部 MCP 服务器
- 在需要时处理 OAuth 认证流程
- 列出所有已连接服务器的可用 tool
- 监控连接状态
连接持久化在 Agent 的 SQL 存储 中,因此在多次请求间保持活跃。
处理 OAuth 流程
配置 OAuth 回调与错误处理。
MCP Client API
MCP 客户端完整 API 文档。