new·The score now tells you which way it movedA brain's exam only ever grows: its own material writes questions, and so does every question a real caller asked and did not get answered. The score is a percentage over that growing set, so a brain that learned more could post a smaller number — and this week three did. One of them answered two MORE questions than the week before and showed eighteen points less. Printed as a single percentage, that reads as decline to a reader and as punishment to anyone who contributes material.all news →
mozg.beta
Sign in

MCP · Building servers and clients · all subjects

troubleshooting & ops

119 notes in this subject, read out of this brain and free to use. This is page 1 of 2.

Post-scaffold steps: iterate descriptions, test with Inspector, publish

After a server is scaffolded, the recommended next steps are: iterate on tool descriptions and error handling; test tools, resources, and prompts interactively with the MCP Inspector; wire the server into an MCP client via local or remote configuration; and publish it to the MCP Registry to make it discoverable.

Server missing / hammer icon absent checklist

If a configured server does not appear in Claude Desktop (hammer/tools icon missing): 1) fully restart Claude Desktop, 2) validate claude_desktop_config.json syntax, 3) ensure all file paths in the config are valid and absolute rather than relative, 4) read the MCP logs, 5) run the exact command manually in a terminal (e.g. `npx -y @modelcontextprotocol/server-filesystem /Users/username/Desktop`) to surface startup errors.

Tool calls failing silently in Claude Desktop

If the model attempts to use tools but they fail with no visible error: check Claude's MCP logs for errors, verify the server builds and runs without errors when launched manually, then restart Claude Desktop.

ENOENT with unexpanded ${APPDATA} on Windows

On Windows a server can fail to load with an ENOENT error and a literal `${APPDATA}` appearing in a path in its logs. The fix is to add the expanded value to the `env` key of that server in claude_desktop_config.json, for example "env": {"APPDATA": "C:\\Users\\user\\AppData\\Roaming\\"}, then restart Claude Desktop.

npx server launch requires globally installed npm on Windows

On Windows, `npx`-launched MCP servers can keep failing if npm is not installed globally. If npm is installed globally, the directory `%APPDATA%\npm` exists; otherwise install it with `npm install -g npm`.

Per-request log level via _meta io.modelcontextprotocol/logLevel

MCP defines eight RFC 5424 severity levels (debug through emergency). Clients opt in to log messages per request by setting the `io.modelcontextprotocol/logLevel` field in the request's `_meta`. Servers must not send `notifications/message` for requests that omit this field.

MCP Inspector is the first debugging stop

The MCP Inspector is an interactive, transport-agnostic testing UI that connects to stdio or Streamable HTTP servers, invokes tools, prompts and resources, and shows the notification stream. It should be the first tool used when debugging a server, and is useful for quick iteration during development.

Three levels of MCP debugging tools

MCP debugging happens at three levels: (1) MCP Inspector, an interactive transport-agnostic testing UI; (2) server logging, structured logs to stderr on stdio or via OpenTelemetry on all transports; (3) client developer tools, since most MCP clients expose logs and connection state.

Connection failure checklist

When an MCP server fails to connect: 1) check client logs, 2) verify the server process is running, 3) test the server standalone with the Inspector, 4) verify protocol compatibility via `server/discover`, 5) inspect the per-request `_meta` fields to confirm both sides declared the protocol version and capabilities you expect.

Common MCP server startup failures

Startup problems fall into three groups: path issues (incorrect server executable path, missing required files, permission problems — try an absolute path for `command`); configuration errors (invalid JSON syntax, missing required fields, type mismatches); and environment problems (missing environment variables, incorrect values, permission restrictions).

Claude Desktop MCP log file locations

Claude Desktop writes MCP log files to `~/Library/Logs/Claude` on macOS and `%APPDATA%\Claude\logs` on Windows. Tail them with `tail -n 20 -F ~/Library/Logs/Claude/mcp*.log` on macOS or `type "$env:AppData\Claude\logs\mcp*.log"` in PowerShell. The logs capture server connection events, configuration issues, runtime errors, and message exchanges.

Enable Chrome DevTools inside Claude Desktop

To debug client-side errors in Claude Desktop, create a `developer_settings.json` containing {"allowDevTools": true} in `~/Library/Application Support/Claude/` (macOS) or `$env:AppData\Claude\` (Windows), then open DevTools with Command-Option-I on macOS or Ctrl+Alt+I on Windows. Two DevTools windows appear: one for the main content window and one for the app title bar window. Use the Console panel for client-side errors and the Network panel for message payloads and connection timing.

Restart the client after config or server code changes

Configuration changes require restarting the MCP client. Server code changes also require a client restart; for Claude Desktop you must fully quit and reopen the app, since closing the window is not enough. Use the Inspector for quick iteration instead of repeated restarts.

notifications/message logging is deprecated in 2026-07-28

Protocol-level logging via `notifications/message` is deprecated as of protocol version 2026-07-28, though it remains available during the deprecation window. Preferred alternatives are structured logs to stderr (stdio transport) or OpenTelemetry (all transports).

Inspecting remote HTTP servers with --server-url --transport http

To inspect a remote server instead of spawning a local process, use `npx @modelcontextprotocol/inspector --server-url https://api.example.com/mcp --transport http`. For published packages, wrap their launch command instead: `npx -y @modelcontextprotocol/inspector npx @modelcontextprotocol/server-filesystem ~/Desktop` for an npm server, or `npx @modelcontextprotocol/inspector uvx mcp-server-git --repository ~/code/mcp/servers.git` for a PyPI server. Read each server's README first, since required commands and arguments differ per server.

Inspector web client monitoring sidebar for protocol traffic

The Inspector web client has a monitoring sidebar that can be pinned so protocol traffic stays visible while working with a connected server, which is useful for observing the raw JSON-RPC messages during debugging.

Inspector --help behaves differently with a mode flag

Bare `mcp-inspector --help` prints the launcher's own help and exits, while with a mode flag the help request is forwarded to the client, so `mcp-inspector --cli --help` prints the CLI client's full flag reference.

Inspector mode flags only parsed at front of command line

Inspector mode flags are recognized only at the front of the command line: the first token that is not `--web`, `--cli` or `--tui` ends launcher parsing, and everything after it is forwarded to the client unchanged. This allows a literal `--cli` to appear later as one of the inspected server's own arguments, e.g. `mcp-inspector --cli node server.js --cli` runs in CLI mode and passes the trailing `--cli` to server.js.

MCP Inspector: three clients in one package

The MCP Inspector is the reference developer tool for testing and debugging MCP servers, shipped as the single npm package `@modelcontextprotocol/inspector`. One binary provides three clients: Web (`npx @modelcontextprotocol/inspector`, the default graphical browser inspector), CLI (`npx @modelcontextprotocol/inspector --cli`, scriptable and machine-readable for CI, shell pipelines and coding agents), and TUI (`npx @modelcontextprotocol/inspector --tui`, an interactive terminal UI for when a browser isn't available). All three share the same core, so connections behave identically: same transports, same configuration files, same OAuth state on disk, and the same protocol-era negotiation (legacy vs. modern 2026-07-28).

Inspector requires Node 22.19.0 or newer

The MCP Inspector requires Node 22.19.0 or newer and runs directly through `npx` with no installation step required.

Launching Inspector against a local stdio server

To test a stdio server, pass the launch command as the Inspector's arguments, e.g. `npx @modelcontextprotocol/inspector node path/to/server/index.js`. Running `npx @modelcontextprotocol/inspector` with no target launches the web UI empty so servers can be added from the UI. The web command prints a URL containing a one-time session token that must be opened in the browser.

Inspector CLI: list tools and call a tool

CLI examples: `npx @modelcontextprotocol/inspector --cli node path/to/server/index.js --method tools/list` lists a server's tools and exits. `npx @modelcontextprotocol/inspector --cli https://api.example.com/mcp --transport http --method tools/call --tool-name get_weather --tool-arg city=Boston --format json | jq .result` calls a tool over HTTP and pipes JSON output into jq. Tool arguments are passed as repeated `--tool-arg key=value` pairs.

Inspector launcher flags vs client flags

The `mcp-inspector` binary is a thin launcher owning only two things: the mode flag (`--web` default, `--cli`, or `--tui`, at most one) and `-h`/`--help`. Everything else — `--catalog`, `--config`, `--server-url`, `--transport`, `--method`, and the OAuth flags — is defined by the individual client, and the three clients do not all define the same flag set. Passing two mode flags errors with `Specify at most one of --web, --cli, or --tui.`

Inspecting OAuth state in web, TUI and CLI

To debug authorization: the web Inspector's Connection Info panel shows discovery results, the registered client, granted scopes and token state, and offers a 'Clear OAuth state' action for the active server; the TUI shows the same fields on the Auth tab (keyboard shortcut `a`) and clears state the same way; the CLI uses `--list-stored-auth` to show what is on disk and `--relogin` to discard it and start over.

Callback port collision causes EADDRINUSE

Only one process can hold the default OAuth callback port at a time; a second concurrent flow fails with `EADDRINUSE`. Use a different fixed port per instance, or `http://127.0.0.1:0/oauth/callback` for an OS-assigned ephemeral port when the authorization server supports dynamic redirect-URI registration.

MCP Inspector default OAuth callback URLs per surface

The MCP Inspector's web app listens for the OAuth callback on `http://localhost:6274/oauth/callback` (the main app server already has an HTTP listener), while the CLI and TUI share `http://127.0.0.1:6276/oauth/callback` on a dedicated loopback listener so they don't collide with a running web Inspector. Register `http://127.0.0.1:6276/oauth/callback` on any IdP requiring pre-registered redirect URIs before using the CLI or TUI. Override with `--callback-url` or the `MCP_OAUTH_CALLBACK_URL` environment variable.

Inspector CLI step-up prompt and its timeout behavior

In the MCP Inspector web client a mid-session challenge surfaces as a re-authorization banner; in the CLI it prompts on stderr with `Proceed with step-up authorization? [y/N]`. Answering `y` continues; piped input works (`echo y | ...`) as long as it is newline-terminated or stdin closes. `N` or EOF with no answer declines. A non-TTY stdin that sends nothing within 5 seconds fails with `auth_required`, which is a distinct outcome from an explicit decline. Enterprise-managed step-up re-mints tokens silently with no prompt.

Non-interactive/CI OAuth: use --stored-auth-only

Interactive OAuth in the MCP Inspector requires a TTY on stdin or stderr, or `MCP_AUTO_OPEN_ENABLED=true`. Redirecting stderr into a pipe (`2>&1 | tee`) still works because stdin stays a TTY. When neither holds — the normal CI shape — the CLI fails fast with `auth_required` instead of waiting up to fifteen minutes for a callback. For CI be explicit: `mcp-inspector --cli "$URL" --transport http --stored-auth-only --method tools/list`. `--stored-auth-only` never starts interactive OAuth or step-up, never opens a browser, uses the shared token store if a token is present, and fails immediately otherwise.

Where MCP Inspector stores OAuth tokens and client settings

The MCP Inspector persists tokens and client information in `~/.mcp-inspector/storage/oauth.json`, keyed by canonicalized server URL and written owner-only; install-level client settings (client metadata URL, enterprise IdP) live in `~/.mcp-inspector/storage/client.json`, the same file the web client's Client Settings dialog writes; per-server client id/secret, scopes, the enterprise-managed flag and the step-up policy live in the server's `oauth` block in the catalog file. The oauth.json path resolves in order: `MCP_INSPECTOR_OAUTH_STATE_PATH`, then `<MCP_STORAGE_DIR>/oauth.json`, then the default. All three clients (web, CLI, TUI) resolve it identically, so a login done once is usable everywhere. Command-line `--client-id`, `--client-secret` and `--client-metadata-url` override `client.json`.

Inspector CLI flags for reusing a browser-completed login

To reuse a token obtained in the web Inspector: `--use-stored-auth` reads stored auth for `--server-url` and injects `Authorization: Bearer`, running the refresh grant first when a refresh token is stored and persisting the rotation, exiting `3` (listing stored server URLs) when nothing matches; `--wait-for-auth <sec>` polls the state file until a token for `--server-url` appears then injects it, timing out at `<sec>` with exit `3`; `--list-stored-auth` prints `{ oauthStatePath, storedServerUrls }` and exits without connecting; `--print-handoff` prints a JSON block (`deepLink`, `portForwardCmd`, `oauthStatePath`, `apiToken`) and exits; `--relogin` deletes the stored OAuth for the server URL before connecting and works for HTTP/SSE only.

Remote VM handoff sequence for OAuth

A typical remote-VM OAuth handoff runs `mcp-inspector --cli --server-url https://api.example/mcp --print-handoff` on the VM to print what the human needs (including a `deepLink` that navigates a browser straight to a connected Inspector and a `portForwardCmd`), then blocks and runs the call with `mcp-inspector --cli --transport http --server-url https://api.example/mcp --wait-for-auth 120 --method tools/list`.

Rotating refresh tokens race on every stored-auth run

Because the MCP Inspector's stored OAuth entry records no expiry, a stored refresh token is exercised on every `--use-stored-auth` run. With rotating (single-use) refresh tokens this opens two failure windows: two concurrent invocations against the same state file can race for the token, and a crash between a successful refresh and the write-back leaves the rotated token unsaved. Recovery is to re-authorize in the web client.

Inspect a catalog without connecting to servers

`mcp-inspector --cli --catalog ~/.mcp-inspector/mcp.json --method servers/list` and `... --method servers/show --server my-server` read the catalog without connecting to any server.

MCP Inspector CLI: one method per run

Each `mcp-inspector --cli` run connects to a server, invokes exactly the single request named by `--method`, prints the result, and exits. Example: `npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list`. This suits CI pipelines, shell one-liners, and coding agents verifying a server change.

Config-file server settings apply to CLI connections

When an Inspector CLI run selects a server from a config file, that server's per-server settings (headers, timeouts, OAuth, protocol era, and roots) apply to the connection, resolved exactly as the TUI and web client resolve them. A `--header` flag overrides the file's headers for that run while leaving timeouts and OAuth in place.

Inspector CLI methods and their required companion flags

Supported `--method` values: `initialize` (no companions; returns {serverInfo, protocolVersion, capabilities, instructions}), `tools/list`, `tools/call` (requires `--tool-name` plus `--tool-arg` or `--tool-args-json`), `resources/list`, `resources/read` (requires `--uri`), `resources/templates/list`, `prompts/list`, `prompts/get` (requires `--prompt-name` and `--prompt-args`), `logging/setLevel` (requires `--log-level`, legacy protocol era only), and `servers/list` / `servers/show` which read the catalog without connecting.

Stream- or session-only methods are rejected by the CLI

The Inspector CLI rejects stream- or session-only methods such as `logging/tail`, because a process that exits immediately cannot hold a stream open.

Inspector CLI output formats: text vs json

`--format text` is the default and pretty-prints for humans. `--format json` emits a single JSON object on stdout with no banners so output pipes cleanly, e.g. `mcp-inspector --cli <server> --method tools/list --format json | jq '.result.tools[].name'`.

tools/list --app-info always emits NDJSON regardless of --format

`tools/list --app-info` always emits NDJSON with one line per tool no matter what `--format` is set to; `--format json` reshapes only the single-tool output of `tools/call --app-info`.

App-info probe exit codes distinguish 'no app' from 'no tool'

For `--app-info` probes, a tool with an app exits 0, a tool with no app exits 2, and a missing tool exits 5, so a typo in the tool name is not mistaken for 'no app'. A probe failure such as an unreadable UI resource or a malformed `resourceUri` is reported in a `resourceError` field rather than aborting, so one bad tool never kills a whole listing.

CI recipe: assert a tool exists in tools/list

A CI check that fails the build when the server is unreachable or missing a tool: `set -euo pipefail; mcp-inspector --cli --config ./ci-servers.json --server my-server --stored-auth-only --method tools/list --format json | jq -e '.result.tools | map(.name) | index("get_weather")' > /dev/null`.

MCP_DEBUG and DEBUG only count meaningful values

The Inspector launcher reads `MCP_DEBUG` and `DEBUG` to append the error stack to a top-level failure. Both are honoured only when set to a meaningful value: `0`, `false`, and empty are read as off. This rule keeps a stray `DEBUG=0` from turning stack traces on while leaving `DEBUG` usable as the npm `debug` package's namespace filter.

Inspector web backend environment variables and ports

The Inspector web backend reads: `MCP_INSPECTOR_API_TOKEN` (pin the session token instead of generating a random one per launch), `DANGEROUSLY_OMIT_AUTH` (disable the `/api/*` token check), `HOST` (bind host, defaults to `localhost`), `CLIENT_PORT` (web UI port, defaults to `6274`), `DANGEROUSLY_BIND_ALL_INTERFACES` (required opt-in to bind a wildcard host such as `0.0.0.0` or `::`), `ALLOWED_ORIGINS` (comma-separated origin allow-list that replaces the default list rather than merging with it), `MCP_SANDBOX_PORT` (pin the MCP Apps sandbox port, dynamic by default), and `HTTPS_PROXY`/`HTTP_PROXY`/`NO_PROXY` for outbound MCP connections.

MCP Inspector launcher owns only --web/--cli/--tui and --help

The `mcp-inspector` binary is a launcher that reads only two flags of its own: the mode selector (`--web`, `--cli`, or `--tui`; `--web` is the default) and `-h`/`--help`. Every other argument is forwarded unchanged to the selected client. Passing more than one mode flag fails with the message `Specify at most one of --web, --cli, or --tui.` Launcher flags must come first, because parsing stops at the first argument the launcher does not own. With no mode flag, `--help` prints the launcher's help; with a mode flag it is forwarded, so `mcp-inspector --cli --help` prints the CLI's help.

Inspector flags are client-specific (--method is CLI-only)

The MCP Inspector has three clients (web, CLI, TUI) and each defines its own flags, so a flag valid in one client can be unknown to another. For example `--method` exists only in the CLI client. The CLI-only scripting flags are grouped as: what to invoke (`--method`, `--tool-name`, `--tool-arg`, `--tool-args-json`, `--uri`, `--prompt-name`, `--prompt-args`, `--log-level`, `--metadata`, `--tool-metadata`), how to run it (`--connect-timeout`, `--format`, `--app-info`), and auth (`--use-stored-auth`, `--stored-auth-only`, `--relogin`, `--wait-for-auth`, `--list-stored-auth`, `--print-handoff`).

Inspector --catalog vs --config: writable vs read-only

`--catalog <path>` points at the Inspector's own writable server list: it is created and seeded if missing, editable in the web UI, and defaults to `~/.mcp-inspector/mcp.json` or the `MCP_CATALOG_PATH` environment variable. `--config <path>` is read-only: it is served as-is, never written, seeded or migrated, errors if the file is missing, is not editable in the web UI, and has no default so you must pass it. Use `--config` when pointing the Inspector at a config file you did not write (a coworker's, a client application's, or one checked into a repo). The two flags are mutually exclusive, neither combines with an ad-hoc target, and passing both is rejected identically by all three clients.

Seeded Inspector catalog differs between web and CLI/TUI

When a catalog file does not exist yet, the Inspector seeds it. The web backend seeds two sample stdio servers: `filesystem-server-default` (`npx -y @modelcontextprotocol/server-filesystem /tmp`) and `everything-server-default` (`npx -y @modelcontextprotocol/server-everything`). The CLI and TUI instead seed an empty `{ "mcpServers": {} }` because they are non-interactive or list-driven. Seeding only happens when the file does not exist, and a read-only `--config` file is never seeded.

Inspector shared server-selection flags and their divergences

All three Inspector clients define these server-selection flags: `--catalog <path>` (writable catalog), `--config <path>` (read-only session file), `--server <name>` (pick one named server from the file; web and CLI only, since the TUI loads every server and lets you choose interactively), `--transport <type>` (`stdio`|`sse`|`http`, ad-hoc only), `--server-url <url>` (ad-hoc only), `--cwd <path>` (working directory for a stdio server process), `-e <KEY=VALUE>` (environment variables for a stdio server, repeatable), `--header "Name: Value"` (HTTP headers for an HTTP/SSE server, repeatable; on the web client it requires an ad-hoc HTTP/SSE server), and `[target...]` (positional command or URL for one ad-hoc server).

Use -- to pass flags through to the target MCP server command

The web and CLI Inspector clients split their arguments at a bare `--` and pass everything after it to the target command as its own arguments. Example: `mcp-inspector node build/index.js -- --config /etc/myserver.conf --verbose`. Without the separator, `--config` would be consumed by the Inspector as its own read-only-session flag.

Inspector CLI/TUI environment variables

The Inspector CLI and TUI read: `MCP_CATALOG_PATH` (fallback for `--catalog`, honoured only when no ad-hoc target is given so an exported value still allows one-off ad-hoc runs), `MCP_CLIENT_CONFIG_PATH` (fallback for `--client-config`), `MCP_OAUTH_CALLBACK_URL` (fallback for `--callback-url`), `MCP_STORAGE_DIR` (directory for the OAuth state file at `<dir>/oauth.json`), `MCP_INSPECTOR_OAUTH_STATE_PATH` (per-file override of the OAuth state path, taking precedence over `MCP_STORAGE_DIR`), and `MCP_AUTO_OPEN_ENABLED` (`true` forces browser auto-open and allows interactive OAuth prompts without a TTY, `false` never opens, unset opens only on a TTY).

Modern logging: per-request _meta log level opt-in

In the modern (2026-07-28) era `logging/setLevel` is removed. The client opts in per request by stamping `_meta["io.modelcontextprotocol/logLevel"]` on each outgoing request, and a server MUST NOT emit `notifications/message` for a request that did not opt in. Logs emitted while handling a request ride that request's SSE response stream. Omitting the `logLevel` key entirely means the call produces no logs at all — that silence is correct behavior, not a bug.

Building and running the Inspector's composable test servers

To reproduce protocol-era behaviors locally, clone https://github.com/modelcontextprotocol/inspector, run `npm install && npm run build` in the repo root, then `cd clients/web && npm run test-servers:build`. Configs live under `test-servers/configs/`, including `logging-legacy-http.json`, `logging-modern-http.json`, `subscriptions-legacy-http.json`, `subscriptions-modern-http.json`, `tasks-legacy-http.json`, `tasks-modern-http.json`, `mrtr-showcase-http.json`, `xmcpheader-modern-http.json`, and `modern-network-http.json`.

Legacy logging: session-scoped logging/setLevel

In the legacy era, logging is session-scoped: the client sends `logging/setLevel` once, and the server then emits `notifications/message` at or above that level for the rest of the session.

Inspector default modern log level is debug

The MCP Inspector's per-server default modern log level is `debug` (opted in at the most verbose level, because it is a debugging tool). Set `modernLogLevel: "off"` on a server entry to opt back out by default.

Run the Inspector from Docker (ghcr image)

A container image is published to GitHub Container Registry for `linux/amd64` and `linux/arm64`: `docker run --rm -p 6274:6274 ghcr.io/modelcontextprotocol/inspector`. Read the session token from the container logs or pin it with `-e MCP_INSPECTOR_API_TOKEN=<value>`. The image defaults to `--web`, binds `0.0.0.0:6274` with browser auto-open off, runs as a non-root user, and sets `DANGEROUSLY_BIND_ALL_INTERFACES=true` because a container must bind the wildcard address to be reachable through `-p`.

stdio server stderr goes to the Inspector Console tab

A stdio MCP server's `stderr` is surfaced in the Inspector's Console tab (in the web UI, and reachable with the `o` key in the TUI). Most stdio servers write diagnostics to stderr, so check the Console tab first when a connection fails with no visible reason.

Launch the web Inspector loopback-only with a pinned token and sandbox port

A safe automation launch is: `TOKEN="$(openssl rand -hex 24)"; HOST=127.0.0.1 CLIENT_PORT=6274 MCP_SANDBOX_PORT=6275 MCP_AUTO_OPEN_ENABLED=false MCP_INSPECTOR_API_TOKEN="$TOKEN" mcp-inspector --web &`. Pinning `MCP_SANDBOX_PORT` matters because the app's UI is served from a separate sandbox port that is dynamic by default and automation needs a fixed address.

Inspector deep link to a rendered MCP App widget

A deep link of the form `http://127.0.0.1:6274/?serverUrl=<encoded url>&transport=http&autoConnect=<TOKEN>&openApp=<tool>&appArgs=<base64url(JSON)>&autoOpen=<TOKEN>` opens a rendered widget. `appArgs` is the tool's arguments as base64url-encoded JSON, and `autoConnect` and `autoOpen` must both equal the session token because `autoOpen` fires a tool call straight from the URL.

Inspector automation DOM contract: app and connection status attributes

Instead of sleeping, poll these Inspector DOM attributes: `[data-testid="apps-form"]` has `data-app-status` reaching `ready` (on failure `data-app-error` carries the reason); `[data-testid="connection-status"]` has `data-status` of `connecting` then `connected` or `error` (`data-error-message` has the detail), and `data-deeplink` of `parsed`, `rejected`, or `none` (`none` means no deep link was given, `rejected` means one was refused).

Docker: add --no-healthcheck for --cli or --tui runs

The Inspector Docker image's `HEALTHCHECK` probes the web UI, so add `--no-healthcheck` when running `--cli` or `--tui`, neither of which starts a web server, e.g. `docker run --rm --no-healthcheck ghcr.io/modelcontextprotocol/inspector --cli <target> --method tools/list`. A `<target>` is an ad-hoc target: a positional stdio command, or `--server-url <url> --transport http`.

Give your agent this brain