mirror of
https://github.com/anthropics/claude-plugins-official.git
synced 2026-06-13 22:26:03 -03:00
Link to public MCP tunnels docs and use public mcp-proxy image
- Replace doc references with platform.claude.com URLs (overview,
quickstart, security, deploy-compose, deploy-helm, console,
troubleshooting, reference, WIF)
- Swap the POC mcp-proxy image for the public registry digest used in
the published quickstart
🏠 Remote-Dev: homespace
This commit is contained in:
parent
0a6ff87909
commit
12482fd9e2
@ -1,18 +1,23 @@
|
|||||||
# mcp-tunnels
|
# mcp-tunnels
|
||||||
|
|
||||||
Connect Claude to an MCP server running inside your private network through an
|
Connect Claude to an MCP server running inside your private network through an
|
||||||
Anthropic **MCP tunnel** — no inbound ports, no public exposure, no IP
|
Anthropic [**MCP tunnel**](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/overview)
|
||||||
allowlisting on your origin. Traffic flows over an outbound-only connection.
|
— 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
|
> **Research preview.** MCP tunnels is provided "as-is" with no uptime or
|
||||||
> support commitment and depends on a third-party transport provider
|
> support commitment and depends on a third-party transport provider
|
||||||
> (Cloudflare). Review the security model before sending anything sensitive.
|
> (Cloudflare). Review the
|
||||||
|
> [security model](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security)
|
||||||
|
> before sending anything sensitive.
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
### `/create-docker-mcp-tunnel [deployment-dir]`
|
### `/create-docker-mcp-tunnel [deployment-dir]`
|
||||||
|
|
||||||
Drives the MCP tunnels **quickstart** end to end on your machine, using Docker
|
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
|
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
|
testing). It walks you through the parts only you can do in the Claude Console
|
||||||
and runs everything else for you:
|
and runs everything else for you:
|
||||||
@ -103,8 +108,10 @@ public port.
|
|||||||
This plugin targets the **manual-credentials, single-host, local-testing**
|
This plugin targets the **manual-credentials, single-host, local-testing**
|
||||||
path. For a hardened single-host deployment (non-root, read-only rootfs,
|
path. For a hardened single-host deployment (non-root, read-only rootfs,
|
||||||
dropped capabilities), a Kubernetes deployment, or programmatic access via
|
dropped capabilities), a Kubernetes deployment, or programmatic access via
|
||||||
Workload Identity Federation, see the official MCP tunnels deployment guides
|
[Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation),
|
||||||
(Deploy with Docker Compose / Deploy with Helm) in the Claude documentation.
|
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
|
## Author
|
||||||
|
|
||||||
|
|||||||
@ -6,13 +6,16 @@ allowed-tools: [Bash, Read, Write, Edit, AskUserQuestion]
|
|||||||
|
|
||||||
# Create a Docker MCP tunnel
|
# Create a Docker MCP tunnel
|
||||||
|
|
||||||
Drive the **MCP tunnels quickstart** end to end: from zero to Claude calling a
|
Drive the
|
||||||
private MCP server through an Anthropic-operated tunnel, using Docker Compose
|
[**MCP tunnels quickstart**](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/quickstart)
|
||||||
with manually supplied credentials (the shortest path for local testing).
|
end to end: from zero to Claude calling a private MCP server through an
|
||||||
|
Anthropic-operated tunnel, using Docker Compose with manually supplied
|
||||||
|
credentials (the shortest path for local testing).
|
||||||
|
|
||||||
> MCP tunnels is in **research preview**. It is provided "as-is" with no uptime
|
> MCP tunnels is in **research preview**. It is provided "as-is" with no uptime
|
||||||
> or support commitment and depends on a third-party transport (Cloudflare).
|
> or support commitment and depends on a third-party transport (Cloudflare).
|
||||||
> Do not put production traffic through this without reading the security model.
|
> Do not put production traffic through this without reading the
|
||||||
|
> [security model](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security).
|
||||||
|
|
||||||
You are guiding the user through a mix of **local commands you run** and
|
You are guiding the user through a mix of **local commands you run** and
|
||||||
**Console actions only they can do** (creating the tunnel, uploading the CA).
|
**Console actions only they can do** (creating the tunnel, uploading the CA).
|
||||||
@ -56,7 +59,8 @@ that and tell the user; the compose file is v2-compatible.
|
|||||||
|
|
||||||
## Step 1 — Create the tunnel (Console — user action)
|
## Step 1 — Create the tunnel (Console — user action)
|
||||||
|
|
||||||
Tell the user to do this in the [Claude Console](https://console.anthropic.com):
|
Tell the user to do this in the [Claude Console](https://console.anthropic.com)
|
||||||
|
(see [Create a tunnel](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/console#create-a-tunnel)):
|
||||||
|
|
||||||
1. Sidebar → **Manage → MCP tunnels** → **New tunnel**. Give it a name.
|
1. Sidebar → **Manage → MCP tunnels** → **New tunnel**. Give it a name.
|
||||||
2. Leave **Set up programmatic access** **off** — this quickstart uses manual
|
2. Leave **Set up programmatic access** **off** — this quickstart uses manual
|
||||||
@ -115,8 +119,9 @@ cd "$DIR" && set -a && . ./.env && set +a && echo "domain: $TUNNEL_DOMAIN"
|
|||||||
## Step 4 — Generate the CA and server certificate
|
## Step 4 — Generate the CA and server certificate
|
||||||
|
|
||||||
The proxy terminates an inner TLS handshake using a certificate signed by a CA
|
The proxy terminates an inner TLS handshake using a certificate signed by a CA
|
||||||
the user controls. Generate both (Linux/macOS shown; the docs also have a
|
the user controls. Generate both (Linux/macOS shown; the
|
||||||
Windows PowerShell variant — offer it if the user is on Windows):
|
[quickstart](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/quickstart)
|
||||||
|
also has a Windows PowerShell variant — offer it if the user is on Windows):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd "$DIR"
|
cd "$DIR"
|
||||||
@ -145,7 +150,8 @@ chmod 644 data/tls.key
|
|||||||
```
|
```
|
||||||
|
|
||||||
Why these flags: the explicit `-addext` extensions make the CA satisfy the
|
Why these flags: the explicit `-addext` extensions make the CA satisfy the
|
||||||
tunnel's certificate requirements regardless of distro `openssl.cnf` defaults;
|
tunnel's [certificate requirements](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/reference#certificate-requirements)
|
||||||
|
regardless of distro `openssl.cnf` defaults;
|
||||||
`-extfile` (not `-copy_extensions`, which is OpenSSL 3.0+ only) keeps this
|
`-extfile` (not `-copy_extensions`, which is OpenSSL 3.0+ only) keeps this
|
||||||
working on OpenSSL 1.1.x and adds the `AuthorityKeyIdentifier` the proxy
|
working on OpenSSL 1.1.x and adds the `AuthorityKeyIdentifier` the proxy
|
||||||
requires. `chmod 644 data/tls.key` is **required**: openssl writes the key
|
requires. `chmod 644 data/tls.key` is **required**: openssl writes the key
|
||||||
@ -157,7 +163,9 @@ which the `.gitignore` from Step 3 already excludes.
|
|||||||
## Step 5 — Register the CA (Console — user action)
|
## Step 5 — Register the CA (Console — user action)
|
||||||
|
|
||||||
Have the user, on the tunnel detail page, scroll to **Certificates** →
|
Have the user, on the tunnel detail page, scroll to **Certificates** →
|
||||||
**Add certificate**, and upload `$DIR/data/ca.crt` (or paste its contents —
|
**Add certificate**
|
||||||
|
(see [Add a CA certificate](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/console#add-a-ca-certificate)),
|
||||||
|
and upload `$DIR/data/ca.crt` (or paste its contents —
|
||||||
print it with `cat data/ca.crt` so they can copy it). The tunnel status flips
|
print it with `cat data/ca.crt` so they can copy it). The tunnel status flips
|
||||||
to **Active** once a certificate is registered. The tunnel will not appear in
|
to **Active** once a certificate is registered. The tunnel will not appear in
|
||||||
the agent picker until this is done.
|
the agent picker until this is done.
|
||||||
@ -222,13 +230,12 @@ user's chosen subdomain → upstream if they brought their own server (e.g.
|
|||||||
|
|
||||||
## Step 8 — Compose file
|
## Step 8 — Compose file
|
||||||
|
|
||||||
Write `$DIR/docker-compose.yaml`. Images are pinned by digest (research-preview
|
Write `$DIR/docker-compose.yaml`. Images are pinned by digest:
|
||||||
artifacts):
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
mcp-gateway:
|
mcp-gateway:
|
||||||
image: us-west1-docker.pkg.dev/proj-mcp-tunnel-poc/mcp-tunnel-poc-console/mcp-proxy@sha256:d00f95322d8f3c0521467f1969fdd89893cd495ffb7dae0c2d6250c7e47b3e26
|
image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-proxy@sha256:6b9adedbf2763143ec72f106ecaf0ce7fd3294e89b208f54a1db97a33d14c5ba
|
||||||
volumes:
|
volumes:
|
||||||
- ./config/mcp-gateway.yaml:/etc/mcp-gateway/config.yaml:ro
|
- ./config/mcp-gateway.yaml:/etc/mcp-gateway/config.yaml:ro
|
||||||
- ./data:/data:ro
|
- ./data:/data:ro
|
||||||
@ -265,8 +272,9 @@ If the user brought their own server *and* it's containerized, add its service
|
|||||||
here too so it shares the Compose network with the proxy.
|
here too so it shares the Compose network with the proxy.
|
||||||
|
|
||||||
(For a hardened single-host deployment — non-root user, read-only rootfs,
|
(For a hardened single-host deployment — non-root user, read-only rootfs,
|
||||||
`cap_drop: ALL`, `no-new-privileges` — point the user at the "Deploy with
|
`cap_drop: ALL`, `no-new-privileges` — point the user at
|
||||||
Docker Compose" doc; this quickstart keeps it minimal for fast local testing.)
|
[Deploy with Docker Compose](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/deploy-compose);
|
||||||
|
this quickstart keeps it minimal for fast local testing.)
|
||||||
|
|
||||||
## Step 9 — Start and verify
|
## Step 9 — Start and verify
|
||||||
|
|
||||||
@ -335,7 +343,9 @@ it the same as for any other MCP server.
|
|||||||
`docker compose logs cloudflared` (token/edge reachability) and
|
`docker compose logs cloudflared` (token/edge reachability) and
|
||||||
`docker compose logs mcp-gateway` (config/cert/routing) are the two primary
|
`docker compose logs mcp-gateway` (config/cert/routing) are the two primary
|
||||||
diagnostics. Check the outbound connection first, then the inner TLS handshake,
|
diagnostics. Check the outbound connection first, then the inner TLS handshake,
|
||||||
then upstream routing.
|
then upstream routing. See
|
||||||
|
[Troubleshooting](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/troubleshooting)
|
||||||
|
for additional cases.
|
||||||
|
|
||||||
## Operational notes (mention briefly, don't run unprompted)
|
## Operational notes (mention briefly, don't run unprompted)
|
||||||
|
|
||||||
@ -352,5 +362,7 @@ then upstream routing.
|
|||||||
Summarize: deployment dir, route(s) configured, tunnel domain, and the exact
|
Summarize: deployment dir, route(s) configured, tunnel domain, and the exact
|
||||||
URL Claude reaches the server at. Remind the user the token is a live secret in
|
URL Claude reaches the server at. Remind the user the token is a live secret in
|
||||||
`$DIR/.env` (chmod 600, gitignored) and that this is a research-preview,
|
`$DIR/.env` (chmod 600, gitignored) and that this is a research-preview,
|
||||||
local-testing setup — point them at the "Deploy with Docker Compose" / "Deploy
|
local-testing setup — point them at
|
||||||
with Helm" guides for a hardened or programmatic-access deployment.
|
[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)
|
||||||
|
for a hardened or programmatic-access deployment.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user