--method 指定的那个请求,打印结果,然后退出。这使它非常适合 CI 流水线、shell 单行命令,以及需要立即验证服务器变更的编码智能体。
mcp-inspector 二进制文件。若未进行全局安装,请像上面那样为每个命令加上 npx @modelcontextprotocol/inspector 前缀。
选择一个服务器
CLI 接受一个位置命令(stdio)、一个--server-url(HTTP/SSE),或来自目录(catalog)或配置文件的一个具名服务器:
--header flag 会覆盖该次运行中文件的 header,同时保留其超时和 OAuth。
后面的示例会把你所使用的这些形式之一,连同其 --transport 或 --config/--server flag,缩写为 <server>。
配置文件是为一次运行赋予其 roots 的唯一持久方式: 没有 roots flag,而
--method roots/set 仅适用于那一个短暂的连接。为某个服务器配置的 roots 会在连接时被公布,因此一个调用 roots/list 的服务器(就像 @modelcontextprotocol/server-filesystem 为了解其允许的目录所做的那样)能够获得它们。--catalog vs. --config、-- 分隔符,以及共享的服务器选择 flag,参见配置与 flag。
方法
仅流式或仅会话的方法(例如
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 App UI(其 ui:// 资源、CSP 和权限),且不调用该工具,以便流水线在调用任何东西之前决定是否需要浏览器:
0,没有应用的退出 2,而缺失的工具退出 5,因此拼写错误不会被误认为“没有应用”。探测失败(不可读的 UI 资源、格式错误的 resourceUri)会在一个 resourceError 字段中报告,而不是中止,因此一个损坏的工具永远不会毁掉整个列表。
无论
--format 如何,tools/list --app-info 始终输出 NDJSON(每个工具一行);--format json 只重塑 tools/call --app-info 的单工具输出。退出码和错误信封
每个非零退出都映射到一个稳定的失败类别,因此调用方可以基于_原因_进行分支,而无需从散文中抓取信息:
在任何非零退出时,CLI 还会向 stderr 写入单行 JSON:
2>&1 | tail -1 | jq .error 解析它。
返回 isError: true 的 tools/call 仍会打印其负载,但退出 5,因此 && 链不会在一次失败的调用之后继续。
脚本中的授权
默认情况下,CLI 运行与 TUI 相同的 loopback OAuth 流程:它打开浏览器并等待一个 CI 作业无法完成的 localhost 回调。两个 flag 使非交互式运行变得可预测:--stored-auth-only:绝不启动交互式 OAuth 或升级(step-up),也绝不自动打开浏览器。若共享存储中存在令牌则使用它们,否则立即以auth_required失败。这是 CI 想要的 flag。--use-stored-auth:复用 Web Inspector 在本机上已经获取的令牌,当存储了 refresh token 时先刷新它。
auth_required 失败,而不是为一个无人会完成的回调挂起十五分钟。
有关完整流程、Web 到 CLI 的交接,以及 --print-handoff,参见授权。
配方
在 CI 中验证一个服务器
基于失败类别进行分支
对每个带有 UI 的工具进行冒烟测试
无需连接即可检查一个目录
代理
到远程 HTTP/SSE 服务器的连接遵循惯例的代理变量:HTTPS_PROXY / HTTP_PROXY(及其小写形式)选择代理,NO_PROXY 豁免主机。无需 Inspector 特定的 flag,并且代理 agent 是惰性加载的,因此不使用代理的运行不付出任何代价。同样的规则也适用于 Web 客户端的后端。