跳转至

实施计划

  1. 将运行时 serve 依赖扩展为一种与传输无关的工厂,允许异步绑定。startMcpTransport 会等待该工厂,将服务器 logger 传入,并继续默认使用 stdio;关闭句柄类型将不再带有 stdio 名称。
  2. 新增 src/server/http/nodeHttpBridge.ts,用于将 IncomingMessage 转换为 web Request(包括 headers、流式 body、客户端关闭时中止),并将 web Response 通过已刷新的 headers 写回;同时新增 src/server/http/serveStreamableHttp.ts,为每个会话管理一个 McpServer 实例和一个有状态 transport,会话由 DELETE 结束,或被下一个客户端的 initialize 替换,且不会触发该实例的 shutdown hooks;此外还提供普通路由、loopback Host 校验、监听日志行和幂等关闭。类型化的 listen 错误位于独立模块中,因此 stdio 入口永远不会加载该监听器。
  3. 在 src/main/mcpHttpArguments.ts 中基于同一个 schema 解析 --http、--host 和 --port,该 schema 同时负责渲染帮助信息;在 src/config/mcpHttpEndpoint.ts 中将 MCP_HOST/MCP_PORT 解析为 Result,该结果会标识被拒绝的设置项,但不会包含其值。
  4. 当 mcp 入口包含 --http 时,将 dispatcher 路由到 runMcpHttpEntrypoint;在 src/main.ts 中通过共享的 run() 路径组合 HTTP 依赖,使 configuration、session、providers 和 shutdown 保持公共。
  5. 仅针对 HTTP 模式通过 registerSignalShutdown 注册信号处理;它是 registerProcessShutdown 在去除 stdin 后的投影,会在幂等 shutdown 运行前设置信号退出状态;stdio 则保留其 stdin 结束/关闭触发逻辑。
  6. 在 docs/mcp-contracts.md 和 docs/cli.md 中记录该 transport,重新标注架构图,并在每个边界覆盖适配器(adapters)、dispatcher、mcp-boundary 和 process-boundary 测试,外加一次 Python SDK 客户端交互。

不会引入任何新依赖:transport、Host 校验和 body 上限均来自已锁定的 @modelcontextprotocol/server 根导出。Tool 契约、catalog 摘要、response 预算和 stdio 行为均保持不变。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea