<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>MCP Warp | Blog</title><description>Give your local MCP servers a public, OAuth-protected URL. Like ngrok, but built for MCP.</description><link>https://mcpwarp.io/</link><language>en</language><fh:complete/><atom:link rel="self" href="https://mcpwarp.io/blog/rss.xml"/><item><title>ngrok alternative for MCP: ngrok vs Cloudflare Tunnel vs Tailscale Funnel vs MCP Warp</title><link>https://mcpwarp.io/blog/ngrok-alternative-for-mcp/</link><guid isPermaLink="true">https://mcpwarp.io/blog/ngrok-alternative-for-mcp/</guid><description>ngrok, Cloudflare Tunnel, Tailscale Funnel and MCP Warp compared for MCP servers. Setup, OAuth, stdio, stable URLs and price, plus free options.</description><pubDate>Sat, 10 Oct 2026 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;For MCP servers, the main ngrok alternatives are Cloudflare Tunnel with Access (free, needs a domain and an identity provider), Tailscale Funnel (no auth of its own, reported failures with claude.ai), and MCP-specific tunnels like MCP Warp or mcptunnels, which add OAuth and stdio support. ChatGPT-only users can use OpenAI’s Secure MCP Tunnel and its open-source client.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you reached for ngrok out of habit, got a URL, and claude.ai still won’t connect or you’re uneasy about an open URL to your laptop, this page compares what else is out there. For how to add a URL to each client once you have one, see &lt;a href=&quot;https://mcpwarp.io/blog/remote-mcp-server-url/&quot;&gt;One URL for your MCP server, in every client&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-an-mcp-tunnel-has-to-do-that-a-web-tunnel-doesnt&quot;&gt;What an MCP tunnel has to do that a web tunnel doesn’t&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Any tunnel gives a local port a public HTTPS address. For an MCP server used from claude.ai, ChatGPT or the Claude mobile apps, three more things matter:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Auth that MCP clients understand.&lt;/strong&gt; A public URL to an MCP server lets anyone who finds it run your tools on your machine. MCP clients discover OAuth on their own: an unauthenticated request gets a &lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; with a &lt;code dir=&quot;auto&quot;&gt;WWW-Authenticate&lt;/code&gt; header pointing at Protected Resource Metadata (RFC 9728), and the client runs the sign-in. claude.ai also accepts a fixed header, which is simpler and weaker. A tunnel that only offers IP rules or a shared key leaves the OAuth part to you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A stable URL.&lt;/strong&gt; A custom connector stores the URL. If the tunnel hands out a new random hostname every time it starts, you re-add the connector every time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;stdio.&lt;/strong&gt; Many MCP servers only speak stdio: the client is expected to launch them as a process. A web tunnel forwards HTTP, so a stdio server needs a bridge such as supergateway in front. &lt;a href=&quot;https://mcpwarp.io/blog/stdio-mcp-server-to-http/&quot;&gt;Use a stdio MCP server in claude.ai and ChatGPT without deploying it&lt;/a&gt; covers that in detail.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;comparison-table&quot;&gt;Comparison table&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As of 10 October 2026. Prices and limits change; check each vendor’s page before you decide.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tunnel&lt;/th&gt;
&lt;th&gt;OAuth for MCP clients&lt;/th&gt;
&lt;th&gt;stdio&lt;/th&gt;
&lt;th&gt;Stable URL&lt;/th&gt;
&lt;th&gt;Needs your own domain&lt;/th&gt;
&lt;th&gt;Setup steps&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://ngrok.com/docs/using-ngrok-with/using-mcp&quot;&gt;ngrok&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No. ngrok’s MCP guide shows IP rules and API-key checks&lt;/td&gt;
&lt;td&gt;Needs a bridge&lt;/td&gt;
&lt;td&gt;Yes, one auto-assigned dev domain on Free&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Account, agent, Traffic Policy, bridge for stdio&lt;/td&gt;
&lt;td&gt;Free tier; Hobbyist $10/month; custom domains from Pay-as-you-go ($20/month plus usage)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; plus Access&lt;/td&gt;
&lt;td&gt;You configure Access and an identity provider&lt;/td&gt;
&lt;td&gt;Needs a bridge&lt;/td&gt;
&lt;td&gt;Yes, on a named tunnel&lt;/td&gt;
&lt;td&gt;Yes, a domain on Cloudflare&lt;/td&gt;
&lt;td&gt;Domain, cloudflared, tunnel, hostname, Access app, identity provider, bridge for stdio&lt;/td&gt;
&lt;td&gt;Free tier (see &lt;a href=&quot;https://www.cloudflare.com/plans/zero-trust-services/&quot;&gt;Cloudflare’s pricing&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://tailscale.com/docs/features/tailscale-funnel&quot;&gt;Tailscale Funnel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No auth of its own&lt;/td&gt;
&lt;td&gt;Needs a bridge&lt;/td&gt;
&lt;td&gt;Yes, &lt;code dir=&quot;auto&quot;&gt;device.tailnet.ts.net&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Tailscale on the machine, enable Funnel, auth in your server, bridge for stdio&lt;/td&gt;
&lt;td&gt;Not stated in the Funnel doc; available on all plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP Warp&lt;/td&gt;
&lt;td&gt;Yes, OAuth at the edge, owner only&lt;/td&gt;
&lt;td&gt;Yes, spawns the command&lt;/td&gt;
&lt;td&gt;Yes, named per server&lt;/td&gt;
&lt;td&gt;No, URLs are under &lt;code dir=&quot;auto&quot;&gt;tunnel.mcpwarp.io&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Install, sign in once on the web, config file, &lt;code dir=&quot;auto&quot;&gt;mcpwarp login&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Free (100 requests/month, 1 server); &lt;a href=&quot;https://mcpwarp.io/pricing/&quot;&gt;$5 or $10/month&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The “Needs your own domain” column means a domain you register and point at the service. “No” means the service gives you a hostname under its own domain.&lt;/p&gt;
&lt;p&gt;MCP-specific and first-party options, covered further down. This table swaps “Needs your own domain” and “Setup steps” for “Who it serves”, because these tools differ mostly in which clients they reach:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;OAuth for MCP clients&lt;/th&gt;
&lt;th&gt;stdio&lt;/th&gt;
&lt;th&gt;Stable URL&lt;/th&gt;
&lt;th&gt;Who it serves&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/terragohan/mcptunnels&quot;&gt;mcptunnels&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes, by default (generated password on the authorize page)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No, random URL, expires after 24h&lt;/td&gt;
&lt;td&gt;Any Streamable HTTP client&lt;/td&gt;
&lt;td&gt;Free, no signup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;OpenAI Secure MCP Tunnel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;n/a, server stays private&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;ChatGPT, Codex, the Responses API, AgentKit&lt;/td&gt;
&lt;td&gt;Open-source client; no cost stated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;Anthropic MCP tunnels&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No, OAuth on each server is yours&lt;/td&gt;
&lt;td&gt;No, Streamable HTTP only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Claude, for Enterprise organizations&lt;/td&gt;
&lt;td&gt;Enterprise plan only, by request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.mcp-use.com/tunneling&quot;&gt;mcp-use tunnel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No, the server’s own auth applies&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;td&gt;No, expires after 24h&lt;/td&gt;
&lt;td&gt;Servers built with mcp-use&lt;/td&gt;
&lt;td&gt;Not stated; “for local testing”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;ngrok&quot;&gt;ngrok&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;ngrok is a strong general-purpose tunnel, and it now presents itself for MCP. Its &lt;a href=&quot;https://ngrok.com/docs/using-ngrok-with/using-mcp&quot;&gt;MCP guide&lt;/a&gt; calls ngrok an “MCP gateway” that lets you “securely expose your local development environment to AI platforms like OpenAI and Claude.” For protection, ngrok’s MCP guide shows Traffic Policy rules restricting traffic to Anthropic’s IP addresses, checking an API key in the &lt;code dir=&quot;auto&quot;&gt;Authorization&lt;/code&gt; header, and rate limiting per key.&lt;/p&gt;
&lt;p&gt;That’s useful, and it’s not MCP OAuth. The guide doesn’t cover Protected Resource Metadata or dynamic client registration, so claude.ai won’t find a sign-in on its own. An API key does work with claude.ai if you put it in the custom connector’s “Request headers” field, which Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;help article&lt;/a&gt; describes as “fixed credentials such as API keys that Claude sends on every request”. That’s a shared secret living in a connector setting. An IP allowlist on its own isn’t per-user either: it admits every request from Anthropic’s range, &lt;code dir=&quot;auto&quot;&gt;160.79.104.0/21&lt;/code&gt; (&lt;a href=&quot;https://platform.claude.com/docs/en/api/ip-addresses&quot;&gt;Anthropic’s IP addresses page&lt;/a&gt;), whoever’s chat it came from.&lt;/p&gt;
&lt;p&gt;ngrok forwards HTTP, so a stdio server needs a bridge in front.&lt;/p&gt;
&lt;p&gt;On URLs and price, from ngrok’s &lt;a href=&quot;https://ngrok.com/pricing&quot;&gt;pricing page&lt;/a&gt; and &lt;a href=&quot;https://ngrok.com/docs/gateway/domains&quot;&gt;domains docs&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Free&lt;/strong&gt; includes one dev domain. ngrok says “Every ngrok account comes with a free Dev Domain” whose URL “is automatically generated and cannot be changed”, and calls it “a stable, auto-assigned hostname”. So the URL stays the same across restarts; you just can’t choose it. Free also lists up to 1GB of data transfer, up to 20k HTTP/S requests, and an interstitial page on HTTP/S endpoints. We haven’t tested how MCP clients handle that interstitial.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hobbyist&lt;/strong&gt; is $10 a month (less with annual billing), with 10 ngrok-branded domains and no interstitial page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pay-as-you-go&lt;/strong&gt; starts at $20 a month plus usage and is the first plan that lets you bring your own custom domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ngrok makes sense if you already use it, you’re happy with a fixed key or IP rules, and your server speaks Streamable HTTP.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;cloudflare-tunnel-with-access&quot;&gt;Cloudflare Tunnel with Access&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Cloudflare Tunnel is free and robust, and with Access in front it can do real sign-in. The cost is setup. Counting the steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Have a domain on Cloudflare. Cloudflare’s &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/&quot;&gt;tunnel guide&lt;/a&gt; says “Before you publish an application through your tunnel, you must add a website to Cloudflare.”&lt;/li&gt;
&lt;li&gt;Create a tunnel in the dashboard and install &lt;code dir=&quot;auto&quot;&gt;cloudflared&lt;/code&gt; on your machine.&lt;/li&gt;
&lt;li&gt;Add a public hostname that points at the local MCP port.&lt;/li&gt;
&lt;li&gt;Set up Zero Trust and create an Access application for that hostname.&lt;/li&gt;
&lt;li&gt;Connect an identity provider.&lt;/li&gt;
&lt;li&gt;Make the result something an MCP client can discover and sign in to. This is the fiddly part: &lt;a href=&quot;https://zenn.dev/hideakitamai/articles/6747c9bd56bd4f?locale=en&quot;&gt;this write-up on zenn&lt;/a&gt; shows what the DIY route takes, and &lt;a href=&quot;https://github.com/dalberto/mcp-ferry&quot;&gt;mcp-ferry&lt;/a&gt; exists to glue the pieces together.&lt;/li&gt;
&lt;li&gt;Add a stdio bridge if the server needs one.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Quick tunnels skip most of that. Per &lt;a href=&quot;https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/&quot;&gt;Cloudflare’s docs&lt;/a&gt;, “You do not need a Cloudflare account or domain”, but “the hostname changes each time you create a Quick Tunnel”, nothing sits in front to check who’s calling, and “Quick Tunnels do not support Server-Sent Events (SSE)”, which Streamable HTTP servers use to stream responses. Cloudflare says they “are for testing and development”. They suit a five-minute check. A connector you keep needs a hostname that doesn’t change.&lt;/p&gt;
&lt;p&gt;If you already own a domain on Cloudflare and don’t mind an afternoon of configuration, this is a good free choice.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;tailscale-funnel&quot;&gt;Tailscale Funnel&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Tailscale is built for private networks between your own devices. Funnel is the part that puts a service on the public internet: &lt;code dir=&quot;auto&quot;&gt;tailscale funnel 3000&lt;/code&gt; publishes local port 3000 at a hostname like &lt;code dir=&quot;auto&quot;&gt;https://amelie-workstation.pango-lin.ts.net&lt;/code&gt;. Per &lt;a href=&quot;https://tailscale.com/docs/features/tailscale-funnel&quot;&gt;Tailscale’s docs&lt;/a&gt;, Funnel “is available for all plans”, “is currently in beta”, “can only listen on ports &lt;code dir=&quot;auto&quot;&gt;443&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;8443&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;10000&lt;/code&gt;”, and traffic over it “is subject to non-configurable bandwidth limits”.&lt;/p&gt;
&lt;p&gt;Funnel adds no auth for public traffic: it shares a service “for anyone to access”. Whatever protects your MCP server has to be in the server or a proxy in front of it. And there are reports of Funnel URLs failing with claude.ai. &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/953&quot;&gt;anthropics/claude-ai-mcp #953&lt;/a&gt; describes a Funnel-hosted server “being fully reachable and functional from outside” that still gets “Couldn’t reach the MCP server”, and &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/864&quot;&gt;#864&lt;/a&gt; reports “Authorization with the MCP server failed” through Funnel. The &lt;a href=&quot;https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/&quot;&gt;checklist for “Couldn’t reach the MCP server”&lt;/a&gt; has the details.&lt;/p&gt;
&lt;p&gt;claude.ai can’t join your tailnet, so plain tailnet addresses never work for web clients. Tailscale works well for Claude Code or VS Code on your own devices: they run locally, so a tailnet address to a server on another of your machines works without Funnel.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;mcp-warp&quot;&gt;MCP Warp&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;MCP Warp is the tunnel we build, so weigh this section accordingly. It was made for the three requirements above: each server gets its own named URL, &lt;code dir=&quot;auto&quot;&gt;https://&amp;#x3C;name&gt;-&amp;#x3C;username&gt;.tunnel.mcpwarp.io/mcp&lt;/code&gt;, with OAuth at the edge, and it can spawn stdio servers itself or proxy to a local Streamable HTTP server.&lt;/p&gt;
&lt;p&gt;Every request needs an OAuth token, and the edge checks that the token belongs to the server’s owner; a valid token from another account gets a &lt;code dir=&quot;auto&quot;&gt;403&lt;/code&gt;. That also means a URL works for your account only, so it isn’t a way to share a server with other people. See &lt;a href=&quot;https://mcpwarp.io/docs/concepts/security/&quot;&gt;Security&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first run: install the CLI, sign in once at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to pick a username, then add the server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;stdio&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;uvx&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender-mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;env&quot;&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;span&gt;&quot;BLENDER_PATH&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/Applications/Blender.app&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME     KIND   URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;blender  stdio  https://blender-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After that it’s &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; each time. The URL stays the same as long as the server’s name doesn’t change. &lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt; has the full walkthrough, and &lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-a-stdio-server/&quot;&gt;Expose a stdio server&lt;/a&gt; covers the stdio bridge and its limits.&lt;/p&gt;
&lt;p&gt;The trade-offs: &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; must be running, or the URL returns &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt;. The Free plan is 100 requests a month and 1 server, and every HTTP request a client makes counts, so Free is for trying it out. Plus is $5 a month with unlimited requests and 1 server; Pro is $10 a month with unlimited requests and servers (&lt;a href=&quot;https://mcpwarp.io/docs/reference/limits-and-quotas/&quot;&gt;Limits and quotas&lt;/a&gt;). MCP Warp is small and new.&lt;/p&gt;
&lt;p&gt;MCP Warp isn’t certified by Anthropic or OpenAI; it’s built to work with Claude and ChatGPT as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;other-options-worth-knowing&quot;&gt;Other options worth knowing&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/terragohan/mcptunnels&quot;&gt;mcptunnels&lt;/a&gt;&lt;/strong&gt; is the closest free equivalent. One command bridges a stdio server and gives it a public URL:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcptunnel&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@modelcontextprotocol/server-everything&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Its README says tunnels are “anonymous, OAuth-protected by default, and expire after 24 hours.” The CLI prints the URL and a generated password, and you enter the password on the authorize page during the client’s OAuth flow. The URL has a random segment, so when the tunnel expires you get a new one and re-add the connector. That 24-hour limit is the real catch; the tool itself does the job. You can also run its relay yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;OpenAI Secure MCP Tunnel&lt;/a&gt;&lt;/strong&gt; connects “private or localhost MCP servers to ChatGPT, Codex, the Responses API, and AgentKit” while keeping the server off the public internet, and it can spawn stdio servers. It’s first-party, and the client is open source. If ChatGPT is the only client you use, it’s probably the better pick. It does nothing for claude.ai. OpenAI’s &lt;a href=&quot;https://developers.openai.com/blog/connect-private-mcp-servers-to-openai-products&quot;&gt;announcement&lt;/a&gt; has the setup.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.mcp-use.com/tunneling&quot;&gt;mcp-use tunnels&lt;/a&gt;&lt;/strong&gt; come with the mcp-use framework (&lt;code dir=&quot;auto&quot;&gt;mcp-use dev --tunnel&lt;/code&gt;). URLs look like &lt;code dir=&quot;auto&quot;&gt;https://&amp;#x3C;adjective&gt;-&amp;#x3C;color&gt;.tunnel.mcp-use.run/mcp&lt;/code&gt;, “Connected tunnels expire after 24 hours”, each IP can have up to 5 active tunnels, and the docs say they “are for local testing before deployment”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anthropic’s MCP tunnels&lt;/strong&gt; are first-party but not free for most people: they are “available to organizations on the Claude Enterprise plan by request”, run inside your network on Kubernetes or Docker Compose with cloudflared, and carry Streamable HTTP only (&lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;Anthropic docs&lt;/a&gt;).&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;which-one-to-pick&quot;&gt;Which one to pick&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You only use ChatGPT.&lt;/strong&gt; OpenAI’s Secure MCP Tunnel. Open-source client, stdio included, nothing public.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You’re on Claude Enterprise.&lt;/strong&gt; Ask your admin about Anthropic’s MCP tunnels before anything else.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You own a domain on Cloudflare and like configuring things.&lt;/strong&gt; Cloudflare Tunnel with Access. Free, solid, a few hours of setup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You only use clients on your own devices (Claude Code, VS Code).&lt;/strong&gt; Tailscale without Funnel, or plain localhost on the same machine. No public URL needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You already pay for ngrok and your server speaks HTTP.&lt;/strong&gt; ngrok with an API key in a request header and IP rules. The key is a shared secret, so anyone holding it gets in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You want to test a server in claude.ai today, for free.&lt;/strong&gt; mcptunnels. Expect to re-add the connector after 24 hours.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You want claude.ai, ChatGPT and the Claude phone app on one URL that doesn’t change, with OAuth and stdio handled, and no domain.&lt;/strong&gt; MCP Warp, with the Free plan to try it.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Use a stdio MCP server in claude.ai and ChatGPT without deploying it</title><link>https://mcpwarp.io/blog/stdio-mcp-server-to-http/</link><guid isPermaLink="true">https://mcpwarp.io/blog/stdio-mcp-server-to-http/</guid><description>claude.ai and ChatGPT can&apos;t launch a stdio MCP server. How to bridge stdio to Streamable HTTP and get a public, OAuth-protected URL without deploying.</description><pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;To use a stdio MCP server from claude.ai or ChatGPT, you need three things: a bridge that turns stdio into Streamable HTTP (supergateway or mcp-proxy), a public HTTPS URL (a tunnel), and auth in front of it, ideally OAuth. Some tools do all three at once: MCP Warp and mcptunnels spawn the command and give it an OAuth-protected URL.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If your server already speaks Streamable HTTP, skip to &lt;a href=&quot;https://mcpwarp.io/blog/remote-mcp-server-url/&quot;&gt;One URL for your MCP server, in every client&lt;/a&gt;, which covers getting a URL and adding it to each client, or see &lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-an-http-server/&quot;&gt;Expose an HTTP server&lt;/a&gt; for the MCP Warp config.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;why-web-clients-cant-use-stdio&quot;&gt;Why web clients can’t use stdio&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A stdio server is a program the client starts. In Claude Desktop’s JSON config you write &lt;code dir=&quot;auto&quot;&gt;&quot;command&quot;: &quot;uvx&quot;, &quot;args&quot;: [&quot;some-server&quot;]&lt;/code&gt;, and Claude Desktop launches that as a child process, writes JSON-RPC messages to its stdin and reads replies from its stdout. That only works when the client and the server are on the same machine.&lt;/p&gt;
&lt;p&gt;claude.ai and ChatGPT run in someone else’s data centre. When you add a custom connector, Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;help article&lt;/a&gt; says “Claude connects to your remote MCP server from Anthropic’s cloud infrastructure, rather than from your local device.” Those servers can’t start a process on your laptop, and they can’t reach &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; on it either. They need a URL.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;stdio-streamable-http-and-sse-in-two-minutes&quot;&gt;stdio, Streamable HTTP and SSE in two minutes&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;MCP defines how messages travel between client and server. There are three transports you’ll run into:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transport&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;stdio&lt;/td&gt;
&lt;td&gt;The client spawns the server and exchanges newline-delimited JSON-RPC over stdin and stdout.&lt;/td&gt;
&lt;td&gt;Current. Local clients only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streamable HTTP&lt;/td&gt;
&lt;td&gt;The server listens at one HTTP endpoint, usually &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt;. Clients &lt;code dir=&quot;auto&quot;&gt;POST&lt;/code&gt; messages there, and the server can answer with JSON or stream the response.&lt;/td&gt;
&lt;td&gt;Current. What remote clients use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP+SSE (2024-11-05)&lt;/td&gt;
&lt;td&gt;A &lt;code dir=&quot;auto&quot;&gt;GET /sse&lt;/code&gt; stream for server messages plus &lt;code dir=&quot;auto&quot;&gt;POST /messages&lt;/code&gt; for client messages.&lt;/td&gt;
&lt;td&gt;Legacy, replaced by Streamable HTTP.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Which clients take which:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Client&lt;/th&gt;
&lt;th&gt;stdio&lt;/th&gt;
&lt;th&gt;Streamable HTTP URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;claude.ai, ChatGPT&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, as a custom connector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude mobile apps&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, connectors added on the web sync to the phone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Desktop&lt;/td&gt;
&lt;td&gt;Yes, in &lt;code dir=&quot;auto&quot;&gt;claude_desktop_config.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes, as a custom connector (public URL only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, &lt;code dir=&quot;auto&quot;&gt;claude mcp add --transport http&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, &lt;code dir=&quot;auto&quot;&gt;&quot;type&quot;: &quot;http&quot;&lt;/code&gt; in &lt;code dir=&quot;auto&quot;&gt;mcp.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;So the job is to turn a stdio program into a Streamable HTTP endpoint that the web clients can reach.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-three-jobs&quot;&gt;The three jobs&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Getting a stdio server into claude.ai takes three separate pieces of work:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;claude.ai / ChatGPT          in Anthropic&apos;s or OpenAI&apos;s cloud&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  HTTPS + auth            job 3: auth (OAuth, or a fixed header)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Public URL                   job 2: a tunnel or a host&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Bridge on your machine       job 1: Streamable HTTP in, stdio out&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  stdin / stdout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Your stdio server            uvx ..., npx ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Bridge.&lt;/strong&gt; Something listens on HTTP and turns each request into stdio messages for the child process.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Public URL.&lt;/strong&gt; A tunnel (or a host) gives that local HTTP endpoint an address the internet can reach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auth.&lt;/strong&gt; Once the URL is public, anyone who finds it can call your tools, on your machine, with your permissions. Something has to decide who gets through.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/punkpeye/mcp-remote&quot;&gt;mcp-remote&lt;/a&gt; often comes up in these searches, and it goes the other way. It lets a stdio-only client reach a server that already has a URL. It doesn’t help a web client reach your stdio server.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mcpwarp.io/docs/concepts/how-mcp-warp-works/&quot;&gt;How MCP Warp works&lt;/a&gt; shows the same path for one specific tunnel.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;option-a-bridge-plus-tunnel-plus-auth&quot;&gt;Option A: bridge plus tunnel plus auth&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This is the free, do-it-yourself route, with one tool per job.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The bridge.&lt;/strong&gt; Two popular choices are &lt;a href=&quot;https://github.com/supercorp-ai/supergateway&quot;&gt;supergateway&lt;/a&gt; and the TypeScript &lt;a href=&quot;https://github.com/punkpeye/mcp-proxy&quot;&gt;mcp-proxy&lt;/a&gt;. Both are widely used: between 9 September and 8 October 2026, supergateway had about 596,000 npm downloads and mcp-proxy about 3.2 million (&lt;a href=&quot;https://api.npmjs.org/downloads/point/last-month/supergateway,mcp-proxy&quot;&gt;npm API&lt;/a&gt;). With supergateway:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;supergateway&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--stdio&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;npx -y @modelcontextprotocol/server-filesystem ./my-folder&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--outputTransport&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamableHttp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--port&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;That serves the filesystem server at &lt;code dir=&quot;auto&quot;&gt;http://localhost:8000/mcp&lt;/code&gt;. supergateway also has &lt;code dir=&quot;auto&quot;&gt;--apiKey&lt;/code&gt;, which makes clients present a key as a bearer token or &lt;code dir=&quot;auto&quot;&gt;X-API-Key&lt;/code&gt; header. mcp-proxy’s usage is &lt;code dir=&quot;auto&quot;&gt;npx mcp-proxy [options] -- &amp;#x3C;command&gt;&lt;/code&gt;, and its &lt;code dir=&quot;auto&quot;&gt;--apiKey&lt;/code&gt; option, “Optional and off by default”, makes clients send a valid key in the &lt;code dir=&quot;auto&quot;&gt;X-API-Key&lt;/code&gt; header.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The tunnel.&lt;/strong&gt; Point any tunnel at the bridge’s port. Each has trade-offs for MCP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Cloudflare quick tunnel (&lt;code dir=&quot;auto&quot;&gt;trycloudflare.com&lt;/code&gt;) needs no account, but &lt;a href=&quot;https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/&quot;&gt;Cloudflare’s docs&lt;/a&gt; say the hostname changes each time and “Quick Tunnels do not support Server-Sent Events (SSE)”, which Streamable HTTP servers use to stream responses. Cloudflare calls them “for testing and development”.&lt;/li&gt;
&lt;li&gt;A named Cloudflare Tunnel gives a stable hostname but needs a domain added to Cloudflare.&lt;/li&gt;
&lt;li&gt;ngrok’s free plan gives each account one auto-assigned dev domain that doesn’t change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mcp-proxy also has a &lt;code dir=&quot;auto&quot;&gt;--tunnel&lt;/code&gt; flag that prints a public URL such as &lt;code dir=&quot;auto&quot;&gt;https://abcdefghij.tunnel.gla.ma&lt;/code&gt;. Its README says the tunnel is “Powered by pipenet, sponsored by glama.ai”, and that a requested subdomain “may not be available”. It’s handy for a quick test, but the subdomain isn’t guaranteed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The auth.&lt;/strong&gt; This is the job people skip. The simplest working setup is a fixed key: run supergateway with &lt;code dir=&quot;auto&quot;&gt;--apiKey&lt;/code&gt;, and in claude.ai’s custom connector dialog put the key in the “Request headers” field, which Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;help article&lt;/a&gt; describes as “fixed credentials such as API keys that Claude sends on every request”. The key then lives in a connector setting as a shared secret. For OAuth, which ties each call to an account and is what MCP clients discover on their own, you need an authorization server and Protected Resource Metadata in front of the bridge, or Cloudflare Access with an identity provider. &lt;a href=&quot;https://zenn.dev/hideakitamai/articles/6747c9bd56bd4f?locale=en&quot;&gt;This write-up on zenn&lt;/a&gt; shows what that takes, and &lt;a href=&quot;https://github.com/dalberto/mcp-ferry&quot;&gt;mcp-ferry&lt;/a&gt; exists to glue the Cloudflare pieces together.&lt;/p&gt;
&lt;p&gt;It all works and costs nothing. It’s three tools to install, configure and keep running.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;option-b-one-tool-for-all-three&quot;&gt;Option B: one tool for all three&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;MCP Warp, the tunnel we build, does the three jobs in one process: it spawns your command, bridges it to Streamable HTTP locally, and gives it a public URL with OAuth at the edge. The bridges above are good at bridging; the case for this route is fewer moving parts.&lt;/p&gt;
&lt;p&gt;After installing the CLI and signing in once at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to pick a username (see &lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt;), add the server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt; with the same command you’d give Claude Desktop:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;stdio&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;uvx&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender-mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;env&quot;&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;span&gt;&quot;BLENDER_PATH&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/Applications/Blender.app&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;command&lt;/code&gt; is resolved on &lt;code dir=&quot;auto&quot;&gt;PATH&lt;/code&gt; and run directly, not through a shell. &lt;code dir=&quot;auto&quot;&gt;env&lt;/code&gt; values are used literally, with no &lt;code dir=&quot;auto&quot;&gt;${VAR}&lt;/code&gt; expansion. There’s also an optional &lt;code dir=&quot;auto&quot;&gt;cwd&lt;/code&gt;. The &lt;a href=&quot;https://mcpwarp.io/docs/reference/config/&quot;&gt;Config reference&lt;/a&gt; has every field.&lt;/p&gt;
&lt;p&gt;Validate the config, log in and start the tunnel:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME     KIND   URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;blender  stdio  https://blender-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Paste that URL into claude.ai or ChatGPT as a custom connector and complete the OAuth sign-in. Only your account can use it: the edge checks that each token belongs to the server’s owner.&lt;/p&gt;
&lt;p&gt;MCP Warp isn’t certified by Anthropic or OpenAI; it’s built to work with Claude and ChatGPT as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;how-the-bridge-works&quot;&gt;How the bridge works&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;From &lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-a-stdio-server/&quot;&gt;Expose a stdio server&lt;/a&gt;: each stdio server gets a small local HTTP endpoint that turns Streamable HTTP requests into newline-delimited JSON-RPC on the child’s stdin and stdout. It classifies messages by shape, so it supports both session-based MCP and the stateless 2026-07-28 generation of the protocol.&lt;/p&gt;
&lt;p&gt;In the full-screen view, &lt;code dir=&quot;auto&quot;&gt;r&lt;/code&gt; restarts the selected stdio server and &lt;code dir=&quot;auto&quot;&gt;l&lt;/code&gt; opens its log pane. &lt;code dir=&quot;auto&quot;&gt;mcpwarp up --verbose&lt;/code&gt; gives more detail. See the &lt;a href=&quot;https://mcpwarp.io/docs/reference/cli/&quot;&gt;CLI reference&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;limits&quot;&gt;Limits&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No SSE resumability.&lt;/strong&gt; There’s no &lt;code dir=&quot;auto&quot;&gt;Last-Event-ID&lt;/code&gt; or replay, so if a stream drops, the client has to re-issue the request.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows.&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;.cmd&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.bat&lt;/code&gt; shims aren’t launched directly; point &lt;code dir=&quot;auto&quot;&gt;command&lt;/code&gt; at &lt;code dir=&quot;auto&quot;&gt;node&lt;/code&gt; and pass the underlying &lt;code dir=&quot;auto&quot;&gt;.js&lt;/code&gt; file in &lt;code dir=&quot;auto&quot;&gt;args&lt;/code&gt;. Process cleanup on Windows is best-effort and only kills the direct child.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restart cap.&lt;/strong&gt; If the child crashes 10 times in a row without a 60-second healthy run, mcpwarp stops restarting it and requests get a &lt;code dir=&quot;auto&quot;&gt;502&lt;/code&gt; with “local server ‘&amp;#x3C;name&gt;’ is not running”.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your machine has to be on.&lt;/strong&gt; If &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; isn’t connected, the URL returns &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free plan.&lt;/strong&gt; 100 requests a month and 1 server, and every HTTP request a client makes counts. See &lt;a href=&quot;https://mcpwarp.io/docs/reference/limits-and-quotas/&quot;&gt;Limits and quotas&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;option-c-openais-tunnel-for-chatgpt-only&quot;&gt;Option C: OpenAI’s tunnel, for ChatGPT only&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;If ChatGPT is the only client you care about, OpenAI’s Secure MCP Tunnel handles stdio. Its open-source client, &lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;openai/tunnel-client&lt;/a&gt;, connects “private or localhost MCP servers to ChatGPT, Codex, the Responses API, and AgentKit”. It can spawn a stdio server itself, with one rule from the README: “run only one active &lt;code dir=&quot;auto&quot;&gt;tunnel-client&lt;/code&gt; instance per tunnel ID when using &lt;code dir=&quot;auto&quot;&gt;--mcp.command&lt;/code&gt;”. OpenAI’s &lt;a href=&quot;https://developers.openai.com/blog/connect-private-mcp-servers-to-openai-products&quot;&gt;announcement&lt;/a&gt; has the setup. It doesn’t serve claude.ai or other clients.&lt;/p&gt;
&lt;p&gt;Anthropic has a first-party option too, with narrower reach. Its &lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;MCP tunnels&lt;/a&gt; are for organizations on the Claude Enterprise plan, by request, and they carry Streamable HTTP only, so a stdio server would still need a bridge in front.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;option-d-mcptunnels-free-with-a-24-hour-url&quot;&gt;Option D: mcptunnels, free with a 24-hour URL&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/terragohan/mcptunnels&quot;&gt;mcptunnels&lt;/a&gt; does all three jobs in one command, with no signup:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcptunnel&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@modelcontextprotocol/server-everything&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Its README says tunnels are “anonymous, OAuth-protected by default, and expire after 24 hours.” The CLI prints the public URL and a generated password; when a client runs the OAuth flow, you enter that password on the authorize page. The URL contains a random segment, so after 24 hours (or when you press Ctrl-C) you get a new URL and have to re-add the connector. For an afternoon of testing that’s fine. For a connector you use every day, it’s a chore. You can also run its relay yourself.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;which-servers-this-suits&quot;&gt;Which servers this suits&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Tunnelling a stdio server makes sense when the server needs your machine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local files.&lt;/strong&gt; A filesystem server, a notes vault, a folder of PDFs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desktop apps.&lt;/strong&gt; &lt;a href=&quot;https://github.com/ahujasid/mcp-for-blender&quot;&gt;blender-mcp&lt;/a&gt; drives Blender, which has to be running on your machine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local data.&lt;/strong&gt; A database or service on your laptop or home network that you don’t want on the internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a server only calls a cloud API with a key, hosting it somewhere is usually simpler. It stays up when your laptop sleeps, and you don’t depend on a tunnel.&lt;/p&gt;
&lt;p&gt;Whichever route you take, remember the server runs with your permissions. Auth decides who can call it; it doesn’t limit what it does once called. Scope it before you expose it. The &lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem&quot;&gt;filesystem server&lt;/a&gt;, for example, only touches the directories you pass on its command line, so give it one folder:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;stdio&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;@modelcontextprotocol/server-filesystem&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/Users/you/Documents/shared&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For a side-by-side look at tunnels for MCP, including ngrok, Cloudflare Tunnel and Tailscale Funnel, see &lt;a href=&quot;https://mcpwarp.io/blog/ngrok-alternative-for-mcp/&quot;&gt;ngrok alternative for MCP&lt;/a&gt;. If claude.ai still won’t connect, &lt;a href=&quot;https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/&quot;&gt;Why claude.ai can’t connect to your local MCP server&lt;/a&gt; covers what the URL needs.&lt;/p&gt;
</content:encoded></item><item><title>Use your laptop&apos;s MCP servers from the Claude app on your phone</title><link>https://mcpwarp.io/blog/claude-mobile-app-mcp-server/</link><guid isPermaLink="true">https://mcpwarp.io/blog/claude-mobile-app-mcp-server/</guid><description>The Claude iPhone and Android apps only use remote connectors. How to reach an MCP server on your laptop from your phone, and what has to stay running.</description><pubDate>Sat, 10 Oct 2026 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;The Claude mobile app can’t run local MCP servers. It uses connectors you add on claude.ai or in Claude Desktop, which then show up on iOS and Android. To use a server on your laptop, give it a public HTTPS URL with OAuth through a tunnel, add that URL on claude.ai, and keep the laptop running.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That last part matters most. Your phone doesn’t talk to your laptop. Anthropic’s servers do, so the laptop has to be awake, online and running the tunnel whenever you want to use the server from your phone.&lt;/p&gt;
&lt;p&gt;For the steps in every other client (claude.ai, Claude Desktop, Claude Code, ChatGPT, VS Code), see &lt;a href=&quot;https://mcpwarp.io/blog/remote-mcp-server-url/&quot;&gt;One URL for your MCP server, in every client&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-short-answer&quot;&gt;The short answer&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;There is no setting in the Claude app for a server on your Mac or PC, and there can’t be one in the way Claude Desktop has it. Claude Desktop launches stdio servers as local processes from its JSON config. A phone app can’t do that for a program on another machine. As a &lt;a href=&quot;https://dev.to/zhizhiarv/how-to-set-up-remote-mcp-on-claude-iosandroid-mobile-apps-3ce3&quot;&gt;dev.to guide to remote MCP on the Claude mobile apps&lt;/a&gt; puts it, “mobile apps cannot run local scripts, so only remote MCP is available.”&lt;/p&gt;
&lt;p&gt;So the route is: the server gets a public URL, you add that URL as a custom connector on the web or desktop, and the phone picks it up.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;how-connectors-reach-the-mobile-app&quot;&gt;How connectors reach the mobile app&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Anthropic’s help article &lt;a href=&quot;https://support.claude.com/en/articles/11176164-use-connectors-to-extend-claude-s-capabilities&quot;&gt;Use connectors to extend Claude’s capabilities&lt;/a&gt; describes the sync:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Once you connect to a service on Claude or Claude Desktop, it will be available to use the next time you log in to your account on Claude for iOS or Android.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The same article says installing connectors on mobile is in beta, and that Claude Desktop and the web “remain the primary path for custom connectors”. Add the connector on claude.ai in a browser or in Claude Desktop, then open the app on your phone.&lt;/p&gt;
&lt;p&gt;Custom connectors are available “for users on Free, Pro, Max, Team, and Enterprise plans”, and “Free users are limited to one custom connector” (&lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;Anthropic help&lt;/a&gt;).&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;why-your-laptops-server-doesnt-show-up&quot;&gt;Why your laptop’s server doesn’t show up&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When Claude uses a custom connector, the request leaves Anthropic’s cloud, not your browser or your phone. Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;custom connectors article&lt;/a&gt; says “Claude connects to your remote MCP server from Anthropic’s cloud infrastructure, rather than from your local device.” To those servers, &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; is their own machine and your laptop has no address they can reach. Paste a localhost URL into Claude Desktop and the log says “Localhost URLs cannot be used because our servers cannot reach your local machine.” &lt;a href=&quot;https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/&quot;&gt;Why claude.ai can’t connect to your local MCP server&lt;/a&gt; covers the mechanism in detail.&lt;/p&gt;
&lt;p&gt;This is also why the usual phone-to-laptop setups don’t help here. Tailscale on your phone, an SSH app like Termius, or a VPN home all give &lt;em&gt;your phone&lt;/em&gt; a route to the laptop. The Claude app isn’t the one making the request, so none of that reaches Anthropic’s servers. The URL has to be on the public internet.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;give-the-server-a-public-url&quot;&gt;Give the server a public URL&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Any tunnel that produces a public HTTPS URL works. Your free options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Tunnel with Access.&lt;/strong&gt; Free and solid, if you own a domain on Cloudflare and are willing to set up Access and an identity provider. A stdio server also needs a bridge such as supergateway. &lt;a href=&quot;https://zenn.dev/hideakitamai/articles/6747c9bd56bd4f?locale=en&quot;&gt;This write-up on zenn&lt;/a&gt; shows what the DIY route takes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/terragohan/mcptunnels&quot;&gt;mcptunnels&lt;/a&gt;.&lt;/strong&gt; No signup, bridges stdio, and OAuth-protected by default. The URL is random and the tunnel expires after 24 hours, so you re-add the connector every day you use it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anthropic also runs its own &lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;MCP tunnels&lt;/a&gt;, but they are “available to organizations on the Claude Enterprise plan by request”.&lt;/p&gt;
&lt;p&gt;The steps below use MCP Warp, the tunnel we build. It gives each server a named URL that stays the same, with OAuth in front of it, and it can spawn stdio servers itself.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the CLI (Homebrew shown; Scoop and Linux packages are in &lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt;):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cask&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign in once at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to create your account and pick a username. Skip this and &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; fails with &lt;code dir=&quot;auto&quot;&gt;USERNAME_REQUIRED&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt;. Most desktop servers are stdio commands, so use &lt;code dir=&quot;auto&quot;&gt;&quot;kind&quot;: &quot;stdio&quot;&lt;/code&gt; and the same command and arguments you’d put in Claude Desktop’s config:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;stdio&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;uvx&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender-mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;env&quot;&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;span&gt;&quot;BLENDER_PATH&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/Applications/Blender.app&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-a-stdio-server/&quot;&gt;Expose a stdio server&lt;/a&gt; explains each field.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log in and start the tunnel:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME     KIND   URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;blender  stdio  https://blender-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On claude.ai, add a custom connector, paste the URL and complete the OAuth sign-in. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/connect-claude/&quot;&gt;Connect Claude&lt;/a&gt; shows each screen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the Claude app on your phone. The connector is there the next time you log in.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After the first run, it’s &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; each time (plus &lt;code dir=&quot;auto&quot;&gt;mcpwarp login&lt;/code&gt; when the session expires). The URL stays the same as long as the server’s name doesn’t change, so the connector keeps working.&lt;/p&gt;
&lt;p&gt;MCP Warp isn’t certified by Anthropic; it’s built to work with Claude as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-has-to-stay-on&quot;&gt;What has to stay on&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Whichever tunnel you use, the server only exists while your laptop is awake, online and running it. With MCP Warp, if &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; isn’t connected, the connector gets a &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt; (&lt;a href=&quot;https://mcpwarp.io/docs/how-to/troubleshooting/&quot;&gt;Troubleshooting&lt;/a&gt; lists the other codes). Two ways to live with that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Keep the laptop awake.&lt;/strong&gt; Plug it in and stop it sleeping while you’re away. On macOS, &lt;code dir=&quot;auto&quot;&gt;caffeinate -i mcpwarp up&lt;/code&gt; keeps the machine from idle sleep for as long as the tunnel runs. Closing the lid usually still puts a laptop to sleep.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use an always-on machine.&lt;/strong&gt; A desktop, a home server or a small Linux box can run the tunnel without a terminal. Mint a personal access token in the dashboard and run headless:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MCPWARP_TOKEN&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mcpwarp_pat_&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-tui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://mcpwarp.io/docs/get-started/#headless-and-ci&quot;&gt;headless section of Get started&lt;/a&gt; has the details. MCP Warp doesn’t ship a launchd or systemd recipe yet, so wiring it into a service manager is up to you. The server still has to be on that machine, so this suits servers that work on files or apps you keep there.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the laptop wakes from sleep before the network is back, &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; keeps retrying the session refresh and reconnects on its own.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;good-first-servers-to-try&quot;&gt;Good first servers to try&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The servers worth reaching from a phone are the ones that need something only your computer has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Your notes vault.&lt;/strong&gt; An Obsidian or Markdown notes server lets you search and add to notes from the phone. Check the server’s README for which folder it reads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A filesystem server, scoped down.&lt;/strong&gt; The reference &lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem&quot;&gt;filesystem server&lt;/a&gt; only touches the directories you pass on its command line, for example &lt;code dir=&quot;auto&quot;&gt;npx -y @modelcontextprotocol/server-filesystem /Users/you/Documents/phone&lt;/code&gt;. Give it one folder, not your home directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes or reminders apps on a Mac.&lt;/strong&gt; Servers that talk to Apple’s apps run on the Mac itself, which makes them a natural fit. Read their READMEs for the permissions they ask for.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blender.&lt;/strong&gt; The &lt;a href=&quot;https://github.com/ahujasid/mcp-for-blender&quot;&gt;blender-mcp&lt;/a&gt; server used in the example above drives Blender on your machine. Blender has to be open for it to do anything.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;is-this-safe&quot;&gt;Is this safe?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A public URL to a server that can read your notes is worth thinking about. Unauthenticated MCP servers on the internet are common: in July 2025, Trend Micro &lt;a href=&quot;https://www.trendaisecurity.com/en-us/resources-insights/deep-research/mcp-security-network-exposed-servers-are-backdoors-to-your-private-data&quot;&gt;found 492 MCP servers on the public internet&lt;/a&gt; with no client authentication or traffic encryption. A plain tunnel with no auth in front of your vault would add one more.&lt;/p&gt;
&lt;p&gt;With MCP Warp, every request needs an OAuth token, and the edge checks that the token belongs to the server’s owner. A valid token from another account gets a &lt;code dir=&quot;auto&quot;&gt;403&lt;/code&gt;. The URL is an identifier, not a secret, so it doesn’t matter if someone sees it. See &lt;a href=&quot;https://mcpwarp.io/docs/concepts/security/&quot;&gt;Security&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;OAuth decides who can call the server. It doesn’t limit what the server can do once called. The server runs on your laptop with your permissions, so scope it (one folder, read-only where the server supports it) before you put it on your phone.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;faq&quot;&gt;FAQ&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;does-this-work-on-claude-free&quot;&gt;Does this work on Claude Free?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Custom connectors are available on Free, limited to one, per &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;Anthropic’s help article&lt;/a&gt;. On the MCP Warp side, the Free plan is 100 requests a month and 1 server, and every HTTP request a client makes counts. A chat with a few tool calls makes several, so Free is for trying it out. See &lt;a href=&quot;https://mcpwarp.io/docs/reference/limits-and-quotas/&quot;&gt;Limits and quotas&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;will-the-phone-ask-me-to-sign-in-to-the-server-again&quot;&gt;Will the phone ask me to sign in to the server again?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;We haven’t confirmed whether the phone ever asks you to sign in to the server again after you authorized it on the web. If it does, sign in with the MCP Warp account that runs &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;does-the-chatgpt-mobile-app-work-the-same-way&quot;&gt;Does the ChatGPT mobile app work the same way?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;ChatGPT also calls connectors from OpenAI’s servers, so the server needs a public URL there too. We haven’t tested how ChatGPT’s mobile apps handle custom connectors. If ChatGPT is your only client, OpenAI’s Secure MCP Tunnel, through its open-source client &lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;openai/tunnel-client&lt;/a&gt;, connects private servers to “ChatGPT, Codex, the Responses API, and AgentKit” and can spawn stdio servers. It doesn’t serve Claude.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;do-i-need-to-keep-the-terminal-open&quot;&gt;Do I need to keep the terminal open?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;You need &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; running. In a terminal, that means leaving it open. On an always-on machine, run it headless with a token and &lt;code dir=&quot;auto&quot;&gt;--no-tui&lt;/code&gt; as shown above.&lt;/p&gt;
</content:encoded></item><item><title>Introducing MCP Warp: ngrok for MCP servers</title><link>https://mcpwarp.io/blog/introducing-mcp-warp/</link><guid isPermaLink="true">https://mcpwarp.io/blog/introducing-mcp-warp/</guid><description>MCP Warp is ngrok for MCP servers. It gives a server on your machine a public, OAuth-protected URL that works in claude.ai and ChatGPT.</description><pubDate>Sat, 10 Oct 2026 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;MCP Warp gives the MCP servers on your machine a public HTTPS URL with OAuth in front of it, so claude.ai, ChatGPT and the Claude mobile apps can use them while the server keeps running locally.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you’ve used &lt;a href=&quot;https://ankimcp.ai/&quot;&gt;AnkiMCP&lt;/a&gt;, MCP Warp is from the same person. I built it because I kept needing a simple way to give a local MCP server a public URL.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;You have an MCP server running on your laptop. Claude Desktop and Claude Code can use it, because they run on the same machine. claude.ai can’t. When you add a custom connector, the request comes from Anthropic’s servers, not your browser, and to them &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; is their own machine. ChatGPT works the same way, and so does a connector you use from the Claude app on your phone. &lt;a href=&quot;https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/&quot;&gt;Why claude.ai can’t connect to your local MCP server&lt;/a&gt; explains this in detail.&lt;/p&gt;
&lt;p&gt;So the server needs a public HTTPS URL. And once a URL points at your machine, something has to decide who may call it, or anyone who finds the link can run your tools with your permissions.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-mcp-warp-does&quot;&gt;What MCP Warp does&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;You run &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; on your machine. It opens an outbound connection to the MCP Warp edge and registers the servers in your config. Each one gets its own public URL:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://&amp;#x3C;name&gt;-&amp;#x3C;username&gt;.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OAuth on every request.&lt;/strong&gt; There is no anonymous access. An unauthenticated request gets a &lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; that MCP clients use to start the sign-in by themselves, and the edge only lets through tokens that belong to the server’s owner. A valid token from another account gets a &lt;code dir=&quot;auto&quot;&gt;403&lt;/code&gt;. See &lt;a href=&quot;https://mcpwarp.io/docs/concepts/security/&quot;&gt;Security&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;stdio or HTTP.&lt;/strong&gt; If your server speaks Streamable HTTP on localhost, &lt;code dir=&quot;auto&quot;&gt;mcpwarp&lt;/code&gt; proxies to it. If it only speaks stdio, the kind you start with &lt;code dir=&quot;auto&quot;&gt;uvx&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;npx&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;mcpwarp&lt;/code&gt; spawns it and bridges it to HTTP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One subdomain per server.&lt;/strong&gt; Clients such as VS Code and Claude Desktop cache OAuth credentials per origin, so two servers on one shared host could overwrite each other’s tokens. Separate subdomains avoid that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streaming the whole way.&lt;/strong&gt; Long-running tool calls and large responses work as they do locally.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nothing inbound.&lt;/strong&gt; The connection is outbound from your machine, so there is no port to open, no domain to buy and no certificate to manage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://mcpwarp.io/docs/concepts/how-mcp-warp-works/&quot;&gt;How MCP Warp works&lt;/a&gt; traces a request end to end.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;setting-it-up&quot;&gt;Setting it up&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The first run takes a few steps. After that it’s &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Install the CLI. With Homebrew on macOS or Linux:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cask&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Scoop and Linux packages are in &lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sign in once at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to create your account and pick a username. The username goes into your URLs, and &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; fails with &lt;code dir=&quot;auto&quot;&gt;USERNAME_REQUIRED&lt;/code&gt; until you have one. Then log the CLI in to the same account:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Add your server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt;. For a server already running on port 8765:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http://127.0.0.1:8765/mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For a stdio server, use &lt;code dir=&quot;auto&quot;&gt;&quot;kind&quot;: &quot;stdio&quot;&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;command&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;args&lt;/code&gt; instead. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-a-stdio-server/&quot;&gt;Expose a stdio server&lt;/a&gt; has the full shape.&lt;/p&gt;
&lt;p&gt;Start the tunnel:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME     KIND   URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;notes    http   https://notes-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Paste the URL into claude.ai or ChatGPT as a custom connector and complete the sign-in when it asks. A connector you add on claude.ai also shows up in the Claude mobile apps. The URL stays the same every time you run &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt;, as long as the server name doesn’t change, so you add the connector once.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; runs in the foreground. Stop it, or let the laptop sleep, and the URL returns &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt; until it reconnects.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;where-it-fits&quot;&gt;Where it fits&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;ngrok and Cloudflare Tunnel will give you a public URL too, but OAuth and the stdio bridge are yours to set up, and Cloudflare Tunnel also needs a domain on Cloudflare. OpenAI’s Secure MCP Tunnel has an open-source client and handles stdio, but it only serves OpenAI products such as ChatGPT and Codex. Anthropic’s own MCP tunnels are for organizations on the Claude Enterprise plan, by request. MCP Warp is for the person in between: one named URL with OAuth already in front of it, usable from Claude and ChatGPT.&lt;/p&gt;
&lt;p&gt;MCP Warp isn’t certified by Anthropic or OpenAI; it’s built to work with Claude and ChatGPT as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;plans&quot;&gt;Plans&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Free is 100 requests a month and 1 server. Every HTTP request a client makes to your URL counts, and one chat with a few tool calls makes several, so Free is for trying it out. Plus is $5 a month with unlimited requests and 1 server. Pro is $10 a month with unlimited requests and servers. Details are on &lt;a href=&quot;https://mcpwarp.io/pricing/&quot;&gt;Pricing&lt;/a&gt; and in &lt;a href=&quot;https://mcpwarp.io/docs/reference/limits-and-quotas/&quot;&gt;Limits and quotas&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;next-steps&quot;&gt;Next steps&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt; walks through the install and first tunnel.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/blog/remote-mcp-server-url/&quot;&gt;One URL for your MCP server, in every client&lt;/a&gt; shows how to add the URL to claude.ai, Claude Desktop, Claude Code, ChatGPT and VS Code.&lt;/li&gt;
&lt;li&gt;If Claude says “Couldn’t reach the MCP server”, work through &lt;a href=&quot;https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/&quot;&gt;the checklist&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>One URL for your MCP server, in every client: claude.ai, Claude Desktop, Claude Code, ChatGPT and VS Code</title><link>https://mcpwarp.io/blog/remote-mcp-server-url/</link><guid isPermaLink="true">https://mcpwarp.io/blog/remote-mcp-server-url/</guid><description>Get one HTTPS URL for a local MCP server and add it to claude.ai, Claude Desktop, Claude Code, ChatGPT and VS Code. Steps for each client.</description><pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;A remote MCP server URL is a public HTTPS address, usually ending in &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt;, that speaks Streamable HTTP. Add it as a custom connector in claude.ai or ChatGPT, with &lt;code dir=&quot;auto&quot;&gt;claude mcp add --transport http&lt;/code&gt; in Claude Code, or as an &lt;code dir=&quot;auto&quot;&gt;http&lt;/code&gt; server in VS Code’s &lt;code dir=&quot;auto&quot;&gt;mcp.json&lt;/code&gt;. The client then runs an OAuth sign-in.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This page is the reference the other guides on this blog point to. It covers what the URL is, how to get one for a server on your own machine, and the exact steps for each client.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-an-mcp-server-url-is&quot;&gt;What an MCP server URL is&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;An MCP server can talk to a client in two ways. Over stdio, the client launches the server as a child process and they exchange messages on stdin and stdout. Over Streamable HTTP, the server listens at an HTTP endpoint and any client that can reach it sends requests there. The endpoint path is usually &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt;, so a URL looks like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://notes-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The URL is what you paste into a client. If the client runs on your machine (Claude Code, VS Code), &lt;code dir=&quot;auto&quot;&gt;http://localhost:8765/mcp&lt;/code&gt; can work. If the client runs in someone else’s data centre (claude.ai, ChatGPT), the request comes from their servers, which can’t reach your laptop, so the URL has to be public HTTPS. &lt;a href=&quot;https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/&quot;&gt;Why claude.ai can’t connect to your local MCP server&lt;/a&gt; explains that in detail, and &lt;a href=&quot;https://mcpwarp.io/docs/concepts/what-is-mcp/&quot;&gt;What is MCP&lt;/a&gt; covers the protocol itself. A server that only speaks stdio needs a bridge to HTTP first; &lt;a href=&quot;https://mcpwarp.io/blog/stdio-mcp-server-to-http/&quot;&gt;Use a stdio MCP server in claude.ai and ChatGPT without deploying it&lt;/a&gt; covers the options.&lt;/p&gt;
&lt;p&gt;A lot of people still wire remote servers into Claude Desktop through JSON config and &lt;a href=&quot;https://github.com/punkpeye/mcp-remote&quot;&gt;mcp-remote&lt;/a&gt;, which had about 5.0 million npm downloads between 9 September and 8 October 2026 (&lt;a href=&quot;https://api.npmjs.org/downloads/point/last-month/mcp-remote&quot;&gt;npm API&lt;/a&gt;). mcp-remote goes the other direction from a tunnel: it lets a stdio-only client reach a server that already has a URL. Every client below can take the URL directly.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;get-a-url-for-a-server-on-your-machine&quot;&gt;Get a URL for a server on your machine&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The rest of this page works with any public Streamable HTTP URL: your own reverse proxy, Cloudflare Tunnel with Access, ngrok with an auth layer, or &lt;a href=&quot;https://github.com/terragohan/mcptunnels&quot;&gt;mcptunnels&lt;/a&gt; (free, but the URL expires after 24 hours). &lt;a href=&quot;https://mcpwarp.io/blog/ngrok-alternative-for-mcp/&quot;&gt;ngrok alternative for MCP&lt;/a&gt; compares the tunnels. The examples use MCP Warp, the tunnel we build.&lt;/p&gt;
&lt;p&gt;The first run, once:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the CLI (Homebrew shown; Scoop and Linux packages are in &lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt;):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cask&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign in at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to create your account and choose a username.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt;. An HTTP server you already run:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http://127.0.0.1:8765/mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Or a stdio server that &lt;code dir=&quot;auto&quot;&gt;mcpwarp&lt;/code&gt; should spawn itself:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;stdio&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;uvx&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;blender-mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;env&quot;&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;span&gt;&quot;BLENDER_PATH&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/Applications/Blender.app&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the config, log in and start the tunnel:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME     KIND   URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;notes    http   https://notes-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After that, every session is &lt;code dir=&quot;auto&quot;&gt;mcpwarp login&lt;/code&gt; (when your session expires) and &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt;. In the full-screen view, &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt; copies the selected row’s URL.&lt;/p&gt;
&lt;p&gt;Each server gets its own subdomain, &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;name&gt;-&amp;#x3C;username&gt;.tunnel.mcpwarp.io&lt;/code&gt;, instead of a path under one shared host. Clients such as VS Code and Claude Desktop cache OAuth credentials per origin, so two servers on one host could clobber each other’s tokens. &lt;a href=&quot;https://mcpwarp.io/docs/concepts/why-one-subdomain-per-server/&quot;&gt;Why one subdomain per server&lt;/a&gt; has the detail.&lt;/p&gt;
&lt;p&gt;Two things to keep in mind. &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; has to be running on your machine, or the URL returns &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt;. And the Free plan covers 100 requests a month and 1 server; every HTTP request a client makes counts. See &lt;a href=&quot;https://mcpwarp.io/docs/reference/limits-and-quotas/&quot;&gt;Limits and quotas&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;add-it-to-each-client&quot;&gt;Add it to each client&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;claudeai-and-claude-desktop&quot;&gt;claude.ai and Claude Desktop&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Both use custom connectors, and Anthropic documents the same steps for each.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In claude.ai, go to &lt;a href=&quot;https://claude.ai/customize/connectors&quot;&gt;Customize &gt; Connectors&lt;/a&gt; (Pro/Max), click “+ Add”, then “Add custom connector”. The steps are in Anthropic’s help article on &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;custom connectors&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Give it a name and paste the URL.&lt;/li&gt;
&lt;li&gt;Click Connect and complete the OAuth sign-in when prompted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Custom connectors are available “for users on Free, Pro, Max, Team, and Enterprise plans”, and “Free users are limited to one custom connector” (&lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;Anthropic help&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The connector also reaches your phone. Per Anthropic, “Once you connect to a service on Claude or Claude Desktop, it will be available to use the next time you log in to your account on Claude for iOS or Android” (&lt;a href=&quot;https://support.claude.com/en/articles/11176164-use-connectors-to-extend-claude-s-capabilities&quot;&gt;Use connectors to extend Claude’s capabilities&lt;/a&gt;). Installing connectors on mobile itself is still in beta, so add it on the web or desktop first. &lt;a href=&quot;https://mcpwarp.io/blog/claude-mobile-app-mcp-server/&quot;&gt;Use your laptop’s MCP servers from the Claude app on your phone&lt;/a&gt; covers what has to stay running.&lt;/p&gt;
&lt;p&gt;Anthropic also runs its own &lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;MCP tunnels&lt;/a&gt;, but they are for organizations on the Enterprise plan, by request.&lt;/p&gt;
&lt;p&gt;MCP Warp steps for Claude are in &lt;a href=&quot;https://mcpwarp.io/docs/how-to/connect-claude/&quot;&gt;Connect Claude&lt;/a&gt;. MCP Warp isn’t certified by Anthropic; it’s built to work with Claude as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;claude-code&quot;&gt;Claude Code&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Claude Code runs on your machine and adds servers from the command line:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;claude&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--transport&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://notes-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then authenticate: run &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt; inside a Claude Code session and pick the server, or run &lt;code dir=&quot;auto&quot;&gt;claude mcp login notes&lt;/code&gt; from your shell. The general form is &lt;code dir=&quot;auto&quot;&gt;claude mcp add --transport http &amp;#x3C;name&gt; &amp;#x3C;url&gt;&lt;/code&gt;; the &lt;a href=&quot;https://code.claude.com/docs/en/mcp&quot;&gt;Claude Code MCP docs&lt;/a&gt; list the other options.&lt;/p&gt;
&lt;p&gt;If Claude Code is your only client, you can point it at &lt;code dir=&quot;auto&quot;&gt;http://localhost:8765/mcp&lt;/code&gt; and skip the tunnel. The case for a public URL is that the same address then works in claude.ai, on your phone and in ChatGPT.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;chatgpt&quot;&gt;ChatGPT&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Add a custom connector in ChatGPT’s settings and paste the URL, then complete the OAuth sign-in. Menu names move around as ChatGPT changes; look for “connectors”, “custom connectors”, “apps” or “MCP servers” in settings. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/connect-chatgpt/&quot;&gt;Connect ChatGPT&lt;/a&gt; has the MCP Warp side.&lt;/p&gt;
&lt;p&gt;Check your plan before you start. Custom connectors on ChatGPT Plus and Pro are reported to be limited to read and fetch actions, with full MCP (write actions) on Business, Enterprise and Edu. We couldn’t load &lt;a href=&quot;https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt&quot;&gt;OpenAI’s help article on developer mode&lt;/a&gt; to confirm this, so read it for your plan.&lt;/p&gt;
&lt;p&gt;If ChatGPT is your only client, OpenAI’s Secure MCP Tunnel may be the simpler route. Its open-source client, &lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;openai/tunnel-client&lt;/a&gt;, connects “private or localhost MCP servers to ChatGPT, Codex, the Responses API, and AgentKit” and can spawn stdio servers. It doesn’t serve claude.ai or other clients. OpenAI’s &lt;a href=&quot;https://developers.openai.com/blog/connect-private-mcp-servers-to-openai-products&quot;&gt;announcement&lt;/a&gt; has the setup.&lt;/p&gt;
&lt;p&gt;MCP Warp isn’t certified by OpenAI; it’s built to work with ChatGPT as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;vs-code&quot;&gt;VS Code&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Add the server to &lt;code dir=&quot;auto&quot;&gt;.vscode/mcp.json&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;&quot;type&quot;: &quot;http&quot;&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;notes&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;https://notes-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;VS Code runs the OAuth sign-in when it first connects. Like Claude Code, it runs locally, so a localhost URL also works if you don’t need the server anywhere else. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/connect-other-clients/&quot;&gt;Connect other clients&lt;/a&gt; has the same snippet.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;anything-else&quot;&gt;Anything else&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Any client that speaks Streamable HTTP can use the URL: add a remote server pointing at it and complete the OAuth sign-in when the client asks. The legacy 2024-11-05 HTTP+SSE transport (a &lt;code dir=&quot;auto&quot;&gt;GET /sse&lt;/code&gt; endpoint plus &lt;code dir=&quot;auto&quot;&gt;POST /messages&lt;/code&gt;) is not supported by MCP Warp, so a client that only knows SSE won’t connect.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;comparison-table&quot;&gt;Comparison table&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As of 9 October 2026. Cells marked “unverified” are ones we haven’t confirmed against the vendor’s documentation.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Client&lt;/th&gt;
&lt;th&gt;Where to add it&lt;/th&gt;
&lt;th&gt;Runs OAuth&lt;/th&gt;
&lt;th&gt;Accepts localhost&lt;/th&gt;
&lt;th&gt;Plan requirements&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;claude.ai&lt;/td&gt;
&lt;td&gt;Customize &gt; Connectors &gt; Add custom connector&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Free (1 custom connector), Pro, Max, Team, Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Desktop&lt;/td&gt;
&lt;td&gt;Connectors settings, same steps as claude.ai&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No, for custom connectors&lt;/td&gt;
&lt;td&gt;Same as claude.ai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude mobile apps&lt;/td&gt;
&lt;td&gt;Add on web or desktop; it syncs&lt;/td&gt;
&lt;td&gt;Uses the web grant (unverified)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Same as claude.ai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;claude mcp add --transport http&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes, via &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;claude mcp login&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Unverified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;Settings, connectors or apps&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Plus/Pro reported read-only (unverified)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code&lt;/td&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;.vscode/mcp.json&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;&quot;type&quot;: &quot;http&quot;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Unverified&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The URL is tied to your MCP Warp account. Every request needs an OAuth token that belongs to the server’s owner, so other people can’t use your server through it even if they have the link. See &lt;a href=&quot;https://mcpwarp.io/docs/concepts/security/&quot;&gt;Security&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;when-it-doesnt-connect&quot;&gt;When it doesn’t connect&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Start with the status code at the URL. With MCP Warp, &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt; means &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; isn’t connected, &lt;code dir=&quot;auto&quot;&gt;404&lt;/code&gt; means a wrong URL or a server disabled in the dashboard, and &lt;code dir=&quot;auto&quot;&gt;429&lt;/code&gt; means the month’s quota is used up. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/troubleshooting/&quot;&gt;Troubleshooting&lt;/a&gt; lists every message.&lt;/p&gt;
&lt;p&gt;If claude.ai says “Couldn’t reach the MCP server”, work through &lt;a href=&quot;https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/&quot;&gt;the checklist for that error&lt;/a&gt;. It applies to any server and any tunnel.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;more-guides&quot;&gt;More guides&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/&quot;&gt;Why claude.ai can’t connect to your local MCP server (and how to fix it)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/&quot;&gt;“Couldn’t reach the MCP server” in Claude: a checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/blog/claude-mobile-app-mcp-server/&quot;&gt;Use your laptop’s MCP servers from the Claude app on your phone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/blog/ngrok-alternative-for-mcp/&quot;&gt;ngrok alternative for MCP: ngrok vs Cloudflare Tunnel vs Tailscale Funnel vs MCP Warp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mcpwarp.io/blog/stdio-mcp-server-to-http/&quot;&gt;Use a stdio MCP server in claude.ai and ChatGPT without deploying it&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>&quot;Couldn&apos;t reach the MCP server&quot; in Claude: a checklist</title><link>https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/</link><guid isPermaLink="true">https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/</guid><description>Claude says &quot;Couldn&apos;t reach the MCP server&quot; but your server runs. Check in order: URL, inbound requests, transport, OAuth, IP allowlist.</description><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;“Couldn’t reach the MCP server” means Claude’s servers couldn’t complete a connection to your URL. Check in order: the URL is public HTTPS (localhost won’t work); a request reaches your server; the endpoint speaks Streamable HTTP; if you use OAuth, an unauthenticated request returns 401 with discovery metadata; nothing blocks Anthropic’s IP range, 160.79.104.0/21.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This checklist works with any server and any tunnel. Each item has a test you can run yourself. For the client-by-client setup steps, see &lt;a href=&quot;https://mcpwarp.io/blog/remote-mcp-server-url/&quot;&gt;One URL for your MCP server, in every client&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-the-error-means&quot;&gt;What the error means&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The full message in claude.ai and Claude Desktop reads like this (from &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/227&quot;&gt;anthropics/claude-ai-mcp #227&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Couldn’t reach the MCP server. You can check the server URL and verify the server is running. If this persists, share this reference with support: &lt;code dir=&quot;auto&quot;&gt;ofid_c58995a431270861&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you click Connect, Anthropic’s servers make the request. Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;help article on custom connectors&lt;/a&gt; says “Claude connects to your remote MCP server from Anthropic’s cloud infrastructure, rather than from your local device.” So &lt;code dir=&quot;auto&quot;&gt;curl&lt;/code&gt; working from your laptop proves less than it seems.&lt;/p&gt;
&lt;p&gt;The message is a catch-all. DNS, TLS, firewalls, the wrong transport and a broken OAuth discovery step can all end up here. Keep the &lt;code dir=&quot;auto&quot;&gt;ofid_&lt;/code&gt; reference from each attempt; you’ll want it if you report the problem.&lt;/p&gt;
&lt;p&gt;Some failures are on Anthropic’s side. Several reports in the issue tracker show fully working servers that never receive a request. A different tunnel won’t fix those, and it’s worth knowing before you spend an evening rewriting your auth.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;first-did-any-request-arrive&quot;&gt;First, did any request arrive?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This one test splits the list in half. Open your server logs, or your reverse proxy or tunnel logs, and click Connect in Claude. Then look for any request to your hostname in that minute:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;GET&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;POST&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;GET /.well-known/oauth-protected-resource&lt;/code&gt; (or &lt;code dir=&quot;auto&quot;&gt;/.well-known/oauth-protected-resource/mcp&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;GET /.well-known/oauth-authorization-server&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If nothing arrived, the problem is between Anthropic and your server, or inside Anthropic. If something arrived, the problem is in what your server answered.&lt;/p&gt;
&lt;p&gt;The reporter on &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/227&quot;&gt;#227&lt;/a&gt; saw the worst case: “zero inbound requests from Anthropic on every &lt;code dir=&quot;auto&quot;&gt;Connect&lt;/code&gt; click”, even though the same server worked end to end in Cursor and Postman. That issue was closed as “not planned”.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;if-nothing-arrived&quot;&gt;If nothing arrived&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-url-is-localhost-a-lan-address-or-plain-http&quot;&gt;The URL is localhost, a LAN address or plain http&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;127.0.0.1&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;192.168.x.x&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;10.x.x.x&lt;/code&gt; and tailnet-only names point at nothing Anthropic’s servers can reach. For localhost, Claude Desktop refuses the URL up front: the dialog says “Failed to add connector”, and the log files give the reason (&lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/9&quot;&gt;#9&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Localhost URLs cannot be used because our servers cannot reach your local machine. Provide a publicly accessible MCP server URL.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It rejects &lt;code dir=&quot;auto&quot;&gt;http://&lt;/code&gt; URLs too. &lt;a href=&quot;https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/&quot;&gt;Why claude.ai can’t connect to your local MCP server&lt;/a&gt; explains the mechanism and the ways around it.&lt;/p&gt;
&lt;p&gt;Test from a network that isn’t yours, for example a phone hotspot or a cheap VPS:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-sv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://mcp.example.com/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Look for a resolved public address and a completed TLS handshake.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;tailscale-funnel&quot;&gt;Tailscale Funnel&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Tailscale Funnel does put a service on the public internet, so it can work in principle. In practice there are open reports of it failing with claude.ai. &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/953&quot;&gt;#953&lt;/a&gt; is titled “Custom MCP connector consistently fails with “Couldn’t reach the MCP server”” and describes a Funnel-hosted server “being fully reachable and functional from outside”. &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/864&quot;&gt;#864&lt;/a&gt; reports “Authorization with the MCP server failed” through Funnel, after the setup had worked the day before.&lt;/p&gt;
&lt;p&gt;Two things to keep in mind. claude.ai can’t join your tailnet, so only Funnel (public) URLs are candidates, never plain tailnet addresses. And Funnel adds no auth of its own; whatever protects the server has to be in the server or a proxy in front of it.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;a-firewall-or-ip-allowlist&quot;&gt;A firewall or IP allowlist&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;If you allowlist inbound traffic, the range to admit is Anthropic’s outbound IPv4 range, &lt;code dir=&quot;auto&quot;&gt;160.79.104.0/21&lt;/code&gt;, published on Anthropic’s &lt;a href=&quot;https://platform.claude.com/docs/en/api/ip-addresses&quot;&gt;IP addresses page&lt;/a&gt;. The same page lists phased-out addresses (&lt;code dir=&quot;auto&quot;&gt;34.162.46.92/32&lt;/code&gt; and four others). An allowlist written before the change may only contain those.&lt;/p&gt;
&lt;p&gt;An outbound tunnel avoids the question: your machine dials out, and nothing needs an inbound rule.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;a-bot-or-waf-rule-at-the-edge&quot;&gt;A bot or WAF rule at the edge&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A CDN can block the request before it reaches your origin, so your origin logs show nothing. In &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/76&quot;&gt;#76&lt;/a&gt;, the cause was Cloudflare’s managed rule “Block AI training bots”, which “blocks the &lt;code dir=&quot;auto&quot;&gt;Claude-User&lt;/code&gt; user agent with a 403 at the edge before requests reach the origin server.” Check your CDN’s firewall events as well as your server logs.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;certificate-problems&quot;&gt;Certificate problems&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Self-signed certificates and private CAs are trusted only on machines you configured. The reporter on &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/9&quot;&gt;#9&lt;/a&gt; tried exactly that: “I even tried setting up a self-signed certificate and CA, which works in my browser, but Claude Desktop won’t trust it.” Use a certificate from a public CA such as Let’s Encrypt, and serve the full chain.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;openssl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s_client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-connect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcp.example.com:443&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-servername&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcp.example.com&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;Verify return code: 0 (ok)&lt;/code&gt; is what you want.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;if-requests-arrived-but-it-still-fails&quot;&gt;If requests arrived but it still fails&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;wrong-transport-or-path&quot;&gt;Wrong transport or path&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Custom connectors expect Streamable HTTP at the URL you paste, usually ending in &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt;. A server that only speaks the legacy 2024-11-05 HTTP+SSE transport (&lt;code dir=&quot;auto&quot;&gt;GET /sse&lt;/code&gt; plus &lt;code dir=&quot;auto&quot;&gt;POST /messages&lt;/code&gt;) is a common mismatch, as is pasting the host without the path.&lt;/p&gt;
&lt;p&gt;Send an &lt;code dir=&quot;auto&quot;&gt;initialize&lt;/code&gt; request by hand:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://mcp.example.com/mcp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;Content-Type: application/json&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;Accept: application/json, text/event-stream&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;id&quot;:1,&quot;method&quot;:&quot;initialize&quot;,&quot;params&quot;:{&quot;protocolVersion&quot;:&quot;2025-06-18&quot;,&quot;capabilities&quot;:{},&quot;clientInfo&quot;:{&quot;name&quot;:&quot;curl&quot;,&quot;version&quot;:&quot;0&quot;}}}&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A server without auth should answer &lt;code dir=&quot;auto&quot;&gt;200&lt;/code&gt; with a JSON-RPC result. A &lt;code dir=&quot;auto&quot;&gt;404&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;405&lt;/code&gt; means the path or transport is wrong. If your server is behind MCP Warp, &lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-an-http-server/&quot;&gt;Expose an HTTP server&lt;/a&gt; covers the same requirement: Streamable HTTP only, no legacy SSE.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;broken-oauth-discovery&quot;&gt;Broken OAuth discovery&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;If your server uses OAuth, the unauthenticated request above should get a &lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; with a &lt;code dir=&quot;auto&quot;&gt;WWW-Authenticate&lt;/code&gt; header pointing at Protected Resource Metadata (RFC 9728). That’s how MCP clients find the authorization server. It should look roughly like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HTTP/2 401&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www-authenticate: Bearer resource_metadata=&quot;https://mcp.example.com/.well-known/oauth-protected-resource/mcp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then fetch the metadata it points at:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://mcp.example.com/.well-known/oauth-protected-resource/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It should return JSON with &lt;code dir=&quot;auto&quot;&gt;resource&lt;/code&gt; matching your MCP URL and an &lt;code dir=&quot;auto&quot;&gt;authorization_servers&lt;/code&gt; list.&lt;/p&gt;
&lt;p&gt;A &lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; without that header is a common trap. On &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/953&quot;&gt;#953&lt;/a&gt;, a commenter who ran the URL through a checker reported that the server answered “&lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; with no &lt;code dir=&quot;auto&quot;&gt;WWW-Authenticate&lt;/code&gt; header and no &lt;code dir=&quot;auto&quot;&gt;/.well-known/oauth-protected-resource&lt;/code&gt; document”, and suggested that Claude started OAuth, found no metadata, and showed “Couldn’t reach”. Judging by the issue body (“401 without token, 200 with correct token”), that server appears to have used a static token.&lt;/p&gt;
&lt;p&gt;If you protect your server with a fixed API key or bearer token, configure it in the connector itself. Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;help article&lt;/a&gt; describes a “Request headers” setting for “fixed credentials such as API keys that Claude sends on every request”. For how MCP Warp does the OAuth side, see &lt;a href=&quot;https://mcpwarp.io/docs/concepts/security/&quot;&gt;Security&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;authorization-with-the-mcp-server-failed&quot;&gt;“Authorization with the MCP server failed”&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;This is the neighbouring error. Claude reached the server, started OAuth, and something in the flow failed. The issue tracker has many reports with that error, for example &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/978&quot;&gt;#978&lt;/a&gt; and &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/864&quot;&gt;#864&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Things worth checking on your side:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code dir=&quot;auto&quot;&gt;resource&lt;/code&gt; value in your Protected Resource Metadata matches the URL in the connector exactly, including the path.&lt;/li&gt;
&lt;li&gt;Your authorization server accepts &lt;code dir=&quot;auto&quot;&gt;https://claude.ai/api/mcp/auth_callback&lt;/code&gt; as a redirect URI.&lt;/li&gt;
&lt;li&gt;Your token endpoint is reachable from the internet, and admits Anthropic’s IP range if you allowlist.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In #864 the server logged a successful authorize step and a redirect back to Claude, then no &lt;code dir=&quot;auto&quot;&gt;/token&lt;/code&gt; request at all. If your logs look like that, the failure is likely past your server. Report it with the &lt;code dir=&quot;auto&quot;&gt;ofid_&lt;/code&gt; references.&lt;/p&gt;
&lt;p&gt;A related symptom: &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/457&quot;&gt;#457&lt;/a&gt; reports a public server with no auth where claude.ai still tried to register with a sign-in service and failed with “Couldn’t register with CBETA_search_by_mcp’s sign-in service”.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;connected-but-no-tools&quot;&gt;Connected, but no tools&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Sometimes OAuth completes and the connector still never shows as Connected. &lt;a href=&quot;https://github.com/anthropics/claude-code/issues/88831&quot;&gt;claude-code #88831&lt;/a&gt; describes this: the token exchange succeeds on the server, but the connector backend “never follows up with a request to the MCP resource endpoint itself”. If your logs show a successful &lt;code dir=&quot;auto&quot;&gt;/token&lt;/code&gt; response and no authenticated &lt;code dir=&quot;auto&quot;&gt;/mcp&lt;/code&gt; request after it, you’re likely looking at the same thing.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;if-you-use-mcp-warp&quot;&gt;If you use MCP Warp&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;MCP Warp is the tunnel we build. If your URL is a &lt;code dir=&quot;auto&quot;&gt;*.tunnel.mcpwarp.io/mcp&lt;/code&gt; address, check the status code at the URL first. From &lt;a href=&quot;https://mcpwarp.io/docs/how-to/troubleshooting/&quot;&gt;Troubleshooting&lt;/a&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status at the URL&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The server is enabled, but no &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; is connected for it.&lt;/td&gt;
&lt;td&gt;Start &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; on the machine that hosts the server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;404&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unknown subdomain, or the server is disabled in the dashboard.&lt;/td&gt;
&lt;td&gt;Check the URL; check the server’s status in the dashboard.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;429&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The plan’s request quota is used up for this month.&lt;/td&gt;
&lt;td&gt;Upgrade, or wait for the reset at the start of the UTC month.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;502&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A stdio server crashed 10 times in a row without a 60-second healthy run.&lt;/td&gt;
&lt;td&gt;Run &lt;code dir=&quot;auto&quot;&gt;mcpwarp up --verbose&lt;/code&gt;, fix the server, restart.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;MCP Warp takes care of the public HTTPS URL, the certificate, inbound firewall rules (the tunnel is outbound from your machine), and OAuth discovery: an unauthenticated request gets a &lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; with a &lt;code dir=&quot;auto&quot;&gt;WWW-Authenticate&lt;/code&gt; header pointing at Protected Resource Metadata. It can’t fix failures inside Anthropic’s connector backend.&lt;/p&gt;
&lt;p&gt;Getting there takes a one-time setup: install the CLI, sign in at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to choose a username, and add the server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt;. After that it’s two commands:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt; has the full walkthrough. The Free plan is 100 requests a month and 1 server, and every request a client makes counts.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;still-stuck&quot;&gt;Still stuck&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Open an issue on &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues&quot;&gt;anthropics/claude-ai-mcp&lt;/a&gt;, after searching for your symptom. Include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code dir=&quot;auto&quot;&gt;ofid_&lt;/code&gt; reference for each attempt, with the time and timezone.&lt;/li&gt;
&lt;li&gt;Whether any request arrived, and which paths, with timestamps.&lt;/li&gt;
&lt;li&gt;The full response headers of an unauthenticated &lt;code dir=&quot;auto&quot;&gt;POST&lt;/code&gt; to your MCP URL, including &lt;code dir=&quot;auto&quot;&gt;WWW-Authenticate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The body of your Protected Resource Metadata.&lt;/li&gt;
&lt;li&gt;Your transport and client registration type (none, static, or dynamic client registration).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Redact tokens and anything private before you post.&lt;/p&gt;
</content:encoded></item><item><title>Why claude.ai can&apos;t connect to your local MCP server (and how to fix it)</title><link>https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/</link><guid isPermaLink="true">https://mcpwarp.io/blog/claude-ai-localhost-mcp-server/</guid><description>claude.ai rejects localhost MCP URLs because Anthropic&apos;s servers make the call, not your browser. Why that happens and what a working fix needs.</description><pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;claude.ai can’t use a localhost MCP server because the connection comes from Anthropic’s servers, and they can’t reach your machine. The server needs a public HTTPS URL, ideally with OAuth in front of it. A tunnel such as MCP Warp, Cloudflare Tunnel with Access, or ngrok plus your own auth provides one; add it as a custom connector.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you want the same URL working in every client at once, the companion guide &lt;a href=&quot;https://mcpwarp.io/blog/remote-mcp-server-url/&quot;&gt;One URL for your MCP server, in every client&lt;/a&gt; covers claude.ai, Claude Desktop, Claude Code, ChatGPT and VS Code side by side.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-short-answer&quot;&gt;The short answer&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;When you add a custom connector in claude.ai, your browser doesn’t talk to the MCP server. Anthropic’s backend does. Anthropic’s &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;help article on custom connectors&lt;/a&gt; puts it this way: “When you add a custom connector, Claude connects to your remote MCP server from Anthropic’s cloud infrastructure, rather than from your local device.” To that infrastructure, &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; is Anthropic’s own machine, and your laptop is somewhere on a private network it has no route to.&lt;/p&gt;
&lt;p&gt;So the URL has to be reachable from the public internet over HTTPS with a certificate a normal client trusts. Because that URL now points at your machine, you also want something deciding who may call it, and OAuth is the option claude.ai is built around.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-the-error-looks-like&quot;&gt;What the error looks like&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Paste a localhost URL into a custom connector in Claude Desktop and the dialog only says “Failed to add connector”. The reason is in Claude Desktop’s log files (quoted from &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/9&quot;&gt;anthropics/claude-ai-mcp #9&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Localhost URLs cannot be used because our servers cannot reach your local machine. Provide a publicly accessible MCP server URL.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There is a second variant. Claude Desktop also refuses &lt;code dir=&quot;auto&quot;&gt;http://&lt;/code&gt; URLs outright, even for localhost. The issue is titled:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Claude Desktop rejects URLs with http even on localhost&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and the report on &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/9&quot;&gt;#9&lt;/a&gt; says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I even tried setting up a self-signed certificate and CA, which works in my browser, but Claude Desktop won’t trust it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That issue was closed as “not planned”. An Anthropic collaborator explained why in the thread: “Custom connectors added through the connector settings are reached from Anthropic’s servers, not your local machine, so a &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;http://&lt;/code&gt; URL would not work even if accepted.”&lt;/p&gt;
&lt;p&gt;Not everyone took that well. One commenter wrote “Codex takes an http localhost url without missing a beat.” Another: “This issue forced me off Claude.” Both are in &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/9&quot;&gt;#9&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;why-claudeai-cant-see-your-machine&quot;&gt;Why claude.ai can’t see your machine&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Here is the path a custom connector request takes:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Your browser (claude.ai)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  &quot;use connector X&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Anthropic&apos;s servers          160.79.104.0/21&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  HTTPS request to the connector URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;The public internet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Your laptop                  behind a home router, no public address&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Anthropic publishes the address range its outbound MCP calls come from. On its &lt;a href=&quot;https://platform.claude.com/docs/en/api/ip-addresses&quot;&gt;IP addresses page&lt;/a&gt;, the outbound IPv4 range “that Anthropic uses for outbound requests (for example, when making MCP tool calls to external servers)” is &lt;code dir=&quot;auto&quot;&gt;160.79.104.0/21&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That explains every failed workaround:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;127.0.0.1&lt;/code&gt;&lt;/strong&gt; resolves to the machine making the request, which is Anthropic’s.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A LAN address like &lt;code dir=&quot;auto&quot;&gt;192.168.1.20&lt;/code&gt;&lt;/strong&gt; is private. Anthropic’s servers have no route to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A self-signed certificate or a local CA&lt;/strong&gt; is trusted only by machines you configured. Your browser trusting it says nothing about Anthropic’s servers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A VPN or tailnet address&lt;/strong&gt; works for your devices only. Anthropic’s help article on &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;custom connectors&lt;/a&gt; says it directly: “Servers hosted on a private corporate network, behind a VPN, or blocked by a firewall won’t connect, even if you can reach them from your own machine.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want the full request path for a tunnel, &lt;a href=&quot;https://mcpwarp.io/docs/concepts/how-mcp-warp-works/&quot;&gt;How MCP Warp works&lt;/a&gt; walks through one end to end.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-a-url-needs-before-claudeai-will-use-it&quot;&gt;What a URL needs before claude.ai will use it&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;public-https-with-a-real-certificate&quot;&gt;Public HTTPS with a real certificate&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The hostname must resolve in public DNS, the port must be reachable from the internet, and the certificate must chain to a public CA. Let’s Encrypt is fine. If you run a firewall or IP allowlist in front of the server, it has to admit &lt;code dir=&quot;auto&quot;&gt;160.79.104.0/21&lt;/code&gt;, per &lt;a href=&quot;https://platform.claude.com/docs/en/api/ip-addresses&quot;&gt;Anthropic’s IP addresses page&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;auth-that-matches-what-you-configure-in-the-connector&quot;&gt;Auth that matches what you configure in the connector&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The custom connector dialog has two separate auth settings, according to &lt;a href=&quot;https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp&quot;&gt;Anthropic’s help article&lt;/a&gt;. Under Authentication you pick “Sign in now”, “Sign in when needed” or “No sign in”; the first two run OAuth. Separately, a “Request headers” field takes fixed credentials such as an API key or bearer token that Claude sends on every request.&lt;/p&gt;
&lt;p&gt;No sign-in means anyone who finds the URL can call your tools, on your laptop, with your permissions. A fixed header is a shared secret that lives in a connector setting. OAuth ties each call to an account and is what MCP clients discover automatically: an unauthenticated request gets a &lt;code dir=&quot;auto&quot;&gt;401&lt;/code&gt; with a &lt;code dir=&quot;auto&quot;&gt;WWW-Authenticate&lt;/code&gt; header pointing at Protected Resource Metadata (RFC 9728), and the client runs the sign-in from there. &lt;a href=&quot;https://mcpwarp.io/docs/concepts/security/&quot;&gt;Security&lt;/a&gt; covers that flow as MCP Warp implements it.&lt;/p&gt;
&lt;p&gt;Expect some friction even when you do everything right. The &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues&quot;&gt;claude-ai-mcp issue tracker&lt;/a&gt; has many reports of OAuth connectors failing on Anthropic’s side; the companion &lt;a href=&quot;https://mcpwarp.io/blog/couldnt-reach-the-mcp-server/&quot;&gt;checklist for “Couldn’t reach the MCP server”&lt;/a&gt; collects them.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;streamable-http&quot;&gt;Streamable HTTP&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;claude.ai can’t launch a process on your machine, so a server that only speaks stdio (the kind you start with &lt;code dir=&quot;auto&quot;&gt;uvx something&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;npx something&lt;/code&gt; in Claude Desktop’s JSON config) needs a bridge to HTTP first. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/expose-a-stdio-server/&quot;&gt;Expose a stdio server&lt;/a&gt; shows one way to do it.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;your-options&quot;&gt;Your options&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As of 7 October 2026. Check each project’s page for current terms.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Needs your own domain&lt;/th&gt;
&lt;th&gt;Auth handled for you&lt;/th&gt;
&lt;th&gt;stdio&lt;/th&gt;
&lt;th&gt;URL stays the same&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deploy the server to a host&lt;/td&gt;
&lt;td&gt;Hosting cost&lt;/td&gt;
&lt;td&gt;No, most hosts give you a subdomain&lt;/td&gt;
&lt;td&gt;No, you build it&lt;/td&gt;
&lt;td&gt;Needs a bridge&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://ngrok.com/docs/using-ngrok-with/using-mcp&quot;&gt;ngrok&lt;/a&gt; plus your own auth&lt;/td&gt;
&lt;td&gt;Free tier and paid plans&lt;/td&gt;
&lt;td&gt;No, ngrok gives you a hostname&lt;/td&gt;
&lt;td&gt;Partly (Traffic Policy rules, no MCP OAuth)&lt;/td&gt;
&lt;td&gt;Needs a bridge&lt;/td&gt;
&lt;td&gt;Yes, one auto-assigned dev domain on Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Tunnel plus Access&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Yes, a domain on Cloudflare&lt;/td&gt;
&lt;td&gt;You configure Access and an identity provider&lt;/td&gt;
&lt;td&gt;Needs a bridge&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/terragohan/mcptunnels&quot;&gt;mcptunnels&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;No, it uses its relay’s hostname&lt;/td&gt;
&lt;td&gt;Yes, by default&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No, random URL, expires after 24h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP Warp&lt;/td&gt;
&lt;td&gt;Free (100 requests/month), then $5 or $10/month&lt;/td&gt;
&lt;td&gt;No, URLs are under &lt;code dir=&quot;auto&quot;&gt;tunnel.mcpwarp.io&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes, OAuth at the edge&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes, named per server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;Anthropic MCP tunnels&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Enterprise plan only, by request&lt;/td&gt;
&lt;td&gt;No, Anthropic assigns one&lt;/td&gt;
&lt;td&gt;No, OAuth on each server is yours&lt;/td&gt;
&lt;td&gt;No, Streamable HTTP only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;OpenAI Secure MCP Tunnel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Open-source client; no cost stated&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;n/a, OpenAI products only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A few notes on the rows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deploying&lt;/strong&gt; works when the server only calls cloud APIs. It doesn’t work for servers that need your files, a desktop app like Blender, or a local database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Tunnel plus Access&lt;/strong&gt; is free and solid, but you need a domain on Cloudflare, a Zero Trust setup, an Access application and an identity provider, plus a stdio bridge if your server needs one. &lt;a href=&quot;https://zenn.dev/hideakitamai/articles/6747c9bd56bd4f?locale=en&quot;&gt;This write-up on zenn&lt;/a&gt; shows what the DIY route takes, and &lt;a href=&quot;https://github.com/dalberto/mcp-ferry&quot;&gt;mcp-ferry&lt;/a&gt; exists to glue the pieces together.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mcptunnels&lt;/strong&gt; is the fastest free option: no account, stdio support, auth on by default. The catch is that the tunnel and its URL disappear after 24 hours, so the connector has to be re-added.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropic’s MCP tunnels&lt;/strong&gt; are real and first-party, but they are “available to organizations on the Claude Enterprise plan by request”, need Kubernetes or Docker Compose plus cloudflared inside your network, and by default only forward to RFC 1918 private addresses (&lt;a href=&quot;https://claude.com/docs/connectors/mcp-tunnels/overview&quot;&gt;Anthropic docs&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI’s tunnel&lt;/strong&gt; connects private MCP servers to “ChatGPT, Codex, the Responses API, and AgentKit” (&lt;a href=&quot;https://github.com/openai/tunnel-client&quot;&gt;openai/tunnel-client&lt;/a&gt;). Great if ChatGPT is your only client; it does nothing for claude.ai.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;the-mcp-warp-way&quot;&gt;The MCP Warp way&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;MCP Warp is the tunnel we build. It gives each local server a public HTTPS URL with OAuth at the edge, and it can spawn stdio servers itself. The first run has a few steps; after that it is two commands.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the CLI. On macOS or Linux with Homebrew:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trust&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp/tap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cask&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Scoop, &lt;code dir=&quot;auto&quot;&gt;.deb&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.rpm&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;.apk&lt;/code&gt; packages are in &lt;a href=&quot;https://mcpwarp.io/docs/get-started/&quot;&gt;Get started&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sign in once at &lt;a href=&quot;https://web.mcpwarp.io&quot;&gt;web.mcpwarp.io&lt;/a&gt; to create your account and pick a username. Skip this and &lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; fails with &lt;code dir=&quot;auto&quot;&gt;USERNAME_REQUIRED&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add your server to &lt;code dir=&quot;auto&quot;&gt;~/.mcpwarp/config.json&lt;/code&gt;. For a server already running Streamable HTTP on port 8765:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;servers&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;kind&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;http://127.0.0.1:8765/mcp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For a stdio server, use &lt;code dir=&quot;auto&quot;&gt;&quot;kind&quot;: &quot;stdio&quot;&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;command&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;args&lt;/code&gt; instead.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log in and start the tunnel:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcpwarp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NAME     KIND   URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;notes    http   https://notes-anatoly.tunnel.mcpwarp.io/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In claude.ai, add a custom connector, paste the URL, and complete the OAuth sign-in when prompted. &lt;a href=&quot;https://mcpwarp.io/docs/how-to/connect-claude/&quot;&gt;Connect Claude&lt;/a&gt; has the details.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;MCP Warp isn’t certified by Anthropic; it’s built to work with Claude as a standard Streamable HTTP MCP client.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;things-to-know&quot;&gt;Things to know&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;mcpwarp up&lt;/code&gt; runs in the foreground.&lt;/strong&gt; Close it, or let the laptop sleep, and the URL returns &lt;code dir=&quot;auto&quot;&gt;503&lt;/code&gt; until it reconnects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Free plan is 100 requests a month and 1 server.&lt;/strong&gt; Every HTTP request a client makes to your URL counts, and a single chat with a few tool calls makes several. Plus ($5/month) and Pro ($10/month) remove the request cap. See &lt;a href=&quot;https://mcpwarp.io/docs/reference/limits-and-quotas/&quot;&gt;Limits and quotas&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Only your account can use the URL.&lt;/strong&gt; The edge checks that the token belongs to the server’s owner; a valid token from another account gets a &lt;code dir=&quot;auto&quot;&gt;403&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;faq&quot;&gt;FAQ&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;can-i-use-http-on-localhost-in-claude-desktop&quot;&gt;Can I use http on localhost in Claude Desktop?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Not as a custom connector. The Anthropic reply on &lt;a href=&quot;https://github.com/anthropics/claude-ai-mcp/issues/9&quot;&gt;#9&lt;/a&gt; points to the alternative: run the server as a local stdio server in Claude Desktop’s developer settings (&lt;code dir=&quot;auto&quot;&gt;claude_desktop_config.json&lt;/code&gt;), which connects directly on your machine.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;does-claude-code-accept-localhost&quot;&gt;Does Claude Code accept localhost?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Claude Code runs on your machine, so it can reach a local server directly:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;claude&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--transport&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http://localhost:8765/mcp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.claude.com/docs/en/mcp&quot;&gt;Claude Code MCP docs&lt;/a&gt; cover the &lt;code dir=&quot;auto&quot;&gt;--transport http&lt;/code&gt; option. A public URL only matters if you want the same server in claude.ai, the mobile apps or ChatGPT too.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;is-my-server-exposed-to-everyone&quot;&gt;Is my server exposed to everyone?&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;With a plain tunnel and no auth, yes. With MCP Warp, every request needs a valid OAuth token belonging to you. The URL itself is only an identifier; the token is what protects the server.&lt;/p&gt;
</content:encoded></item></channel></rss>