Files
zeekay f9fdfcd098 State a version once
A version written into a manifest is written into every manifest that wants it,
which is how eslint came to exist in a hundred and four forms across this estate
and how a package came to resolve twice at run time. The catalog moves the number
out of the manifest: a manifest names the package, the workspace names the
version.

Four are held below their latest because the newer release cannot be used, and
the reason is recorded rather than the version alone: @noble/hashes 2 renamed
every subpath the web3 stack imports, @splinetool/runtime 2 depends on a package
that was never published, @dynamic-labs 5.4.1 the same, and react-resizable-panels
3 points its types condition at the bundle.
2026-08-29 18:14:03 -07:00
..
2025-06-26 17:11:06 -04:00
2025-06-26 17:11:06 -04:00
2025-06-26 17:11:06 -04:00
2026-08-29 18:14:03 -07:00
2025-06-26 17:11:06 -04:00

Cloudflare Tunnels MCP Server

This is a Model Context Protocol (MCP) server that supports remote MCP connections for managing Cloudflare Tunnels.

Cloudflare Tunnels create secure connections between your resources and Cloudflare without a publicly routable IP address. This MCP server provides tools to create, configure, and manage tunnels programmatically.

🔨 Available Tools

Tool Description
tunnels_list List all Cloudflare Tunnels in your account
tunnel_create Create a new Cloudflare Tunnel
tunnel_get Get details of a specific Cloudflare Tunnel
tunnel_config_get Get the configuration of a Cloudflare Tunnel
tunnel_config_update Update the configuration of a Cloudflare Tunnel (ingress rules, WARP routing)
tunnel_delete Delete a Cloudflare Tunnel
tunnel_token_get Get a tunnel token for connector installation
tunnel_connections_list List all active connections for a tunnel

Prompt Examples

  • List all my Cloudflare Tunnels.
  • Create a new tunnel called 'production-api'.
  • Show me the configuration for tunnel 'YOUR_TUNNEL_ID'. (Replace YOUR_TUNNEL_ID)
  • Update the tunnel 'YOUR_TUNNEL_ID' to route api.example.com to http://localhost:8080.
  • Add a new ingress rule to tunnel 'YOUR_TUNNEL_ID' for ssh.example.com pointing to ssh://localhost:22.
  • Get the installation token for tunnel 'YOUR_TUNNEL_ID'.
  • Show me all active connections for tunnel 'YOUR_TUNNEL_ID'.
  • Delete the tunnel 'OLD_TUNNEL_ID'. (Replace OLD_TUNNEL_ID)

Common Tunnel Configuration Examples

Basic Web Service

Update tunnel 'TUNNEL_ID' with ingress rules:
- example.com → http://localhost:3000
- www.example.com → http://localhost:3000
- Catch-all → http_status:404

Multiple Services

Configure tunnel 'TUNNEL_ID' with:
- api.example.com → http://localhost:8080
- app.example.com → http://localhost:3000
- ssh.example.com → ssh://localhost:22
- *.dev.example.com → http://localhost:4000
- Catch-all → http_status:404

With Path Routing

Update tunnel 'TUNNEL_ID' ingress:
- example.com/api/* → http://localhost:8080
- example.com/app/* → http://localhost:3000
- example.com → http://localhost:80

Access the remote MCP server from any MCP Client

If your MCP client has first class support for remote MCP servers, the client will provide a way to accept the server URL (https://tunnels.mcp.cloudflare.com) directly within its interface.

If your client does not yet support remote MCP servers, you will need to set up its respective configuration file using mcp-remote to specify which servers your client can access.

{
	"mcpServers": {
		"cloudflare-tunnels": {
			"command": "npx",
			"args": ["mcp-remote", "https://tunnels.mcp.cloudflare.com/sse"]
		}
	}
}

Development

See CONTRIBUTING.md for development setup instructions.