Web 客户端

社区译文;来源: MCP 80041ab0

web 客户端是 Inspector 最丰富的界面:一个单页应用,由持实际 MCP 连接的小型 Node 服务器作为后端。它是默认模式,因此不带模式 flag 的 npx @modelcontextprotocol/inspector 会落到这里。

npx @modelcontextprotocol/inspector                       # empty, add servers in the UI
npx @modelcontextprotocol/inspector node build/index.js   # with an ad-hoc stdio server
npx @modelcontextprotocol/inspector --catalog ./mcp.json  # with a catalog file

会话 token

web 客户端背后的 Node 服务器用每次启动独立的 token 守护每个 /api/* 路由,因为它能在你的机器上启动进程。启动器会打印一个包含该 token 的 URL:打开那个 URL,不要凭记忆输入 localhost:6274。

浏览器按优先级顺序从三个位置恢复 token:

  1. window.__INSPECTOR_API_TOKEN__,每次页面加载时注入到 index.html 中。这正是裸 URL 刷新或书签仍然可用的原因。
  2. ?MCP_INSPECTOR_API_TOKEN=... 查询字符串,即打印的 URL 所采用的形式。
  3. sessionStorage,作为兜底。

设置 MCP_INSPECTOR_API_TOKEN 环境变量可固定一个已知 token(便于脚本化启动),或设置 DANGEROUSLY_OMIT_AUTH=true 完全禁用检查,但只能在没有其他东西能访问该端口的机器上这样做。两者都在 Web 后端环境变量 中说明。token 保护什么、不保护什么见安全 。

开发模式

--dev 是仅 web 的 flag。它运行 Vite 开发服务器而不是提供预构建的 bundle,如果你在修改 Inspector 本身,这会很重要:

mcp-inspector --web --dev

生产模式的 --web 提供构建好的 bundle。在已发布的包中该 bundle 总会附带;在全新的源码检出中没有它,因此运行器会在你首次启动时按需构建。

标签栏

标签页显示条件作用
Servers始终显示服务器列表:添加、编辑、导入、连接,以及打开逐服务器设置。
Apps服务器暴露 MCP App 工具在沙箱化的 frame 中渲染工具的 UI。
Toolstools 能力浏览 schema、填写参数、调用、检查结果。
Promptsprompts 能力列出 prompt、提供参数、预览生成的消息。
Resourcesresources 能力浏览、读取并订阅资源。
Skills服务器声明 Skills 扩展(SEP-2640),任一世代的均算浏览并获取服务器的 skills。
Taskscapabilities.tasks(legacy 世代)或 tasks 扩展(modern 世代)跟踪长期运行的工具调用。
Logslogging 能力服务器的 notifications/message 输出,以及世代相应的级别控件。
Protocol始终显示JSON-RPC 对话记录:请求、响应、通知。
NetworkHTTP / SSE 服务器原始 HTTP 视图:状态、headers、body。
Consolestdio 服务器服务器进程的 stderr。

Network 与 Console 绝不会同时出现。legacy 和 modern 世代见协议世代 。

监控侧边栏

Tasks、Logs、Protocol、Network 和 Console 组成一个监控组。固定该组后,它们会离开标签栏并移入右侧可调整大小的列,这样你就可以在 Tools 或 Resources 中工作时观察流量。拖动该列的边缘可在 320 到 720 像素宽之间调整。列宽和所选的监控标签页会在刷新后保留。

Servers

Servers 界面是入口点。每个服务器行带有其传输方式、连接状态,以及一个打开其逐服务器设置的控件。

该列表来自何处、是否可编辑,取决于你的启动方式:

启动方式服务器列表可编辑?
mcp-inspector --web默认 catalog ~/.mcp-inspector/mcp.json,首次启动时填充是
--catalog <path>该文件,缺失时用示例服务器填充是
--config <path>该文件,只读(永不写入或填充)否
--server-url <url> 或位置参数形式的命令单个临时服务器,保存在内存中否

首次启动时,web 客户端会用三个示例服务器填充 catalog:一个限定于 /tmp 的文件系统服务器、经典的 “everything” 参考服务器,以及 MCP 组织托管的示例服务器(Streamable HTTP,通过动态客户端注册使用 OAuth)。完整规则见配置与 flag ,其中也说明了为什么 CLI 和 TUI 改为填充空 catalog。

Server Settings

  • Protocol Era:legacy / auto / modern。参见协议世代 。
  • Log Level per Request:modern 世代连接默认在每个出站请求上打上的级别,或用 off 退出(参见日志 )。
  • Advertised Extensions:Inspector 在 capabilities.extensions 中声明哪些扩展。这是一个调试旋钮:服务器完全可能根据你声明的扩展改变它注册的内容。取消勾选 Tasks 扩展并重新连接到 test-servers/configs/advertised-extensions-http.json 测试夹具(安装方法见在本地复现各个世代 ),即可观察某个工具消失。
  • Roots:通过 roots 客户端能力声明的 roots。例如 @modelcontextprotocol/server-filesystem 会调用 roots/list 来获知其允许的目录。
  • Headers、timeouts 以及 OAuth 字段。Headers 会按写入原样保存在 catalog 中;OAuth 客户端 secret 和 stdio env: 值进入机密存储 。
  • OAuth Settings:客户端 ID 和 secret、一个只读的 Redirect URI 用于复制到预注册客户端(它会跟随你打开 Inspector 时所处的来源)、Scopes(空格分隔)、Request refresh token、Revoke tokens on clear、附加授权参数、authorization 与 token URL 覆盖项,以及 Insufficient-scope response,它决定 403 insufficient_scope 是触发 step-up 还是直接暴露该错误。
  • Fetch Lists One Page at a Time:关闭时,连接时列表结果会跨页自动聚合;开启时,每个列表只加载第 1 页,并提供 Load next page 控件和"已加载 N 页"状态。用 test-servers/configs/pagination-http.json 复现,它把 12 个工具、资源和 prompt 各分页为三页。

Server Settings、Client Settings 以及 Add / Edit / Clone server 对话框底部的页脚会指出当前使用的机密存储,因此你在输入机密的地方就能看到它。当机密仅存于内存(重启即丢失)、位于未加密文件、位于权限过宽的文件,或文件无法读取时,它会变成警告。

Tools

选择一个工具即可看到其描述、以表单渲染的输入 schema,以及其注解。填写表单并调用它;结果会渲染在下方,结构化内容、内嵌资源和图片都会被原生处理。

在 modern 世代的服务器上,此界面还会显示镜像的 Mcp-Param-* headers、被排除的工具,以及独立的 -32602 错误面板,这些都在协议世代 中说明。

Resources

列出资源和资源模板及其 MIME 类型和描述,选中时读取内容,并在支持订阅的服务器上提供 Subscribe。订阅机制因世代而异;参见资源订阅 。

Prompts

列出 prompt 模板及其参数,并为你提供的参数渲染生成的消息,这是确认 prompt 是否产出你预期内容的最快方式。

Apps

MCP Apps 是携带 UI 的工具。Apps 标签页会从独立端口提供的沙箱 iframe 中渲染其中一个,演练 ui/* 桥接,并在 frame 下方的面板中显示该视图的 ui/message 提交及其 notifications/message 日志。

  • 沙箱在自己的端口上监听,默认 6275(用 MCP_SANDBOX_PORT 设置)。其 UI 资源声明 _meta.ui.domain 的 app,其文档会由第三个监听器(app origin)提供,默认在 6278(MCP_APP_ORIGIN_PORT)。请随 web 端口一起暴露或转发这两个端口。
  • 沙箱受 frame-ancestors CSP 门禁保护,而带方括号的 IPv6 字面量不是合法的 CSP host-source,因此请通过 localhost、127.0.0.1、主机名或局域网 IPv4 浏览 Inspector,不要用裸的 http://[::1]:...。
  • 默认情况下沙箱 URL 是绑定地址上的普通 http,因此 https:// 的 Inspector 页面会把该 frame 作为混合内容拦截。在 TLS 反向代理之后,请把 MCP_SANDBOX_FULL_ADDRESS(以及 MCP_APP_ORIGIN_FULL_ADDRESS)设为浏览器访问各监听器时所用的公开 https:// 地址。两者都不得与 Inspector UI 同源;同源的值会被忽略并给出警告。

CLI 优先的自动化审查流程参见配方 。

Protocol、Network 与 Console

这三个标签页以不同详细程度展示同一份流量:

  • Protocol:JSON-RPC 对话记录。请求与响应配对、通知内联、MRTR 轮次归组为一次对话,规范错误按类别渲染。
  • Network:HTTP 层,适用于 SSE 和 Streamable HTTP 服务器。状态码、请求与响应 headers,以及 body。在 modern 连接上,标准化的 Mcp-* headers 会被高亮,哨兵值会被解码。
  • Console:已连接 stdio 服务器进程的 stderr,大多数 stdio 服务器把自己的诊断信息放在那里。

Network headers 和 body 中的机密会被遮盖,并有一个控件可将其显示出来;Protocol 和 Console 按发送原样显示流量。条目可以被清除或导出。

深层链接

驱动程序(脚本、CI harness,或 CLI 的 --print-handoff )可以用一次导航访问已连接的 Inspector:

http://127.0.0.1:6274/?serverUrl=<url>&transport=http|sse&autoConnect=<token>
参数含义
serverUrlMCP 服务器 URL。仅限 http: / https:;精心构造的 javascript: 或 file: 值会被拒绝。
transporthttp(默认)或 sse。
autoConnect必需的 CSRF 门禁。 必须等于每次启动的会话 token,只有启动服务器的那个东西知道它。

另外三个参数会把你带到渲染后的 app:openApp=<toolName> 指定工具名,appArgs=<base64url(JSON)> 提供其参数(会合并到工具的 schema 默认值之上),autoOpen=<token> 自动触发工具调用。因为 autoOpen 会触发调用,它带有与 autoConnect 相同的强制 token 门禁。

主机绑定与来源

默认情况下 Inspector 绑定 127.0.0.1,并且只接受来自其端口 loopback 来源的请求。请把这两个默认值都视为安全边界,因为后端会在你的机器上启动进程。

除非设置 DANGEROUSLY_BIND_ALL_INTERFACES=true,绑定所有接口(HOST=0.0.0.0)会被拒绝。绑定一个特定的非 loopback 地址无需选择加入即可,因为那是一次单独的、有意的暴露,而不是一次暴露全部接口。

完整矩阵见在网络中托管 配方,变量见配置 。