统一端点
此端点提供对所有已启用的 MCP 服务器的访问。- 端点:
http://localhost:3000/mcp - 方法:
POST
特定群组的端点
要定向访问特定的服务器群组,请使用基于群组的 HTTP 端点。- 端点:
http://localhost:3000/mcp/{group} - 方法:
POST - 参数:
{group}: 群组的 ID 或名称。
特定服务器的端点
要直接访问单个服务器,请使用特定于服务器的 HTTP 端点。- 端点:
http://localhost:3000/mcp/{server} - 方法:
POST - 参数:
{server}: 服务器的名称。
注意: 如果服务器名称和群组名称相同,则群组将优先。
协议兼容矩阵
同一个/mcp URL 同时服务旧版 2025-11-25 和新版 2026-07-28 客户端。
群组和服务器端点使用相同的协议处理方式。仅将 URL 从 /sse 改成 /mcp,
不会自动升级客户端的协议版本。
MCP Apps 透传还取决于请求路由和可见的上游服务器;
$smart 路由仍按普通 MCP
路由处理。参见 MCP Apps。上游 Streamable HTTP 默认自动协商:先探测 server/discover,支持时使用
2026-07-28 无状态 HTTP,否则按 SDK 规则回退旧版握手。
上下游协议互相独立。服务器配置中的 protocolNegotiation: "legacy" 可跳过探测。
stdio 和旧 SSE 上游继续使用旧版协商。
工具调用、prompt 获取和资源读取之前也会重验证对应列表,使新增和删除项及时影响路由。
资源模板按需获取。刷新失败只在当前请求中排除该上游,健康上游和内置内容仍可用;
部分列表返回零 TTL,后续请求会重试失败的上游。
不增加后台轮询;没有相关请求时不会刷新列表。共享列表刷新后若发生变化,会通知已连接的
旧版下游客户端;个人列表仍限定在各自运行时中。上游发现继续保留单页行为,带
nextCursor 的响应不提供正 TTL。
配置 passthroughHeaders 的新版上游使用请求内独立客户端和快照,即使 TTL 为正或请求头
缺失,也不跨请求共享列表或刷新任务。每次相关请求增加一次 discovery 往返;个性化快照
不更新全局描述、向量索引或列表变更广播。
自动协商不意味着所有错误都回退:HTTP 探测超时、网络故障和认证错误可能导致连接失败。
详见上游协议协商配置。
Elicitation 转发
旧协议客户端调用工具时,若上游服务器启用了perSessionClient: true,MCPHub 会转发
form 和 URL 模式的 elicitation/create 请求。独立连接只声明下游客户端支持的模式;
旧式空能力 elicitation: {} 仅表示支持 form。accept、decline 和 cancel 响应原样返回
上游,URL 完成通知仅发送给所属下游会话。普通工具调用和智能路由的 call_tool 均支持。
旧协议没有可移植的父调用标识,因此同一会话内、启用 elicitation 的上游连接会串行执行
工具调用;不同会话使用不同连接。取消调用、结束会话或超时会中止等待中的交互。请求
抛出异常时会丢弃上游连接,不自动重放调用;下次调用重新连接,上游会话状态需要重新
建立。正常返回的 isError 工具响应仍按原样交付。
首期不支持共享上游连接、个人凭据/OAuth 运行时、提示词或资源操作,也不支持新版
2026-07-28 多轮 elicitation;这些路径不会声明 elicitation 能力。
新版客户端即使携带 X-MCPHub-State-Id 也不会启用 elicitation。
form 模式用于普通结构化输入。密码、API Key 和访问令牌必须使用 URL 模式,在上游
服务页面收集,不能通过 MCP 表单传递。交互界面由连接的 MCP 客户端提供,MCPHub
不会新增控制台输入弹窗。
客户端迁移
- 将旧 SSE 客户端传输改为 HTTP 传输,将
/sse改为/mcp,保留原有群组、 服务器或用户路由范围,以及 Bearer 凭据。旧版 HTTP 客户端可以先完成传输迁移, 继续使用原有初始化和会话生命周期。 - 要采用
2026-07-28,需使用支持新版 HTTP 发现机制及逐请求元数据的客户端。 SDK v2 HTTP 客户端会自动设置协议和路由请求头。自定义客户端需发送常规 JSON-RPC 请求体,将params._meta["io.modelcontextprotocol/protocolVersion"]设为2026-07-28,并在params._meta["io.modelcontextprotocol/clientCapabilities"]中声明客户端能力。 同时发送一致的MCP-Protocol-Version和Mcp-Method请求头;tools/call和prompts/get需要与params.name一致的Mcp-Name,resources/read则需要与params.uri一致。工具名称应使用该路由列表响应中的名称。 - 使用
perSessionClient或 OpenAPIcookieSession工具时,为每个独立工作流 生成 UUID v4,并通过工具调用的X-MCPHub-State-Id请求头发送。无法设置该 扩展的已认证 OpenAI/ChatGPT 工具调用,在显式请求头缺失时也可复用客户端声明的_meta["openai/session"]会话提示。MCPHub 会先对该提示做哈希;它只用于状态 关联,不用于认证。显式状态请求头一旦存在但非法,将直接失败而不会回退。无状态 工具无需这两个值。只有相同 Bearer 凭据、用户和路由才能复用状态。状态仅保存在 当前进程中,闲置 30 分钟后过期,多副本部署需要粘性路由。进程重启、状态过期或 凭据、路由变化后需要重新建立应用状态。参见 显式状态配置。 - 使用实际权限验证工具列表和调用,再验证所用的资源读取及 MCP Apps 功能。
新版 Apps 宿主需在每次请求中声明 UI 能力。新版调用不依赖
Mcp-Session-Id或enableSessionRebuild,这两者仍属于旧版机制。
缓存行为
现代列表把上游发现快照与实时配置、权限和每次请求的客户端能力组合起来。 正向提示始终为私有,取所有上游剩余新鲜时间的最小值,并受最长 5 秒的投影 窗口限制。保留发现快照的年龄,重复网关列表请求不会续期;空上游列表也参与 计算。缺失/无效 TTL、未完整分页、失败或不完整的发现、网关生成的智能路由 条目、内置提示词/资源,以及无法确定新鲜度的托管权限均使用零 TTL。 每个请求重新生成投影。投影期间检测到配置、成员、权限或运行时变更时归零。 列表刷新在等待新响应之前撤销旧快照的新鲜度;失败、断连或替换不能建立新的 新鲜度。资源模板列表使用该请求实际获取的响应。不增加网关响应缓存。 本地配置/权限改变后,客户端可能继续保留已获得的列表最多 5 秒,服务端失效 不能撤回客户端缓存。缓存必须按端点、认证身份和每次请求的客户端能力隔离。 缓存列表不代表调用权限:MCPHub 在每个请求上重新检查访问权。上游无法提供 可信新鲜度时使用零 TTL。 现代资源读取仍绕过 SDK 响应缓存,从有效上游 TTL 扣除处理耗时,并限制为 请求认证上下文内的私有共享。缺失/无效 TTL、内置资源和网关生成的读取错误 均使用零。旧版响应形状和会话行为保持不变。旧版 SSE 弃用计划
公开通知随包含本计划的下一次版本发布。发布说明必须记录实际通知日期 N 和最早可移除日期 N 加 12 个日历月。本页面和 ADR 不构成更早的 通知日期。在该发布说明发布之前,通知日期和移除日期均未公布。 计划在达到上述日期且满足下方迁移就绪条件后的第一个主版本中移除 SSE。 条件未满足时延后移除并公布调整后的目标,不缩短通知窗口。至少提前 90 天 公布确切的目标版本和日期,提前 30 天再次提醒,每次公告附迁移说明。 实际移除必须通过独立代码评审。保留路由范围和认证
部署配置了基础路径时,为下表所有 URL 加上该前缀。建议使用分组 ID; 保留原来的路由标识以及 bearer 请求头名称和值。分组名与服务器名相同时, 分组优先。
同时保留
$smart/{group} 等智能路由后缀。SSE 客户端使用服务端公布的
消息 URL 和会话查询参数;不要把消息 URL 转换成 HTTP 新端点。替换连接
URL,让 HTTP transport 管理后续请求。
先独立迁移传输方式,再考虑升级协议。例如使用旧版 TypeScript SDK
(@modelcontextprotocol/sdk 1.29.0,与 MCPHub 独立兼容性测试一致):
Mcp-Session-Id 生命周期。有状态工具仍按会话
隔离,单纯迁移传输方式不需要 X-MCPHub-State-Id。现代协议发现和显式
状态是上文描述的独立升级。SSE 会话 ID 不能跨传输方式复用:建立新的
HTTP 工作流,重新执行登录或工具初始化。
就绪条件和移除边界
公布确切移除目标之前,维护者必须记录:- 包含公开通知的版本、实际发布日期,以及移除时已满 12 个日历月的依据。
- 整个窗口内旧版 SSE 和 Streamable HTTP 兼容性测试持续通过,覆盖认证后的 全局、分组、服务器和用户路由,会话续接/重建及有状态工具隔离。
- 每个文档列出的客户端集成的迁移清单:HTTP transport、保留路由/认证、 列表和调用成功,以及实际使用的资源、Apps 或有状态工作流。记录测试版本 和未解决阻碍;阻碍发布的迁移缺陷必须为零。可补充部署者确认,不能把 缺少遥测当作无人使用 SSE 的证据。
- 中英双语发布说明和文档、提前 90 天和 30 天的提醒,以及仍使用 SSE 的 部署的支持渠道。
handleSseConnection、
handleSseMessage、SSE transport 创建以及 SSE 专用测试/导入。删除共享
辅助函数前必须检查所有调用方。保留 /mcp POST/GET/DELETE、旧版 HTTP
初始化、会话映射与清理、创建/重建锁、bearer/分组认证、perSessionClient
隔离、OpenAPI cookie jar 和现代显式状态。server-legacy 还提供共享的
旧版 HTTP/OAuth 功能,不能仅因 SSE 退役就删除该依赖。
本计划由 #1272 跟踪。
发布通知的版本必须建立独立移除任务,记录实际日期、客户端清单和删除清单。
旧版 2025-11-25 Streamable HTTP 支持独立保留。