简单来说,WebMCP 是 MCP 协议向 Web 生态和云原生架构演进的必然产物。早期的 MCP 主要聚焦于本地开发场景(通过 stdio 管道实现本地 AI 客户端与本地工具的通信),而 WebMCP 则全面拥抱了浏览器环境、Web 标准 API(如 Fetch、WebSocket、SSE)以及云端微服务架构。
下面我们来详细拆解 WebMCP 的核心概念、与传统 MCP 的区别,以及具体的实现方案。
一、 什么是 WebMCP?
WebMCP 是基于 Web 技术栈实现的、面向浏览器及云端分布式环境的模型上下文协议。它打破了传统 MCP "只能作为本地子进程运行"的局限,让 AI Agent 可以通过标准的网络协议,跨越地理限制,安全地连接到远程的知识库、API 数据库和执行环境中。
传统 MCP vs WebMCP
| 特征 | 传统 MCP (Local-first) | WebMCP (Web & Cloud-first) |
|---|---|---|
| 主要传输介质 | stdio (标准输入输出) |
HTTP / SSE (Server-Sent Events) / WebSockets |
| 运行环境 | 本地机器(如 Cursor、Claude Desktop 本地运行) | 浏览器端(Edge/Chrome 扩展、Web App)或远程云端 |
| 部署模式 | 随客户端启动的本地子进程 | 独立部署的微服务、Serverless 函数、Edge Functions |
| 认证机制 | 依赖本地操作系统权限 | 依赖标准的 Web 认证(OAuth2, JWT, API Keys) |
| 高并发支持 | 较差(一对一绑定) | 极佳(利用 Web 服务器的多路复用和负载均衡) |
二、 WebMCP 的核心架构与通信流程
WebMCP 的核心依旧围绕 Resources(资源) 、Tools(工具) 和 Prompts(提示词) 三大支柱,但其通信架构彻底转变为 Client-Server 网络架构。
在 WebMCP 中,最主流的传输方案是 SSE (Server-Sent Events) + HTTP POST。
标准通信流程:
- 建立连接 (SSE): WebMCP Client(例如一个网页端 AI 聊天应用)向 WebMCP Server 发起一个标准的 HTTP GET 请求,建立一条持久的 SSE 连接。Server 通过这条通道向 Client 异步推送数据(或保持心跳)。
- 能力发现 (Discovery): 建立连接后,Client 会通过该通道获取 Server 暴露出来的所有 Tools 和 Resources 列表。
- 工具调用 (Tool Call): 当大模型决定调用某个工具时,Client 向 Server 发送一个标准的 HTTP POST 请求,携带 JSON-RPC 2.0 格式的参数。
- 结果返回: Server 执行完具体的业务逻辑(如查询数据库或调用第三方 API)后,将结果通过 HTTP 响应或 SSE 通道异步返回给 Client。
三、 WebMCP 的具体实现方案
落地一套 WebMCP 系统,通常需要考虑跨域(CORS) 、身份认证(Auth)以及异步通信 。以下是基于 TypeScript/JavaScript(Node.js/Bun 环境) 实现一个云端 WebMCP 服务的完整方案。
1. 服务端实现:构建一个 WebMCP Server
我们可以使用 MCP 官方提供的 @modelcontextprotocol/sdk,结合 Express 或 Hono 来构建一个支持 SSE 的 WebMCP 服务端。
第一步:安装核心依赖
bash
npm install @modelcontextprotocol/sdk express cors
npm install --save-dev @types/express @types/cors
第二步:编写 Server 代码 (webmcp_server.ts)
typescript
import express from 'express';
import cors from 'cors';
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
const app = express();
app.use(cors()); // WebMCP 必须处理跨域问题
app.use(express.json());
// 1. 初始化 MCP 核心服务实例
const mcpServer = new Server(
{ name: "cloud-weather-server", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
// 2. 注册可用的工具 (Tools)
mcpServer.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [{
name: "get_cloud_weather",
description: "获取指定城市的实时天气数据(云端 API 版)",
inputSchema: {
type: "object",
properties: {
city: { type: "string", description: "城市名称,如 Beijing, Tokyo" }
},
required: ["city"]
}
}]
};
});
// 3. 处理工具的实际执行逻辑
mcpServer.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_cloud_weather") {
const city = request.params.arguments?.city as string;
// 这里可以接入真实的第三方天气 API
return {
content: [{ type: "text", text: `【云端同步】${city} 当前天气:晴,25°C,适合户外活动。` }]
};
}
throw new Error("工具未找到");
});
// 4. 暴露给 WebMCP Client 的标准的 SSE 终结点 (Endpoint)
let transport: SSEServerTransport | null = null;
app.get('/sse', async (req, res) => {
// 创建一个基于 SSE 的传输层,并将响应对象传递给它
transport = new SSEServerTransport('/messages', res);
await mcpServer.connect(transport);
});
// 5. 接收 Client 发送的 JSON-RPC 消息
app.post('/messages', async (req, res) => {
if (transport) {
await transport.handleMessage(req, res, req.body);
} else {
res.status(500).send("SSE 连接尚未建立");
}
});
// 启动 WebMCP 服务
const PORT = 3011;
app.listen(PORT, () => {
console.log(`WebMCP Server 正在运行在 http://localhost:${PORT}`);
console.log(`SSE 终结点: http://localhost:${PORT}/sse`);
console.log(`消息接收点: http://localhost:${PORT}/messages`);
});
2. 客户端实现:在前端或 Web App 中接入
在浏览器端(如 React/Vue 应用或 Chrome 插件)中,你可以使用 SSEClientTransport 来连接刚才创建的远程 Server:
typescript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
async function connectToWebMCP() {
// 创建 WebMCP 客户端传输层,指向远程服务器的 SSE 接口
const transport = new SSEClientTransport(new URL("http://localhost:3011/sse"));
const client = new Client({ name: "my-web-agent", version: "1.0.0" });
await client.connect(transport);
console.log("成功连接到远程 WebMCP 服务器!");
// 列出云端服务器支持的所有工具
const tools = await client.listTools();
console.log("可用云端工具列表:", tools);
// 调用云端工具
const result = await client.callTool({
name: "get_cloud_weather",
arguments: { city: "Shanghai" }
});
console.log("执行结果:", result);
}
四、 WebMCP 的核心应用场景
- SaaS 产品的 AI 插件系统: 如果你经营一家 SaaS 公司(如 CRM 或项目管理工具),你可以将自己的核心 API 封装成 WebMCP Server 部署在云端。任何支持 WebMCP 的第三方 AI Agent 客户端(如 Cursor、Vercel AI SDK 驱动的应用)在获得用户授权后,都能直接免密或通过 OAuth 接入你的 SaaS 数据。
- 低代码/无代码 Agent 编排: 在云端将不同的 WebMCP Server 像积木一样拼接。一个 Server 提供数据库查询,一个提供 Web 搜索,一个提供代码执行沙箱,AI Agent 通过统一的 WebMCP 协议在云端调度它们。
- 企业级微服务网关(BFF for AI): 在企业内部,将传统的 RESTful API 网关改造为 WebMCP 网关。对内连接各个微服务,对外为大模型提供统一的、带有安全审计和流量限制的 Function Calling 接口。
五、 总结与专家建议
WebMCP 的出现,标志着 AI Agent 的生态正在从"单机玩具"走向"云端分布式大协同"。
在实际落地 WebMCP 方案时,建议重点关注以下两点:
- 安全性与隔离: 由于 WebMCP 暴露在公网上,必须引入严格的 API Gateway 鉴权(如 JWT 验证) 和 速率限制(Rate Limiting),防止大模型在遭遇 Prompt 注入攻击时,被恶意利用去无限次调用你的付费云端 API。
- 状态管理: Web 环境是天然无状态(Stateless)的,而 Agent 的思考过程是有上下文的。设计 WebMCP 系统时,合理利用
sessionId在中间件中维护会话状态,能让远程工具的执行更加精准。