Skip to main content
mcp-inspector 二进制文件是一个启动器:它读取自身的两个标志,并将所有其他参数转发给三个客户端之一(Web、CLI 或 TUI)。每个客户端定义自己的标志,因此某个标志在一个客户端中有效,在另一个客户端中可能是未知标志(例如,--method 仅适用于 CLI)。本页面按负责这些标志和环境变量的客户端进行分组。

启动器仅负责两项功能

以下内容均属于客户端。
该软件包还会安装一个独立的第二个 bin:mcpdo,即实验性的连接客户端。它不通过启动器访问,也不接受模式标志。

选择服务器

--catalog 与 --config

CLI 和 TUI 通过同一套共享代码解析 --catalog 和 --config,Web 客户端也应用相同规则,因此每个标志在三个客户端中的含义都相同。两者之间的差异如下表所示。 两者互斥,且都不能与临时目标结合使用。三个客户端对同时传入两者的情况都会以相同方式拒绝。Web 客户端还有一项更严格的限制:文件与 --header 和 --protocol-era 一起使用时也会被拒绝,而 CLI 和 TUI 会将它们叠加到文件设置之上。
首次初始化的目录内容取决于客户端。 Web 后端会初始化三个示例服务器,因此首次启动时可以立即连接:
CLI 和 TUI 则会初始化为空的 { "mcpServers": {} }:它们是非交互式或由列表驱动的,因此示例条目只会造成干扰,而不是提供一个起点。无论哪种情况,只有在文件尚不存在时才会进行初始化,而只读的 --config 完全不会被初始化。
当你要让 Inspector 指向一个不是由你编写的配置文件时,应使用 --config:例如同事的配置文件、客户端应用的配置文件,或提交到代码仓库中的配置文件。它可以保证 Inspector 不会接触该文件。

临时目标

你可以不使用文件,直接指定一个服务器,可以是位置参数形式的命令(stdio),也可以是 URL:

共享的服务器选择标志

这些标志由 Web、CLI 和 TUI 分别定义,因此三者都可使用,差异如下:

-- 分隔符

Web 和 TUI 客户端会在单独的 -- 处分割参数,并将其后的所有内容作为独立参数传递给目标命令。这样可以传递一个否则会被 Inspector 处理的标志:
如果没有该分隔符,--config 就会被识别为 Inspector 自己的只读会话标志。 CLI 的分割方式相反: -- 之前的所有内容都是目标,之后的所有内容都是 Inspector 自己的选项。没有 -- 时,CLI 的目标仅是开头连续的不以短横线开头的参数,因此接受标志的服务器需要使用分隔符:

仅限 Web 的标志

CLI 和 TUI:OAuth 客户端标志

以下五项仅由 CLI 和 TUI 定义。Web 客户端通过其客户端设置对话框获取相同的设置。

仅限 CLI 的标志

整个脚本操作界面都属于 CLI。有关用法,请参阅 CLI 客户端。

环境变量

环境变量的分类方式与标志相同:其中两个由启动器本身读取,其余变量属于 CLI 和 TUI、Web 后端,或所有客户端(机密信息存储)。

由启动器读取

CLI 和 TUI

其中一些变量也由 Web 后端读取,如读取方列所示。

Web 后端环境变量

切勿同时使用 DANGEROUSLY_OMIT_AUTH 和 DANGEROUSLY_BIND_ALL_INTERFACES。 Web 后端会生成进程并持有 OAuth 令牌,因此任何能够访问它的人都可以驱动它。
有关令牌保护和不保护的内容,请参阅Web 后端及其 API 令牌。

机密信息存储变量

由 Web、CLI、TUI 和 mcpdo 每个客户端读取。它们的组合方式请参阅机密信息存储位置。

机密信息存储位置

Inspector 不会将凭据放入 mcp.json、client.json 和 oauth.json,因此共享、提交或同步这些文件不会泄露凭据。凭据会改为存储在机密信息存储中:
  • 已获取的 OAuth 令牌(访问令牌、刷新令牌和 IdP 会话令牌)
  • 每台服务器的 OAuth 客户端密钥,以及客户端设置中的企业 IdP 客户端密钥
  • 每个 stdio 服务器的 env: 值。保存条目时,每个 env 键会保留在 mcp.json 中但值为空,真实值进入存储
**headers 不会移动。**它们会按原样保存到 mcp.json,因此携带凭据的请求头仍会留在文件中。

如何选择存储方式

每个进程只会在首次需要时选择一次存储方式:Web 后端在启动时选择,CLI 和 TUI 在首次使用时选择。所有客户端使用相同的顺序:
  1. 如果设置为 keyring、file 或 memory,则使用 MCP_INSPECTOR_SECRET_STORE,不进行探测
  2. 如果探测可访问,则使用操作系统密钥链:macOS 上的 Keychain、Windows 上的 Credential Manager、Linux 上的 Secret Service(例如 GNOME Keyring 或 KWallet)。条目使用 mcp-inspector 服务名。大多数桌面安装会停在此处
  3. 使用 stderr 报告的后备存储:
    • 如果容器中的机密信息目录不在挂载卷上,则使用 memory,因为容器可写层中的文件最终会丢失
    • 其他情况使用 file
没有密钥链时,机密信息会进入明文文件,而且无需显式请求。当密钥链探测失败时(没有 libsecret 或运行中的 Secret Service 的 Linux、没有 D-Bus 会话的无头服务器或 SSH 会话、Android/Termux),Inspector 会自动将机密信息存储在 ~/.mcp-inspector/secrets.json 中。除非提供密钥,否则该文件不会加密。0600 模式可以阻止其他非 root 用户访问,但无法阻止 root、主目录的备份或副本,以及以你的身份运行的任何程序,包括 Inspector 启动的 stdio 服务器。请选择一种方式:
  • **恢复密钥链:**安装 libsecret 并运行 Secret Service(例如 gnome-keyring),或在桌面会话中运行 Inspector。下一次启动时,Inspector 会将文件中的机密信息移入密钥链并删除该文件
  • **加密文件:**使用 MCP_INSPECTOR_SECRET_KEY_FILE(首选)或 MCP_INSPECTOR_SECRET_KEY 提供生成的密钥
  • **完全不将机密信息写入磁盘:**设置 MCP_INSPECTOR_SECRET_STORE=memory,并在每个会话中重新输入
即使加密,磁盘上的机密信息仍有中等风险。请参阅文件存储的防护范围。
mcpdo 不会回退到 memory:它的命令和守护进程是不同的进程,因此使用文件存储。

文件存储

如果设置了 MCP_INSPECTOR_SECRET_FILE,文件位于该路径;否则,如果设置了 MCP_STORAGE_DIR,则位于其中的 secrets.json;再否则位于 ~/.mcp-inspector/secrets.json。默认位置位于存储目录(~/.mcp-inspector/storage)旁边,而不是其中。
  • **加密默认关闭。**使用密钥时,文件会使用 AES-256-GCM 加密,口令通过 scrypt 基于随机盐拉伸,每次写入都会重新生成盐。例如可以生成密钥,而不是自行选择:(umask 077 && openssl rand -base64 32 > ~/.config/mcp-inspector/secret-key),并将其与机密信息文件、备份和任何仓库分开保存
  • **之后添加密钥是安全的。**下一次写入会原地将明文文件升级为加密文件
  • **修改或丢失密钥并不安全。**无法解密的文件会被读取为空,Inspector 会拒绝覆盖它。请恢复密钥,或删除文件后重新输入值
  • **会强制执行权限。**文件以 0600 写入,并在启动时重新收紧权限。如果无法做到(其他所有者、只读挂载),日志和设置页脚会说明原因
  • **并发 Inspector 是安全的。**CLI 会话与 Web 会话并行运行时,会在文件旁的锁上串行,并通过读回文件验证每次写入

如何报告当前存储方式

  • **在 stderr 上:**选择存储方式时,如果回退到密钥链会显示警告;如果文件未加密、权限过宽或无法读取,也会显示另一条警告。两者末尾都包含指向 Inspector机密信息存储指南的链接。Web 客户端启动横幅每次运行都会有 Secrets: 行
  • 在 Web 客户端中: 客户端设置、服务器设置和添加/编辑/克隆服务器对话框的页脚会标明正在使用的存储方式,并在其仅存于内存、未加密、权限过宽或无法读取时变为警告

迁回密钥链

在使用文件存储的计算机上安装 libsecret(或启动 Secret Service)后,下一次启动会选择密钥链,并将文件内容移入其中。密钥链中已有的值优先于文件中的值。只有在每个条目都已处理后才会删除文件,无法解密的文件会保留。设置 MCP_INSPECTOR_SECRET_STORE=keyring 会触发相同的迁移。选择 file 或 memory 时不会从密钥链复制任何内容。

Catalog 文件格式

Catalog 或配置文件采用熟悉的 MCP 客户端配置结构(包含 mcpServers 对象),并为每个服务器附带 Inspector 设置:
Inspector 将文件写回时会省略值为默认值的字段,以尽量减少差异。protocolEra(参见协议时代)默认为 legacy,而 modernLogLevel 默认为 debug。 你不必手动编写这些内容;Web 客户端可以从 Claude Desktop、Cursor、Cline 或 VS Code 中导入现有客户端配置,也可以导入注册表中的 server.json。