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