TRANSMISSION · 005 · CODE · 2025.03.21 · 2 MIN
第 005 期 · 代码 · 2025 年 3 月 21 日 · 阅读约 2 分钟
Edge MCP 实战:在 Serverless 环境下构建高可用 AI 上下文服务
为什么我们需要 Edge MCP?
Momo
作者 · AUTHOR
自从 Anthropic 推出 MCP (Model Context Protocol) 以来,给大模型接入外部数据源变得前所未有地简单。但如果你完整跟做过官方教程,大概率会发现一个问题:官方示例大多基于本地 stdio(标准输入输出)运行。
本地跑跑 Demo 固然爽,但当你想要把这个 MCP Server 开放给团队使用,或者集成到生产环境的云端应用时,stdio 就显得力不从心了。
今天这篇博客,我们将探讨如何打破本地环境的物理隔离,在 Serverless 环境(以 Cloudflare Workers 为例)中构建一个基于 HTTP/SSE 的高可用 Edge MCP Server,并让大模型能够安全地查询云端的 D1 数据库。
标准的本地 MCP 通常作为大模型客户端(如 Claude Desktop)的子进程启动,通过控制台的输入输出进行通信。这种模式有几个致命痛点:
- 无法共享: 你的同事无法通过他们的 Claude 客户端访问你本地的数据库。
- 状态与环境绑定: 每次环境迁移都需要重新配置 Node.js 或 Python 环境。
- 云原生割裂: 现代 Web 应用大多跑在云端,让大模型通过本地进程去连接生产环境的 VPC 或数据库,既不安全也不优雅。
解决方案就是:HTTP + SSE (Server-Sent Events) 协议。
通过将传输层(Transport Layer)从 stdio 替换为 HTTP/SSE,我们可以将 MCP Server 部署到无状态的 Serverless 边缘节点上。这意味着你的 MCP Server 将具备极致的弹性扩缩容能力,并且可以通过标准的 API 鉴权进行保护。
初始化 Server 与 Tools
首先,我们需要定义 MCP Server 的基本信息,以及它能提供哪些“工具”。在这个例子中,我们定义了一个查询用户统计数据的工具。
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
// 初始化 Server
const server = new Server(
{ name: "cloudflare-edge-mcp", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
// 注册可用的 Tools
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_user_stats",
description: "查询指定用户的核心业务数据统计",
inputSchema: {
type: "object",
properties: {
userId: { type: "string", description: "用户的唯一 ID" }
},
required: ["userId"]
}
}
]
};
});
评论 000 ECHOES
还没有留言,做第一个吧。