Protocol Era 设置
每个服务器都有一个 protocolEra,其值可以是 legacy、auto 或 modern。在 Web 客户端中,它位于服务器设置中;在目录或配置文件中,它是 protocolEra 字段;在 CLI 和 TUI 中,它来自同一个文件。
为什么默认值是
legacy,而不是 auto。 调试工具不应自动进行探测。针对静默的旧版
stdio 服务器,server/discover 探测会一直停滞,而且会污染你来此查看的记录事务。选择
auto 或 modern 是一个有意的操作,因此你在“协议”选项卡中看到的内容,就是服务器在
客户端按照你配置的方式运行时所看到的内容。server/discover 还会提供 capabilities(包括 extensions)、instructions 以及 supportedVersions 列表。服务器的名称和版本会在结果的 _meta 中以 io.modelcontextprotocol/serverInfo 的形式提供。
服务器设置:协议时代选择器,包含全部三个选项。
在本地重现各个时代
下面的每个部分末尾都有一个指向 使用……重现 的链接,指向 Inspector 代码库中提供的某个可组合测试服务器的 JSON 配置。克隆代码库,构建测试服务器,然后将 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 流状态徽章,而传统订阅无需显示该徽章。
任务
任务在不同协议时代之间变化最大,包括_检查器 UI 标签页如何进行门控_。- 旧版
- 现代版
当服务器播发
capabilities.tasks 时,会显示 Tasks 标签页。启用 Run as task 后运行工具,该标签页会列出该工具,通过 tasks/list 填充列表,并使用 tasks/get 轮询。已完成的负载通过阻塞式 tasks/result 获取,而 Cancel 会发送 tasks/cancel。使用 test-servers/configs/tasks-legacy-http.json 进行复现。旧版:Tasks 标签页由 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 将现代服务器中的所有形态集中在一起:
旧版的
collect_elicitation 模式(服务器调用
server.elicitInput)在 2026-07-28 连接上会报错,因为此时不允许服务器向客户端发送请求。MRTR 是它的现代替代方案。MRTR 轮次在标记为 input_required 的待处理请求模态框处暂停。回答后会重试原始请求。
工具:镜像请求头和已排除的工具
SEP-2243 允许工具使用x-mcp-header 标注参数,请求 Streamable HTTP 客户端将该参数的值镜像到 Mcp-Param-* 请求头中。
Inspector 在 Tools 标签页中展示该契约的两部分:
- 带有有效标注的工具会在其详情面板中显示 “Mirrored request headers (SEP-2243)” 部分,例如
city -> Mcp-Param-City。 - 带有无效标注的工具(例如请求头名称为
"Bad Header",其中的空格使其成为无效的 RFC 9110 token)会在侧边栏的 “Excluded (SEP-2243)” 分隔线下以删除线显示,并在悬停时显示原因。符合规范的客户端必须从tools/list中删除此类工具;Inspector 会向你说明工具被删除的原因,而不是将其静默隐藏。
test-servers/configs/xmcpheader-modern-http.json 进行复现。
get_weather 显示其镜像的 city -> Mcp-Param-City 请求头,而 invalid_header_tool 则在 Excluded (SEP-2243) 分隔线下以删除线显示。
-32602 错误面板
在现代协议时代,返回 -32602 的 tools/call 会呈现为独立的错误面板:
- 未知工具:当消息中指定的工具未被服务器列出时。调用服务器
tools/list中不存在的任意名称即可复现。 - 无效参数:其他任何
-32602错误。使用上述配置中的trigger_invalid_params工具即可复现。
-32602;变化的只有 Inspector 的呈现方式。在旧版连接上,你会得到一个通用的 JSON-RPC 失败结果,必须阅读消息才能判断遇到的是哪种情况。
网络与协议:标头和错误分类
现代规范统一了一组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,并显示服务器支持的版本。
会话
传统的 Streamable HTTP 连接可能携带由服务器分配的会话 ID(Mcp-Session-Id),客户端会通过 HTTP DELETE 将其终止。现代连接则是无会话且按请求进行的:在没有会话 ID 的情况下,客户端 SDK 不会向服务器发送 DELETE,因此断开连接完全是本地操作。
这对你自己的测试服务器有一个实际影响。每次请求构造的无状态现代处理程序无法在调用之间保存状态,这也是为什么 test-servers/configs/subscriptions-modern-http.json 不同于其传统版本,省略了 update_resource 工具:该变更会针对一个用完即弃的服务器实例执行,后续读取时将无法看到变更。