Skip to main content
plugin official · Anthropic

mcp-tunnels — Claude Code plugin: private MCP server over a tunnel

Connects Claude to an MCP server inside your private network through an Anthropic tunnel, with no inbound ports or public exposure.

Install into Claude Code · Plugin marketplace All methods and platforms ↓
/plugin install mcp-tunnels@claude-plugins-official
/plugin marketplace add anthropics/claude-plugins-official
Open on GitHub

What mcp-tunnels does

The plugin walks you through the Anthropic MCP tunnels quickstart on Docker Compose with manually supplied credentials, which is the shortest path for local testing. The /create-docker-mcp-tunnel command runs a preflight check on Docker, Docker Compose, OpenSSL and outbound connectivity, then you create the tunnel in the Claude Console and copy the domain. The token never lands in the chat: it goes into a locked-down, gitignored .env.

From there the command generates a CA and a server certificate with OpenSSL using the extensions the tunnel requires, you upload ca.crt in the Console and the tunnel turns Active. Then it scaffolds a verifiable FastMCP sample server or wires up an MCP server you already have, and writes mcp-proxy.yaml plus a docker-compose.yaml with digest-pinned images and the cloudflared agent. The stack comes up, proxy and tunnel logs get checked, and you see how to reach the server from Managed Agents and the Messages API.

You need Docker and Docker Compose, OpenSSL 1.1.1 or newer, and a Claude Console role that can manage MCP tunnels. Outbound access is required to api.anthropic.com:443 and the tunnel edge on 7844 TCP/UDP. This is a research preview: there is no uptime or support commitment, and transport depends on Cloudflare, so read the security model before sending anything sensitive. The plugin targets a single host and local testing; hardened deployments, Kubernetes and Workload Identity Federation access have their own guides.

What it helps with

  • expose an MCP server from a private network without inbound ports
  • generate a CA and server certificate with the required extensions
  • assemble a docker-compose stack with the proxy and cloudflared agent
  • verify the setup through proxy and tunnel logs
  • debug TLS handshake failures and tls.key permission issues

Example prompts for the agent

  • /create-docker-mcp-tunnel
  • /create-docker-mcp-tunnel ~/work/my-tunnel
  • Show me how to call this MCP server from the Messages API

How to install mcp-tunnels

Plugin marketplace

/plugin install mcp-tunnels@claude-plugins-official
/plugin marketplace add anthropics/claude-plugins-official

Step by step, with commands for each platform: Claude Code plugins: marketplaces, installing, and building your own

Questions about mcp-tunnels

How do I install mcp-tunnels in Claude?

Add the marketplace first: /plugin marketplace add anthropics/claude-plugins-official. Then install the plugin: /plugin install mcp-tunnels@claude-plugins-official.

What does mcp-tunnels do?

It drives the Anthropic MCP tunnels quickstart on Docker Compose: certificates, proxy config, cloudflared and a verifiable sample server. The result is a private MCP server reachable from Claude over an outbound-only connection.

What do I need before running it?

Docker and Docker Compose, OpenSSL 1.1.1 or newer, and a Claude Console role that can manage MCP tunnels. You also need outbound access to api.anthropic.com:443 and the tunnel edge on 7844 TCP/UDP.

Source text

mcp-tunnels · Apache-2.0
# mcp-tunnels

Connect Claude to an MCP server running inside your private network through an
Anthropic [**MCP tunnel**](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/overview)
— no inbound ports, no public exposure, no IP allowlisting on your origin.
Traffic flows over an outbound-only connection.

> **Research preview.** MCP tunnels is provided "as-is" with no uptime or
> support commitment and depends on a third-party transport provider
> (Cloudflare). Review the
> [security model](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security)
> before sending anything sensitive.

## Commands

### `/create-docker-mcp-tunnel [deployment-dir]`

Drives the MCP tunnels
[**quickstart**](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/quickstart)
end to end on your machine, using Docker
Compose with manually supplied credentials (the shortest path for local
testing). It walks you through the parts only you can do in the Claude Console
and runs everything else for you:

1. **Preflight** — checks Docker, Docker Compose, OpenSSL, and outbound
   connectivity.
2. **Create the tunnel** (Console) — you create it and copy the domain; the
   token stays out of the chat and goes into a locked-down, gitignored `.env`.
3. **Certificates** — generates a CA and a server certificate with OpenSSL,
   with the exact extensions the tunnel requires.
4. **Register the CA** (Console) — you upload `ca.crt`; the tunnel goes Active.
5. **Upstream** — scaffolds a verifiable FastMCP sample server, or wires up an
   MCP server you already have.
6. **Proxy config + Compose** — writes `mcp-proxy.yaml` and a
   `docker-compose.yaml` with digest-pinned images and the cloudflared agent.
7. **Start and verify** — brings the stack up and checks the proxy and tunnel
   logs.
8. **Call it from Claude** — shows you how to reach the server from Managed
   Agents and the Messages API.

It also carries a troubleshooting matrix (TLS handshake failures, the
`routes`-must-be-a-map gotcha, the `tls.key` permission issue, the
config-is-not-hot-reloaded trap, upstream IP validation) and the operational
basics for token rotation and certificate renewal.

**Usage:**

```
/create-docker-mcp-tunnel
/create-docker-mcp-tunnel ~/work/my-tunnel
```

### Copying the CA certificate to another machine

You register the CA in the Console from a browser, which is often a different
machine than the one running the stack (for example, the tunnel runs in a
remote homespace but you upload `ca.crt` from your laptop or devbox). Only the
**certificate** (`<deployment-dir>/data/ca.crt`, ~1 KB PEM) leaves the host —
never `data/ca.key` or `data/tls.key`.

For a file this small, the simplest path is to print it and paste it into the
Console's certificate field directly:

```bash
cat <deployment-dir>/data/ca.crt   # default: ~/mcp-tunnel/data/ca.crt
```

To copy it as a file with `scp`, run the command from whichever machine can
SSH to the other (`scp` can't relay between two remotes). Pulling from a
homespace onto your devbox — if you've run `coder config-ssh`, the host is
`coder.<workspace>`:

```bash
scp coder.<workspace>:<deployment-dir>/data/ca.crt .
# generic form: scp <homespace-ssh-host>:~/mcp-tunnel/data/ca.crt .
```

Or push from the host to the devbox, if the host can reach it:

```bash
scp <deployment-dir>/data/ca.crt <user>@<devbox-host>:~/
```

## What gets built

A small container stack on your host:

| Container | Role |
|---|---|
| **mcp-proxy** | Anthropic's proxy. Terminates inner TLS with a cert you control, validates upstream IPs, routes by hostname. |
| **cloudflared** | The tunnel agent. Outbound-only to the Anthropic tunnel edge; shares the proxy's network namespace. |
| **hello-mcp** *(optional)* | A FastMCP sample server, only if you don't have an MCP server to expose yet. |

When it's running, the routed server is reachable from Claude at
`https://<subdomain>.<your-tunnel-domain>/<path>` with nothing listening on a
public port.

## Requirements

- Docker and Docker Compose.
- OpenSSL 1.1.1 or newer.
- A Claude Console role that can manage MCP tunnels.
- Outbound access to `api.anthropic.com:443` and the tunnel edge on 7844
  TCP/UDP. No inbound ports are opened.

## Scope and next steps

This plugin targets the **manual-credentials, single-host, local-testing**
path. For a hardened single-host deployment (non-root, read-only rootfs,
dropped capabilities), a Kubernetes deployment, or programmatic access via
[Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation),
see the official deployment guides:
[Deploy with Docker Compose](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/deploy-compose) /
[Deploy with Helm](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/deploy-helm).

## Author

Anthropic ([email protected])

## License

See `LICENSE`.

© Anthropic · Apache-2.0 · anthropics/claude-plugins-official

Similar plugins

All plugins for DevOps and infrastructure →

From the same set123

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor