That shared core is the practical point: debugging a handshake in the web UI and then asserting the same thing in a pipeline does not mean re-establishing the setup, because the transports, config files and stored OAuth state are identical. The CLI is the mode worth wiring into a build — tools/list on every commit catches the schema change nobody meant to ship.
The MCP Inspector: one package, @modelcontextprotocol/inspector, providing three clients over a shared core — a web inspector, a machine-readable CLI, and a terminal UI. It connects to a server you are building or one you are evaluating.
- A graphical inspector in the browser, the default mode, with a monitoring sidebar that keeps protocol traffic visible while you work
- A scriptable client for CI and shell pipelines: --method tools/list to enumerate, --method tools/call with --tool-name and --tool-arg to invoke, and --format json to pipe the result
- A terminal UI for when a browser is not available or not wanted, behind --tui
- Local stdio servers launched by passing the command directly — an npm package through npx, a PyPI one through uvx
- Remote servers connected with --server-url and --transport http
- The same behaviour across all three clients: the same transports, the same configuration files, the same OAuth state on disk
- Protocol-era negotiation, so a legacy server and a modern one can both be inspected and each tab reflects which era is in play
- Catalog and config files kept separate, so a set of servers to inspect is not the same thing as how one of them is configured
Node 22.19.0 or newer, and nothing installed — npx @modelcontextprotocol/inspector runs it. The web mode prints a URL carrying a one-time session token; open that rather than the bare address. Mode flags are recognised only at the front of the command line, so anything after the first other token is passed to the server unchanged — which is how a server's own --cli argument survives. Upgrading from version 1 changes the CLI flags and splits --config from --catalog; the v1 line still exists on the v1-latest npm tag for security fixes only.
One command — npx @modelcontextprotocol/inspector
