多租户 MCP 服务的 3 个生产经验

No_Advertising2536 · reddit · 2026-07-20

作者分享了自己在生产环境里运行 **多租户 streamable-HTTP MCP server** 的三个经验教训。 ### 1)多 worker 下,session 传输会坏掉 Python SDK 默认假设:`initialize` 落到哪个 worker,后续请求也会落到同一个 worker。但一旦 Gunicorn 开到 2 个以上 worker,这个假设就不成立,于是客户端会出现偶发失败。作者的做法是把 transport 设计成无状态,并为每个请求新建 server。 ### 2)Starlette 的路由包装会破坏 ASGI 生命周期 如果把 handler 当普通 async 函数挂载,Starlette 会用 `request_response()` 包一层,但 `transport.handle_request()` 本身就要接管 ASGI cycle,结果会出现 `TypeError` 和连接丢失。解决办法是挂载真正的 ASGI callable class。 ### 3)多租户鉴权需要按请求构造 server `StreamableHTTPSessionManager` 预设的是单一 `Server` 实例,没法方便地在每个请求里注入不同的 Bearer token。作者改成:解析鉴权头 → 按租户构建 server → 使用新的无状态 transport。 最后作者补充,这套方案已经稳定跑了几个月;产品本身是 **Mengram**,面向 agent 的长期记忆服务,约 29 个 MCP 工具,提供免费层、每月 5 美元起的付费方案、Apache 2.0 + 可自托管,并且已经进入官方 MCP registry。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →