README
🚀 SSE + MCP 服务器 + Durable Objects
本项目包含三个核心部分,与 @modelcontextprotocol/typescript-sdk 配合使用,为你提供了一个高效的运行环境:
- 一个 SSE 传输层,位于
/src/sse.ts,可与@modelcontextprotocol/typescript-sdk协同工作。 - 一个作为 Durable Object 的 MCP 服务器,位于
/src/mcp-server-do.ts。 - 提供了端到端的运行步骤,方便你快速上手。
🚀 快速开始
运行步骤
- 克隆仓库:将此仓库克隆到本地。
- 安装依赖:在项目根目录下,运行
npm install命令,安装所需的依赖。 - 启动 DO:执行
npm start命令,启动 Durable Object。启动后,可通过http://localhost:8787访问。 - 运行 MCP Inspector:使用
npx @modelcontextprotocol/inspector命令运行 MCP Inspector。 - 打开 Inspector:打开 Inspector 后,输入
http://localhost:8787/sse。
💻 使用示例
基础用法
我从 这个示例 中获取灵感,该示例来自 @modelcontextprotocol/typescript-sdk:
import express from "express";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
const server = new McpServer({
name: "example-server",
version: "1.0.0"
});
// ... 设置服务器资源、工具和提示 ...
const app = express();
app.get("/sse", async (req, res) => {
const transport = new SSEServerTransport("/messages", res);
await server.connect(transport);
});
app.post("/messages", async (req, res) => {
// 注意:要支持多个同时连接,这些消息需要路由到特定的传输。由于简单起见,此处未实现此逻辑。
await transport.handlePostMessage(req, res);
});
app.listen(3001);
高级用法
参考上述示例,我将其实现为 Durable Objects 中的内容。但首先需要一个在 Workers 上运行的传输层。参考 sse.ts 来自 @modelcontextprotocol/typescript-sdk,我实现了一个类似的版本,尽量模仿现有代码的结构和功能。需要注意的是,SDK 中有一些与 Node.js 的 http 模块耦合较深的设计假设,这些假设会泄漏到 SSE 传输层及其输入类型中——但其实唯一有意义的接口变化是 handlePostMessage 接受请求并返回响应。看起来有一种巧妙的方法可以将其上游化?
📚 详细文档
本项目的灵感来源于 @modelcontextprotocol/typescript-sdk 中的 这个示例。在实现过程中,参考了 sse.ts 来自 @modelcontextprotocol/typescript-sdk,并将其实现为 Durable Objects 中的内容。同时,需要注意 SDK 中与 Node.js 的 http 模块耦合较深的设计假设对 SSE 传输层及其输入类型的影响。
微信扫一扫