Skip to main content
每次 CLI 运行都会连接到一个服务器,调用你用 --method 指定的那个请求,打印结果,然后退出。这使它非常适合 CI 流水线、shell 单行命令,以及需要立即验证服务器变更的编码智能体。
下面的示例使用已安装的 mcp-inspector 二进制文件。若未进行全局安装,请像上面那样为每个命令加上 npx @modelcontextprotocol/inspector 前缀。

选择一个服务器

CLI 接受一个位置命令(stdio)、一个 --server-url(HTTP/SSE),或来自目录(catalog)或配置文件的一个具名服务器:
当服务器来自文件时,其按服务器的设置(header、超时、OAuth、协议时代和 roots)会应用到该连接上,其解析方式与 TUI 和 Web 客户端的解析方式完全相同。--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: truetools/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 时先刷新它。
在两者都没有、且 stdin 或 stderr 上没有 TTY 时,CLI 会快速以 auth_required 失败,而不是为一个无人会完成的回调挂起十五分钟。 有关完整流程、Web 到 CLI 的交接,以及 --print-handoff,参见授权

配方

在 CI 中验证一个服务器

基于失败类别进行分支

对每个带有 UI 的工具进行冒烟测试

无需连接即可检查一个目录

servers/show 会编辑(redact)承载密钥的字段(env 值、敏感 header、OAuth client secret),但它不会清除嵌入在服务器 url 中(userinfo 或查询令牌)或 stdio args 中的凭据。在将原始 URL 和 detail 字段粘贴到 issue 之前,请将它们视为敏感信息。

代理

到远程 HTTP/SSE 服务器的连接遵循惯例的代理变量:HTTPS_PROXY / HTTP_PROXY(及其小写形式)选择代理,NO_PROXY 豁免主机。无需 Inspector 特定的 flag,并且代理 agent 是惰性加载的,因此不使用代理的运行不付出任何代价。同样的规则也适用于 Web 客户端的后端。