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:
window.__INSPECTOR_API_TOKEN__,每次页面加载时注入到index.html中。这正是裸 URL 刷新或书签仍然可用的原因。?MCP_INSPECTOR_API_TOKEN=...查询字符串,即打印的 URL 所采用的形式。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。 |
| Tools | tools 能力 | 浏览 schema、填写参数、调用、检查结果。 |
| Prompts | prompts 能力 | 列出 prompt、提供参数、预览生成的消息。 |
| Resources | resources 能力 | 浏览、读取并订阅资源。 |
| Skills | 服务器声明 Skills 扩展(SEP-2640),任一世代的均算 | 浏览并获取服务器的 skills。 |
| Tasks | capabilities.tasks(legacy 世代)或 tasks 扩展(modern 世代) | 跟踪长期运行的工具调用。 |
| Logs | logging 能力 | 服务器的 notifications/message 输出,以及世代相应的级别控件。 |
| Protocol | 始终显示 | JSON-RPC 对话记录:请求、响应、通知。 |
| Network | HTTP / SSE 服务器 | 原始 HTTP 视图:状态、headers、body。 |
| Console | stdio 服务器 | 服务器进程的 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-ancestorsCSP 门禁保护,而带方括号的 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>| 参数 | 含义 |
|---|---|
serverUrl | MCP 服务器 URL。仅限 http: / https:;精心构造的 javascript: 或 file: 值会被拒绝。 |
transport | http(默认)或 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 地址无需选择加入即可,因为那是一次单独的、有意的暴露,而不是一次暴露全部接口。