本项目参考实现展示了如何在 Cloudflare Workers 环境中,借助 WebSocket 协议对 Model Context Protocol (MCP) 进行扩展。通过该实现,能够很好地支持高频交易、实时协作环境以及需要快速响应的交互式代理等实时通信场景。
本项目主要介绍了如何在 Cloudflare Workers 环境下,利用 WebSocket 协议扩展 MCP,以支持实时通信场景。你可以参考项目中的代码示例,快速搭建起自己的 MCP WebSocket 应用。
type、id、method、params、timestamp 等字段。文档未提供具体安装步骤,可参考项目中的代码示例进行开发。
import { MCPClient } from '@modelcontextprotocol/typescript-sdk';
// 创建 WebSocket 传输层
class WebSocketTransport implements MCPTransport {
private ws: WebSocket;
private pendingRequests: Map<string, { resolve: (result: any) => void, reject: (error: any) => void}>;
constructor(serverUrl: string, agentId: string) {
this.ws = new WebSocket(`${serverUrl}/agent/${agentId}/websocket`);
this.pendingRequests = new Map();
this.ws.addEventListener('message', this.handleMessage.bind(this));
}
async send(method: string, params: any): Promise<any> {
return new Promise((resolve, reject) => {
const requestId = crypto.randomUUID();
this.pendingRequests.set(requestId, { resolve, reject });
this.ws.send(JSON.stringify({
type: 'mcp_request',
request: { method, params },
requestId
}));
});
}
private handleMessage(event: MessageEvent) {
const message = JSON.parse(event.data);
if (message.type === 'mcp_response' && message.requestId) {
const pending = this.pendingRequests.get(message.requestId);
if (pending) {
pending.resolve(message.result);
this.pendingRequests.delete(message.requestId);
}
}
}
}
// 使用传输与 MCP 客户端连接
const transport = new WebSocketTransport('wss://example.com', 'agent-123');
const client = new MCPClient({ transport });
// 调用 MCP 方法如同普通情况
const result = await client.invoke('add', { a: 5, b: 3 });
class WebSocketHandler {
private ws: WebSocket;
constructor(private readonly agentId: string) {}
async handleRequest(request: Request): Promise<Response> {
const response = new Response(null, {
status: 101,
webSocket: await this.upgradeToWebSocket(request)
});
return response;
}
private upgradeToWebSocket(request: Request): Promise<WebSocket> {
// 实现 WebSocket 升级逻辑
// 返回新的 WebSocket 连接实例
}
}
.
├── src/
│ ├── mcp-websocket.ts # WebSocket 运输层实现
│ └── mcp-client.ts # MCP 客户端扩展
└── README.md # 项目文档
每个 WebSocket 消息包含以下字段:
| 属性 | 详情 |
|---|---|
type |
消息类型(request/response) |
id |
唯一请求标识符 |
method |
MCP 方法名称 |
params |
请求参数 |
timestamp |
时间戳 |
本项目在实现过程中,主要围绕 WebSocket 协议在 Cloudflare Workers 环境下对 MCP 进行扩展。核心技术点包括使用 Cloudflare Workers 的原生 WebSocket 支持、集成到现有的 MCP 客户端架构中、实现双向通信协议、使用 Durable Objects 进行状态管理等。通过这些技术手段,实现了实时通信、流式数据处理、心跳检测等功能,同时解决了状态管理复杂度、消息可靠性和错误处理等挑战。
本项目遵循 MIT 协议。
Copyright (c) 2023 Your Name.