--method 指定的单个请求,打印结果并退出。这使其非常适合 CI 流水线、Shell 单行命令,以及需要立即验证服务器更改的编程代理。
mcp-inspector 二进制文件。如果未进行全局安装,请像上面一样,在每条命令前加上 npx @modelcontextprotocol/inspector。
选择服务器
CLI 接受一个位置命令(stdio)、一个--server-url(HTTP/SSE),或从目录或配置文件中选择一个命名服务器:
--header 标志会覆盖该次运行中文件中的请求头,同时保留其超时和 OAuth 设置。
后续示例会将你所使用的上述任一形式,以及其 --transport 或 --config/--server 标志,缩写为 <server>。
**配置文件是为一次运行提供
根目录的唯一持久方式:**没有 roots 标志,而
--method roots/set 仅适用于该次短暂的连接。为服务器配置的根目录会在连接时公布,因此调用
roots/list 的服务器(例如 @modelcontextprotocol/server-filesystem,它会调用该方法来了解其允许访问的目录)可以获取这些根目录。--catalog 与 --config、-- 分隔符以及通用的服务器选择标志。
方法
仅限流或会话的方法(例如
logging/tail)会被拒绝,因为退出的进程无法保持流处于打开状态。
传递参数
--tool-arg 接受 key=value,并通过 JSON 解析对值进行强制类型转换,因此 count=1 会变成数字,而 "012" 会变成 12:
--tool-args-json 一次性接受整个参数对象,并原样传递,不进行类型转换,因此 "012" 会保持为字符串 012。两者不能同时使用:
输出
--format text(默认)以便于人类阅读的格式美化输出。--format json 会在 stdout 上输出单个 JSON 对象,不包含任何横幅信息,因此整个输出可以直接通过管道传递:
探测 MCP 应用
--app-info 会报告某个工具是否附带 MCP 应用 UI(包括其 ui:// 资源、CSP 和权限),而不会调用该工具,这样流水线就能在调用任何工具之前决定是否需要浏览器:
0,不带应用的工具退出码为 2,而缺少的工具退出码为 5,因此拼写错误不会被误认为“没有应用”。探测失败(无法读取 UI 资源、resourceUri 格式错误)会记录在 resourceError 字段中,而不会中止操作,因此单个有问题的工具不会导致整个列表处理失败。
tools/list --app-info 始终输出 NDJSON(每个工具一行),无论
--format 的值是什么;--format json 只会重新组织
tools/call --app-info 的单工具输出。退出代码和错误信封
每个非零退出代码都对应一个稳定的失败类别,因此调用方无需抓取文本即可根据_原因_进行分支处理:
对于任何非零退出,CLI 还会向 stderr 写入单行 JSON:
2>&1 | tail -1 | jq .error 对其进行解析。
返回 isError: true 的 tools/call 仍会打印其负载,但会以 5 退出,因此失败调用不会继续执行 && 链。
脚本中的授权
默认情况下,CLI 运行的回环 OAuth 流程与 TUI 相同:它会打开浏览器,并等待 CI 作业无法完成的 localhost 回调。以下两个标志可让非交互式运行变得可预测:--stored-auth-only:永不启动交互式 OAuth 或升级验证,也永不自动打开浏览器。如果共享存储中存在令牌,则使用这些令牌;否则立即失败并返回auth_required。这是 CI 所需的标志。--use-stored-auth:复用 Web Inspector 已在此计算机上获取的令牌;如果存储了刷新令牌,则先刷新令牌。
auth_required,而不是在无人完成回调的情况下挂起十五分钟。
请参阅授权,了解完整流程、从 Web 到 CLI 的交接,以及 --print-handoff。
配方
在 CI 中验证服务器
根据失败类别进行分支处理
对每个具有 UI 的工具执行冒烟测试
在不连接的情况下检查目录
代理
与远程 HTTP/SSE 服务器的连接遵循约定的代理变量:HTTPS_PROXY / HTTP_PROXY(及其小写形式)用于选择代理,NO_PROXY 用于排除指定主机。无需使用 Inspector 专用标志,代理代理器会延迟加载,因此不使用代理运行时不会产生额外开销。Web 客户端的后端同样如此。