Quick start
Desktop app
- Start the gateway on the Lighthouse page
- Click Publish — a public URL and bearer token appear immediately
- Share the URL and token with any MCP client
CLI
Connecting from another machine
Use the public URL and bearer token in any MCP client: Claude Code~/.cursor/mcp.json)
.vscode/mcp.json)
Authorization header.
Cloudflare Tunnel transport
As an alternative to the QUIC relay, Harbor can use Cloudflare Tunnel via thecloudflared CLI.
cloudflared to be installed:
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:
| QUIC relay | Cloudflare | |
|---|---|---|
| Account required | No | No (temporary URLs) |
| Custom subdomain | Yes | No (trycloudflare.com) |
| Self-hostable | Yes | No |
| Dependency | None | cloudflared binary |
| Who sees traffic | You (self-hosted) or relay operator | Cloudflare |
Custom subdomain
Use the Advanced section in the desktop UI, or the CLI flag:Security model
| Layer | Protection |
|---|---|
| TLS | All traffic to the relay is HTTPS (Caddy + Let’s Encrypt) |
| QUIC tunnel | Noise NKpsk2 protocol — authenticated, forward-secret encryption between your machine and the relay |
| PSK | A pre-shared key compiled into Harbor means only official Harbor binaries can establish tunnels |
| Bearer token | Auto-generated per session — callers without the token receive 401 |
Self-hosting the relay
Any Harbor user can run their own relay server. The relay is the sameharbor 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:2. Firewall ports
3. Clone and configure
/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.
/opt/harbor/docker-compose.yml:
4. Build and start
5. Get your relay’s public key
6. Publish pointing at your relay
Updating
Keypair persistence
The relay keypair is stored in therelay-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
relay.harbormcp.ai is convenient for personal use. Self-hosting is recommended if you’re handling sensitive data or deploying for a team.
