Most MCP tutorials wire up a local STDIO server: Claude Desktop spawns a process on your machine and talks to it over stdin/stdout. That works, but it is per-machine — every teammate repeats the setup, secrets live in local config files, and nothing works from a second device. A remote server over Streamable HTTP{' '} is one URL that every installation shares, with auth handled by OAuth instead of plaintext keys in a JSON file.
You need a live MCP endpoint. If you already run one, use its URL. If not, you can{' '} generate one from a prompt {' '} or fork a working one from{' '} the template gallery {' '} — either way you end up with an OAuth-protected URL like{' '} https://my-tools-a1.mcp.buildmymcpserver.com/mcp.
The first time Claude touches the server it will receive a 401 — that is correct behavior, not an error. The client then discovers the authorization server, registers itself via Dynamic Client Registration, and opens a browser window for consent. You approve once; the client stores the token and refreshes it silently afterwards.
Under the hood this is the OAuth 2.1 handshake the MCP spec requires for remote servers: PKCE so the code exchange cannot be intercepted, and Resource Indicators (RFC 8707) so a token issued for this server cannot be replayed against another. Details in{' '} the OAuth documentation .
| Symptom | Likely cause | Fix |
|---|---|---|
| Server never appears in the client | Config JSON is invalid, or Claude was not restarted | Validate the JSON (trailing commas are the classic), restart Claude Desktop fully (quit, not close window). |
| Endless 401 loop, consent screen never opens | URL points at the server root instead of the /mcp endpoint | Use the full endpoint URL ending in /mcp, exactly as the install snippet shows. |
| Consent worked, tools still missing | Server is deployed but tool listing failed on connect | Check the server's live logs for an initialize/list_tools error; redeploy if the container restarted with a bad secret. |
| Tool listed, every call errors | Upstream credential (e.g. your API key) is wrong or expired | Update the secret in the dashboard — secrets are injected at runtime, so a redeploy picks up the new value. They are never shown back, so re-enter rather than inspect. |
| Worked yesterday, 401 today | Token expired and silent refresh failed | Remove and re-add the connector to force a fresh OAuth flow. |
The same URL works in Cursor, VS Code Copilot, Continue.dev and{' '} ChatGPT custom connectors {' '} — the point of hosting a remote MCP server is that the client config is the only per-client step left. If you hit a case this guide does not cover, the{' '} docs FAQ {' '} collects the rarer ones.