Skip to main content

Stable Remote URL

Use this tutorial when a remote MCP client needs the same HTTPS URL every day while Coding Tools MCP continues to run on your local machine. A stable domain solves one problem: the client can keep the same server URL. It does not make a public multi-user relay by itself, and it does not discover every developer’s laptop automatically.

What one URL means

There are two different designs:
  • Personal stable URL: one developer runs Coding Tools MCP locally and maps a stable hostname such as https://mcp.example.com/mcp to that machine through ngrok, Cloudflare Tunnel, devtunnel, or another reverse tunnel.
  • Hosted relay for many users: a separate service authenticates users, registers devices, keeps outbound sessions from local agents, and routes each request to the right connected workspace.
Coding Tools MCP provides the local MCP runtime and helper tunnel scripts. It does not include a hosted relay, dashboard, device registry, or per-user routing service. Use a subdomain for MCP traffic instead of the apex domain:
For a personal stable URL, this tutorial uses:

Choose the auth mode

Use OAuth when the MCP client supports OAuth 2.1 Authorization Code + PKCE discovery:
Use bearer auth only when the client can send a custom Authorization header:
Do not put the bearer token in a query string. Coding Tools MCP checks the Authorization: Bearer <token> header on /mcp.

ngrok reserved domain

Claim a reserved ngrok domain, then run Coding Tools MCP on loopback and point ngrok at the local port. Terminal 1:
Terminal 2:
Configure the remote MCP client with:
The repository helper script can also run ngrok for quick testing:
Use that script with a stable domain only after your ngrok configuration pins the reserved domain. Otherwise the helper starts a normal ngrok tunnel and the URL may change.

Cloudflare named tunnel

Create a named tunnel and route a DNS hostname to it. Then map that hostname to the local Coding Tools MCP port. One-time setup:
Create or update the Cloudflare tunnel config so the hostname forwards to the local server:
Terminal 1:
Terminal 2:
Configure the remote MCP client with:

Quick tunnel for demos

For temporary testing, the checked-in script can install the package, start the local server, and expose a tunnel:
This is convenient for demos, but the public URL may change on restart. Use a reserved ngrok domain or Cloudflare named tunnel when the client configuration must stay stable.

Verify the URL

Replace BASE_URL with the tunnel origin without /mcp:
For a JSON-RPC ping over HTTP:
If you use bearer auth, add:

Security notes

  • Keep Coding Tools MCP bound to 127.0.0.1; expose only the tunnel URL.
  • Prefer --tool-profile read-only for remote sessions until you explicitly need write tools.
  • Use OAuth or bearer auth for every non-loopback deployment.
  • Treat full plus exec_command as remote code execution inside the configured workspace boundary.
  • Stop the tunnel when testing is done, and rotate tokens or OAuth secrets if they were shared.