Skip to main content
Harbor’s publish feature creates an outbound QUIC tunnel from your machine to a relay server, giving your local MCP tools a public HTTPS URL. No port forwarding, no static IP required.

Quick start

Desktop app

  1. Start the gateway on the Lighthouse page
  2. Click Publish — a public URL and bearer token appear immediately
  3. Share the URL and token with any MCP client

CLI

Output:

Connecting from another machine

Use the public URL and bearer token in any MCP client: Claude Code
Cursor (~/.cursor/mcp.json)
VS Code (.vscode/mcp.json)
Another Harbor instance — Servers → Add Server → Remote, paste the URL and Authorization header.

Cloudflare Tunnel transport

As an alternative to the QUIC relay, Harbor can use Cloudflare Tunnel via the cloudflared CLI.
This requires cloudflared to be installed:
Harbor spawns cloudflared tunnel --url http://127.0.0.1:3100 and extracts the assigned *.trycloudflare.com URL. No Cloudflare account required for temporary tunnels. When to use Cloudflare vs QUIC relay:

Custom subdomain

Use the Advanced section in the desktop UI, or the CLI flag:
If the subdomain is already taken, a random one is assigned.

Security model

What the relay can see: The relay sees the plaintext of requests before encrypting them for the tunnel. This is equivalent to ngrok or Cloudflare Tunnel. If you need full privacy, run your own relay (see below).

Self-hosting the relay

Any Harbor user can run their own relay server. The relay is the same harbor binary — no separate software needed.

Prerequisites

  • A VPS with a public IP (any cloud provider)
  • A domain you control (e.g. relay.example.com)
  • Docker and Docker Compose

1. DNS records

Add two A records pointing to your VPS IP:
The wildcard is required for subdomain routing.

2. Firewall ports

3. Clone and configure

Create /opt/harbor/Caddyfile:
For wildcard TLS you need a DNS API provider (e.g. Cloudflare). Standard HTTP challenge only covers the apex domain. See the Caddy docs for DNS challenge setup.
Create /opt/harbor/docker-compose.yml:

4. Build and start

5. Get your relay’s public key

Save this key — your clients need it to connect.

6. Publish pointing at your relay

Or in the Harbor desktop UI, open Advanced and enter your relay address and key.

Updating

Keypair persistence

The relay keypair is stored in the relay-data Docker volume at /data/harbor-relay/keypair. It persists across container restarts. If you delete the volume, a new keypair is generated and existing clients will need the new public key.

Why self-host?

Running your own relay means:
  • You are the only operator — no third party can see your traffic
  • The relay code is open source — you can audit exactly what it does
  • Your subdomain is on your own domain
The managed relay at relay.harbormcp.ai is convenient for personal use. Self-hosting is recommended if you’re handling sensitive data or deploying for a team.