The MCP inspector is a developer tool for testing and debugging MCP servers.
The MCP Inspector consists of two main components that work together:
Note that the proxy is not a network proxy for intercepting traffic. Instead, it functions as both an MCP client (connecting to your MCP server) and an HTTP server (serving the web UI), enabling browser-based interaction with MCP servers that use different transport protocols.
To get up and running right away with the UI, just execute the following:
npx @modelcontextprotocol/inspector
The server will start up and the UI will be accessible at http://localhost:6274
.
To inspect an MCP server implementation, there's no need to clone this repo. Instead, use npx
. For example, if your server is built at build/index.js
:
npx @modelcontextprotocol/inspector node build/index.js
You can pass both arguments and environment variables to your MCP server. Arguments are passed directly to your server, while environment variables can be set using the -e
flag:
# Pass arguments only npx @modelcontextprotocol/inspector node build/index.js arg1 arg2 # Pass environment variables only npx @modelcontextprotocol/inspector -e key=value -e key2=$VALUE2 node build/index.js # Pass both environment variables and arguments npx @modelcontextprotocol/inspector -e key=value -e key2=$VALUE2 node build/index.js arg1 arg2 # Use -- to separate inspector flags from server arguments npx @modelcontextprotocol/inspector -e key=$VALUE -- node build/index.js -e server-flag
The inspector runs both an MCP Inspector (MCPI) client UI (default port 6274) and an MCP Proxy (MCPP) server (default port 6277). Open the MCPI client UI in your browser to use the inspector. (These ports are derived from the T9 dialpad mapping of MCPI and MCPP respectively, as a mnemonic). You can customize the ports if needed:
CLIENT_PORT=8080 SERVER_PORT=9000 npx @modelcontextprotocol/inspector node build/index.js
For more details on ways to use the inspector, see the Inspector section of the MCP docs site. For help with debugging, see the Debugging guide.
The MCP Inspector provides convenient buttons to export server launch configurations for use in clients such as Cursor, Claude Code, or the Inspector's CLI. The file is usually called mcp.json
.
Server Entry - Copies a single server configuration entry to your clipboard. This can be added to your mcp.json
file inside the mcpServers
object with your preferred server name.
STDIO transport example:
{ "command": "node", "args": ["build/index.js", "--debug"], "env": { "API_KEY": "your-api-key", "DEBUG": "true" } }
SSE transport example:
{ "type": "sse", "url": "http://localhost:3000/events", "note": "For SSE connections, add this URL directly in Client" }
Servers File - Copies a complete MCP configuration file structure to your clipboard, with your current server configuration added as default-server
. This can be saved directly as mcp.json
.
STDIO transport example:
{ "mcpServers": { "default-server": { "command": "node", "args": ["build/index.js", "--debug"], "env": { "API_KEY": "your-api-key", "DEBUG": "true" } } } }
SSE transport example:
{ "mcpServers": { "default-server": { "type": "sse", "url": "http://localhost:3000/events", "note": "For SSE connections, add this URL directly in Client" } } }
These buttons appear in the Inspector UI after you've configured your server settings, making it easy to save and reuse your configurations.
For SSE transport connections, the Inspector provides similar functionality for both buttons. The "Server Entry" button copies the SSE URL configuration that can be added to your existing configuration file, while the "Servers File" button creates a complete configuration file containing the SSE URL for direct use in clients.
You can paste the Server Entry into your existing mcp.json
file under your chosen server name, or use the complete Servers File payload to create a new configuration file.
The inspector supports bearer token authentication for SSE connections. Enter your token in the UI when connecting to an MCP server, and it will be sent in the Authorization header. You can override the header name using the input field in the sidebar.
The MCP Inspector includes a proxy server that can run and communicate with local MCP processes. The proxy server should not be exposed to untrusted networks as it has permissions to spawn local processes and can connect to any specified MCP server.
The MCP Inspector proxy server requires authentication by default. When starting the server, a random session token is generated and printed to the console:
🔑 Session token: 3a1c267fad21f7150b7d624c160b7f09b0b8c4f623c7107bbf13378f051538d4
🔗 Open inspector with token pre-filled:
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=3a1c267fad21f7150b7d624c160b7f09b0b8c4f623c7107bbf13378f051538d4
This token must be included as a Bearer token in the Authorization header for all requests to the server. The inspector will automatically open your browser with the token pre-filled in the URL.
Automatic browser opening - The inspector now automatically opens your browser with the token pre-filled in the URL when authentication is enabled.
Alternative: Manual configuration - If you already have the inspector open:
The token will be saved in your browser's local storage for future use.
If you need to disable authentication (NOT RECOMMENDED), you can set the DANGEROUSLY_OMIT_AUTH
environment variable:
DANGEROUSLY_OMIT_AUTH=true npm start
You can also set the token via the MCP_PROXY_AUTH_TOKEN
environment variable when starting the server:
MCP_PROXY_AUTH_TOKEN=$(openssl rand -hex 32) npm start
By default, both the MCP Inspector proxy server and client bind only to localhost
to prevent network access. This ensures they are not accessible from other devices on the network. If you need to bind to all interfaces for development purposes, you can override this with the HOST
environment variable:
Warning: Only bind to all interfaces in trusted network environments, as this exposes the proxy server's ability to execute local processes and both services to network access.
To prevent DNS rebinding attacks, the MCP Inspector validates the Origin
header on incoming requests. By default, only requests from the client origin are allowed (respects CLIENT_PORT
if set, defaulting to port 6274). You can configure additional allowed origins by setting the ALLOWED_ORIGINS
environment variable (comma-separated list):
ALLOWED_ORIGINS=http://localhost:6274,http://localhost:8000 npm start
The MCP Inspector supports the following configuration settings. To change them, click on the Configuration
button in the MCP Inspector UI:
MCP_SERVER_REQUEST_TIMEOUT
Timeout for requests to the MCP server (ms) 10000 MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS
Reset timeout on progress notifications true MCP_REQUEST_MAX_TOTAL_TIMEOUT
Maximum total timeout for requests sent to the MCP server (ms) (Use with progress notifications) 60000 MCP_PROXY_FULL_ADDRESS
Set this if you are running the MCP Inspector Proxy on a non-default address. Example: http://10.1.1.22:5577 "" MCP_AUTO_OPEN_ENABLED
Enable automatic browser opening when inspector starts (works with authentication enabled). Only as environment var, not configurable in browser. true
These settings can be adjusted in real-time through the UI and will persist across sessions.
The inspector also supports configuration files to store settings for different MCP servers. This is useful when working with multiple servers or complex configurations:
npx @modelcontextprotocol/inspector --config path/to/config.json --server everything
Example server configuration file:
{ "mcpServers": { "everything": { "command": "npx", "args": ["@modelcontextprotocol/server-everything"], "env": { "hello": "Hello MCP!" } }, "my-server": { "command": "node", "args": ["build/index.js", "arg1", "arg2"], "env": { "key": "value", "key2": "value2" } } } }Transport Types in Config Files
The inspector automatically detects the transport type from your config file. You can specify different transport types:
STDIO (default):
{ "mcpServers": { "my-stdio-server": { "type": "stdio", "command": "npx", "args": ["@modelcontextprotocol/server-everything"] } } }
SSE (Server-Sent Events):
{ "mcpServers": { "my-sse-server": { "type": "sse", "url": "http://localhost:3000/sse" } } }
Streamable HTTP:
{ "mcpServers": { "my-http-server": { "type": "streamable-http", "url": "http://localhost:3000/mcp" } } }
You can launch the inspector without specifying a server name if your config has:
# Automatically uses "my-server" if it's the only one npx @modelcontextprotocol/inspector --config mcp.json
{ "mcpServers": { "default-server": { "command": "npx", "args": ["@modelcontextprotocol/server-everything"] }, "other-server": { "command": "node", "args": ["other.js"] } } }
Tip: You can easily generate this configuration format using the Server Entry and Servers File buttons in the Inspector UI, as described in the Servers File Export section above.
You can also set the initial transport
type, serverUrl
, serverCommand
, and serverArgs
via query params, for example:
http://localhost:6274/?transport=sse&serverUrl=http://localhost:8787/sse
http://localhost:6274/?transport=streamable-http&serverUrl=http://localhost:8787/mcp
http://localhost:6274/?transport=stdio&serverCommand=npx&serverArgs=arg1%20arg2
You can also set initial config settings via query params, for example:
http://localhost:6274/?MCP_SERVER_REQUEST_TIMEOUT=10000&MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS=false&MCP_PROXY_FULL_ADDRESS=http://10.1.1.22:5577
Note that if both the query param and the corresponding localStorage item are set, the query param will take precedence.
If you're working on the inspector itself:
Development mode:
npm run dev # To co-develop with the typescript-sdk package (assuming it's cloned in ../typescript-sdk; set MCP_SDK otherwise): npm run dev:sdk "cd sdk && npm run examples:simple-server:w" # then open http://localhost:3000/mcp as SHTTP in the inspector. # To go back to the deployed SDK version: # npm run unlink:sdk && npm i
Note for Windows users: On Windows, use the following command instead:
Production mode:
CLI mode enables programmatic interaction with MCP servers from the command line, ideal for scripting, automation, and integration with coding assistants. This creates an efficient feedback loop for MCP server development.
npx @modelcontextprotocol/inspector --cli node build/index.js
The CLI mode supports most operations across tools, resources, and prompts. A few examples:
# Basic usage npx @modelcontextprotocol/inspector --cli node build/index.js # With config file npx @modelcontextprotocol/inspector --cli --config path/to/config.json --server myserver # List available tools npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list # Call a specific tool npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name mytool --tool-arg key=value --tool-arg another=value2 # List available resources npx @modelcontextprotocol/inspector --cli node build/index.js --method resources/list # List available prompts npx @modelcontextprotocol/inspector --cli node build/index.js --method prompts/list # Connect to a remote MCP server (default is SSE transport) npx @modelcontextprotocol/inspector --cli https://my-mcp-server.example.com # Connect to a remote MCP server (with Streamable HTTP transport) npx @modelcontextprotocol/inspector --cli https://my-mcp-server.example.com --transport http --method tools/list # Call a tool on a remote server npx @modelcontextprotocol/inspector --cli https://my-mcp-server.example.com --method tools/call --tool-name remotetool --tool-arg param=value # List resources from a remote server npx @modelcontextprotocol/inspector --cli https://my-mcp-server.example.com --method resources/listUI Mode vs CLI Mode: When to Use Each Use Case UI Mode CLI Mode Server Development Visual interface for interactive testing and debugging during development Scriptable commands for quick testing and continuous integration; creates feedback loops with AI coding assistants like Cursor for rapid development Resource Exploration Interactive browser with hierarchical navigation and JSON visualization Programmatic listing and reading for automation and scripting Tool Testing Form-based parameter input with real-time response visualization Command-line tool execution with JSON output for scripting Prompt Engineering Interactive sampling with streaming responses and visual comparison Batch processing of prompts with machine-readable output Debugging Request history, visualized errors, and real-time notifications Direct JSON output for log analysis and integration with other tools Automation N/A Ideal for CI/CD pipelines, batch processing, and integration with coding assistants Learning MCP Rich visual interface helps new users understand server capabilities Simplified commands for focused learning of specific endpoints
This project is licensed under the MIT License—see the LICENSE file for details.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4