Skip to main content
MCP 在 2026-07-28 的修订中对协议进行了重大更改。因此,Inspector 将协议时代(传统版或现代版,即该修订之前或自该修订起)视为一项一等的、按服务器设置的配置,并将其与传输方式正交处理:同一个 HTTP URL 可以作为传统版服务器或现代版服务器进行检查。根据当前所采用的协议时代,多个选项卡会呈现出有意义差异的 UI 和流量。

Protocol Era 设置

每个服务器都具有 legacy、auto 或 modern 三种状态之一的 protocolEra。在 Web 客户端中,它位于 服务器设置;在目录或配置文件中,它是 protocolEra 字段;CLI 和 TUI 从同一个文件读取该值,而它们的 --protocol-era <legacy|auto|modern> 标志可以为单次运行覆盖该值。
为什么默认值是 legacy,而不是 auto。 调试工具不应自动探测。对无响应的旧版 stdio 服务器进行 server/discover 探测会一直停滞,而且会污染你来此查看的记录会话。选择 auto 或 modern 是一个有意的操作,因此你在协议选项卡中看到的内容,就是服务器在客户端按照你所配置的方式运行时所看到的内容。
连接后,协商出的状态会作为徽章显示在协议选项卡的“消息”标题和 连接信息 中。在现代连接上,server/discover 还会提供 capabilities(包括 extensions)、instructions 以及 supportedVersions 列表。服务器的名称和版本会出现在结果 _meta 下的 io.modelcontextprotocol/serverInfo 中。

服务器设置:Protocol Era 选择器,包含全部三种选项。

在本地复现各个时代

下面的每个部分末尾都包含一个 使用……复现 的指引,指向 Inspector 仓库中随附的某个 可组合测试服务器 的 JSON 配置。克隆仓库并构建测试服务器:
然后在仓库根目录中,从某个部分指定的配置启动服务器:
服务器会将 URL 打印到 stderr。如果配置中的端口已被占用,它会绑定下一个空闲端口,因此应使用打印出的 URL,不要假定端口未发生变化。将该 URL 添加为 Inspector 中的服务器,并选择该部分指定的协议时代。

日志

日志是会话范围的。客户端发送一次 logging/setLevel,在该会话的剩余时间内,服务器会发出达到该级别或更高级别的 notifications/message。日志选项卡显示一个设置活动级别选择器和一个设置按钮。选择级别,点击“设置”,之后的服务器日志就会流入面板。使用 test-servers/configs/logging-legacy-http.json 重现。

旧版:日志选项卡提供了一个会话范围的“设置活动级别”控件,调用 send_notification 后会收到一条日志。

现代版:同一选项卡改为提供“每个请求的日志级别”。该级别会添加到每个发出的请求上,并且日志会随该请求的流传输。


资源订阅

点击资源上的 订阅 会发送 resources/subscribe。订阅部分会列出 URI,不显示流控件。当资源发生变化时,服务器会发出 notifications/resources/updated,并为已订阅磁贴标记最近更新时间。使用 test-servers/configs/subscriptions-legacy-http.json 进行复现,该配置还提供了一个 update_resource 工具,因此你可以自行驱动通知往返流程。

一个现代版订阅:订阅部分带有 LISTENING 流状态徽章,而旧版订阅无需此徽章。


任务

任务在不同协议时代之间变化最大,包括 Inspector UI 标签页如何受控。
当服务器声明 capabilities.tasks 时,会显示 任务 标签页。启用 作为任务运行 后运行工具,该标签页会列出该工具,通过 tasks/list 填充列表,并使用 tasks/get 进行轮询。已完成的负载通过阻塞式 tasks/result获取,而取消操作会发送 tasks/cancel。使用 test-servers/configs/tasks-legacy-http.json 复现。

旧版:任务标签页通过 tasks/list 填充,负载通过阻塞式 tasks/result 获取。

现代版:客户端轮询其已持有句柄对应的 tasks/get,已完成的任务会内联其结果;请注意完整任务对象中的 resultType: complete。


多轮工具结果(MRTR)

在现代时代,工具可以返回 input_required 而不是最终结果,并嵌入一个 elicitation、sampling 请求,或 roots/list 请求。客户端回答该嵌入请求后,会在新的 JSON-RPC id 下重试 tools/call,直到调用达到 complete 状态。 Inspector 手动驱动 MRTR,因此每一轮都会暂停在标记为 input_required 的待处理请求模态框中,等待你回答。Protocol 视图会将整个交互归为一个 MRTR 会话,而不是彼此无关的调用。 test-servers/configs/mrtr-showcase-http.json 将现代服务器中的所有形态集中在一起:
旧版的服务器调用 server.elicitInput 的模式(测试服务器中的 collect_elicitation 预设)在 2026-07-28 的连接上会报错,因为此时不允许服务器向客户端发送请求。MRTR 是其现代替代方案。

一个 MRTR 轮次暂停在标记为 input_required 的待处理请求模态框中。回答后会重试原始请求。

mrtr_confirm 完成后监控侧栏的协议选项卡。两轮 tools/call 都位于同一个 MRTR 会话中,第一轮标记为 input_required,第二轮标记为 complete;无关流量则位于会话之外。


工具:镜像请求头和排除的工具

SEP-2243 允许工具使用 x-mcp-header 标注参数,请求 Streamable HTTP 客户端将该参数的值镜像到 Mcp-Param-* 请求头中。 Inspector 会在 工具 标签页中展示该契约的两部分:
  • 带有有效标注的工具,会在其详情面板中显示 “镜像请求头(SEP-2243)” 部分,例如 city -> Mcp-Param-City。
  • 带有无效标注的工具(例如请求头名称为 "Bad Header",其中的空格使其成为无效的 RFC 9110 token)会在侧边栏的 “已排除(SEP-2243)” 分隔线下以删除线显示,悬停时可查看原因。符合规范的客户端必须从 tools/list 中删除此类工具;Inspector 会显示工具被删除的原因,而不是静默地将其隐藏。
使用 test-servers/configs/xmcpheader-modern-http.json 重现。
在现代连接中,Inspector 会在三个客户端中自行将 x-mcp-header 参数镜像到 Mcp-Param-* 请求头。在 Web 客户端中,请求头由发出上游请求的 Inspector Node 后端添加,因此即使浏览器不会发送这些请求头,它们仍会到达服务器。

get_weather 显示其镜像的 city -> Mcp-Param-City 请求头,Network 侧栏确认调用携带了 mcp-param-city: Boston;invalid_header_tool 则在“已排除(SEP-2243)”分隔线下以删除线显示。

-32602 错误面板

返回 -32602 的 tools/call 在两个时代都会以独立的错误面板呈现:
  • 未知工具:当消息中指定的工具未被服务器列出时。调用服务器 tools/list 中不存在的任意名称即可重现。
  • 无效参数:其他任何 -32602 错误。使用上述配置中的 trigger_invalid_params 工具即可重现。
这两种情况共用一个错误码,因此 Inspector 会读取消息来区分它们。其他错误码则会呈现为通用失败。

网络与协议:标头和错误分类

现代规范统一了一组 Mcp-* HTTP 标头,并引入了更丰富的 JSON-RPC 错误分类(SEP-2243 / SEP-2575)。两个监控选项卡分工如下:
  • 网络选项卡是 HTTP 视图:镜像的 Mcp-* 标头会突出显示,并对哨兵值进行解码。
  • 协议选项卡是 JSON-RPC 视图:每种规范错误都会单独呈现,而不是显示为通用失败。
test-servers/configs/modern-network-http.json 提供四个工具,每个工具对应一种错误类别,并会生成真实的 HTTP 状态和 JSON-RPC 错误正文:

网络选项卡显示 HTTP 层;此处显示的是严格服务器返回的 400 Bad Request。

协议选项卡将同一失败呈现为类型化规范错误:-32022 UnsupportedProtocolVersion,并显示服务器支持的版本。


取消

在传统版连接中,取消正在执行的工具调用会发送 notifications/cancelled。在现代 Streamable HTTP 连接中,Inspector 会改为关闭该请求自己的 SSE 响应流,这是 2026-07-28 的取消信号。通过 stdio 传输时,取消仍使用 notifications/cancelled。 使用 test-servers/configs/cancellation-modern-http.json 复现:运行 slow_task,几秒后点击取消,服务器终端会打印任务停止前执行到的进度。

会话

传统的 Streamable HTTP 连接可能携带服务器分配的会话 ID(Mcp-Session-Id),客户端通过 HTTP DELETE 将其拆除。现代连接是无会话且按请求建立的:在没有会话 ID 时,客户端 SDK 不会向服务器发送 DELETE,因此断开连接完全是本地操作。 传统版连接还会在 initialize 之后打开独立的 GET 通知流,用于承载不属于任何请求的通知。传统版专用的抑制通知流选项位于服务器设置中;启用后会跳过该流,以便检查无法服务第二个并发请求的服务器。现代连接从不打开该流,因此该选项对现代连接不适用。 这对你自己的测试服务器有一个实际影响。每次请求构造的无状态现代处理程序无法在调用之间保存状态,这也是为什么 test-servers/configs/subscriptions-modern-http.json 不同于其传统版本,没有包含 update_resource 工具:该变更会针对一个用完即弃的服务器实例运行,后续读取时将无法看到这一变更。