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 后端令牌。
机密信息存储变量
由 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 在首次使用时选择。所有客户端使用相同顺序:- 如果
MCP_INSPECTOR_SECRET_STORE设置为keyring、file或memory,则使用该值,不进行探测。 - 如果探测成功,则使用操作系统钥匙串:macOS 的 Keychain、Windows 的 Credential Manager、Linux 的 Secret Service(libsecret,例如 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。