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 后端环境变量
有关令牌保护和不保护的内容,请参阅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 在首次使用时选择。所有客户端使用相同的顺序:- 如果设置为
keyring、file或memory,则使用MCP_INSPECTOR_SECRET_STORE,不进行探测 - 如果探测可访问,则使用操作系统密钥链:macOS 上的 Keychain、Windows 上的 Credential Manager、Linux 上的 Secret Service(例如 GNOME Keyring 或 KWallet)。条目使用
mcp-inspector服务名。大多数桌面安装会停在此处 - 使用 stderr 报告的后备存储:
- 如果容器中的机密信息目录不在挂载卷上,则使用
memory,因为容器可写层中的文件最终会丢失 - 其他情况使用
file
- 如果容器中的机密信息目录不在挂载卷上,则使用
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 设置:
protocolEra(参见协议时代)默认为 legacy,而 modernLogLevel 默认为 debug。
你不必手动编写这些内容;Web 客户端可以从 Claude Desktop、Cursor、Cline 或 VS Code 中导入现有客户端配置,也可以导入注册表中的 server.json。