Skip to main content
Looking for a specific error code? See the error code reference — every ErrorCard in the inspector deep-links to a section there.
This guide covers common errors you might encounter when working with MCP servers and how to resolve them.

Connection Issues

Diagnose a connection failure

Most “failed to connect” / fetch failed / ECONNREFUSED / MCP error -32000: Connection closed / MCP error -32001: Request timed out reports come down to one of five root causes. Work through them in order — each step takes seconds.
  1. Is the server actually running? Open a second terminal and run the same command you’d ask Inspector to run. If it exits or prints a stack trace, fix that first — Inspector can only attach to a server that stays alive.
    # For STDIO servers — run the same command Inspector would run
    python /Users/yourname/project/server.py
    # or: uv run --directory /Users/yourname/project mcp.py
    # or: npx -y @modelcontextprotocol/server-everything
    
    # For HTTP servers
    curl -i http://localhost:PORT/mcp
    
    A clean stdio process should sit waiting on stdin; a healthy HTTP server should respond with something other than Connection refused (the exact code varies — common responses are 405 Method Not Allowed for GET, 406 Not Acceptable if Accept headers are missing, or 400 Bad Request if the server expects a session header).
  2. Right port, right path? ECONNREFUSED 127.0.0.1:5555 means nothing is listening on that port — typo, wrong port, or the server is bound to 127.0.0.1 only while you’re calling it via a different hostname (or vice versa). SSE error: Non-200 status code (404) means the port is correct but the path is wrong: most MCP servers mount under /mcp or /sse, not /.
  3. Right transport selected? In the server card, the transport dropdown must match what your server speaks. STDIO servers won’t respond to HTTP attempts and vice versa. If you used a url: field in config.json, Inspector picks HTTP; if you used command: + args:, Inspector picks STDIO.
  4. Right auth setting? For local development servers, pick No Authentication. If you get 401, see Getting 401 Unauthorized errors below.
  5. Did the server actually finish booting before the handshake? MCP error -32001: Request timed out during initialize means the server didn’t respond to the handshake in time — usually because it’s still loading models, opening a database, or waiting on an upstream. Raise the Request timeout in Clients → your client → Request timeout (default 30,000ms), or reduce the server’s startup work.
If all five check out and you still see a failure, copy the full error from the JSON-RPC log into a GitHub issue or Discord thread.

(intermediate value).subtle is undefined

The browser’s Web Crypto API (crypto.subtle) is only available in secure contexts — that means HTTPS, or http://localhost / http://127.0.0.1. If you’re hitting Inspector over a non-localhost HTTP URL (for example, a LAN IP like http://192.168.1.10:6274), the browser disables crypto.subtle and OAuth/PKCE flows fail. Fix: open Inspector at http://localhost:6274 or http://127.0.0.1:6274, or put HTTPS in front of it. The hosted app and the desktop app are unaffected.

Server fails to start or connect

  • Use absolute paths: Specify the full path to your server
    • ✅ Good: /Users/yourname/project/server.py
    • ❌ Bad: ./server.py or server.py
  • For uv projects: Use the --directory flag with absolute path
    uv run --directory /Users/username/weather-mcp mcp.py
    
  • Test your command first: Run the server command manually in a terminal to verify it works before adding it to Inspector
  • For HTTP servers: Verify the URL is accessible
    • Test with curl or a browser first

”Invalid host header” when connecting to an HTTP server

This response comes from your MCP server, not from MCPJam Inspector. The server’s HTTP layer is rejecting the request because the Host header isn’t on its allowlist. Most common culprits:
  • Next.js / webpack-dev-server — both block unknown hosts by default in dev mode. Add your host to allowedHosts (webpack-dev-server) or experimental.allowedDevOrigins (Next.js).
  • FastAPI / Starlette (Python)TrustedHostMiddleware rejects hosts not in allowed_hosts. Add the host the inspector is calling from, or temporarily set allowed_hosts=["*"] for local testing.
  • Reverse proxies (nginx, Caddy) — check the server_name / host_match config.
Quick check: test the same URL with curl http://localhost:PORT/mcp — if curl gets the same error, it’s definitely server-side, not inspector.

Authentication Issues

Server fails to connect with authentication errors

If your server is failing to connect, first verify you’ve selected the correct authentication option:
  • No Authentication - Use this for local or development servers that don’t require authentication
  • Bearer Token - Use this if you already have an API token from the server
  • OAuth 2.0 - Use this for servers that require OAuth authorization flow

Getting 401 Unauthorized errors

If you’re seeing 401 Unauthorized errors when trying to connect to your server, this typically means the server requires authentication that hasn’t been set up yet. Solution:
  1. Change your authentication type to OAuth 2.0 in the server configuration
  2. Go through the OAuth authorization flow to obtain credentials
  3. Use the OAuth Debugger to troubleshoot any issues with the OAuth process
The OAuth Debugger helps you step through each part of the authorization process and identify where things might be going wrong.

OAuth connection failures

When an OAuth flow fails, Inspector surfaces the failure directly in the connection UI so you can diagnose the problem without leaving the Servers tab. Connection card — a banner above the error message identifies the exact OAuth step that failed (for example, “OAuth failed during Token Request”). Server detail panel — open the server’s detail view to see the full Last OAuth Trace, which includes:
  • Each OAuth step with its status (pending / success / error) and a short message
  • The specific error for any failed step
  • An HTTP History log of every request and response made during the flow, with sensitive values automatically redacted
Use the trace to pinpoint whether the failure occurred during discovery, client registration, PKCE generation, the authorization redirect, or the token exchange, then cross-reference with the OAuth Debugger for a guided walkthrough of the same steps.

Toggle shows a re-authentication error for an OAuth server

The enable/connect toggle on a server card or detail modal reuses existing credentials only. If your tokens are expired or missing, the toggle will report a re-authentication error rather than opening the OAuth consent screen. Solution: Use the Reconnect button on the server card or detail modal to start a full OAuth flow and obtain new credentials. The toggle is intentionally non-interactive for OAuth to avoid unexpected browser redirects.

Common Configuration Mistakes

  • Missing required environment variables
  • Incorrect transport type selection
  • Typos in server URLs or commands
  • Missing file permissions or executable flags

Chat Model Limit

”MCPJam model limit reached” warning

MCPJam provides free frontier models for chat. When you hit the daily usage limit, the chat surface shows a warning:
MCPJam model limit reached. Add your own API key under LLM Providers in Settings to continue now, or try again in N minutes.
This is an expected quota state, not an error with your MCP server. To continue immediately:
  1. Go to Settings → LLM Providers
  2. Add an API key for any supported provider (OpenAI, Anthropic, Gemini, etc.)
  3. Select that provider’s model in the chat model picker
To wait for the limit to reset: The warning includes the retry window. Free quota resets daily.

Desktop app startup failures

App bounces in the dock and disappears (macOS) or closes immediately

If the desktop app fails to start, it now shows a recovery dialog instead of quitting silently. The dialog offers three options:
  • Reset app data and quit — removes cached data (Cache, Code Cache, GPUCache, Local Storage) from the app’s user data folder and relaunches. Use this when the app crashes consistently after an update or when local data appears corrupted.
  • Open logs folder — opens the folder containing electron-log output, then quits. Use this to inspect the error before deciding whether to reset.
  • Quit — exits without making any changes.

Port 6274 is already in use

The desktop app defaults to port 6274. If another process holds that port, the app automatically tries the next available port up to port 6283. A warning is written to the app logs when a fallback port is used. No action is required — the app starts normally on the fallback port. If you need to free port 6274 manually, find and stop the process occupying it:
# macOS / Linux
lsof -ti :6274 | xargs kill -9

# Windows (PowerShell)
Get-Process -Id (Get-NetTCPConnection -LocalPort 6274).OwningProcess | Stop-Process

App crashes after an automatic update

The desktop app automatically clears stale GPU and HTTP caches (Cache, Code Cache, GPUCache) the first time it launches after a version change. This handles most renderer or GPU process crashes caused by cached data from a previous build. If the app still fails to start after an update, use the Reset app data and quit option in the recovery dialog.

Getting Help

If you’re still experiencing issues:
  1. Check server documentation
    • Review the MCP server’s specific documentation
    • Look for known issues or troubleshooting guides
  2. Community support