Haijun Platform Docs
EN

Note: MCP tunnels (terowongan MCP) sedang dalam pratinjau riset. Minta akses untuk mencobanya.

Panduan memulai cepat ini membawa Anda dari nol hingga Haijun memanggil server MCP privat melalui sebuah tunnel. Panduan ini menggunakan Docker Compose dengan penyediaan kredensial manual, yang merupakan jalur terpendek untuk pengujian lokal. Untuk deployment produksi, lihat Deploy dengan Helm atau Deploy dengan Docker Compose.

Apa yang akan Anda bangun

Sebuah tunnel stack (tumpukan tunnel) dua kontainer (proxy dan cloudflared) ditambah sebuah server MCP contoh yang berjalan di sampingnya. Ketika semuanya berjalan, server contoh tersebut dapat dijangkau dari Haijun di https://echo./mcp meskipun tidak ada yang mendengarkan pada port publik.

Apa yang Anda butuhkan

  • OpenSSL 1.1.1 atau lebih baru. Sudah terpasang di macOS dan sebagian besar distribusi Linux; di Windows, instal secara terpisah (biner openssl harus ada di PATH Anda).
  1. Buat tunnel

Di sidebar Haijun Console, buka Manage > MCP tunnels dan klik New tunnel. Beri nama. Biarkan Set up programmatic access nonaktif; panduan memulai cepat ini menggunakan penyediaan kredensial manual.

Setelah dibuat, buka tunnel tersebut. Salin dua nilai dari bagian Connection:

  • Domain (terlihat seperti abcd1234.tunnel.juglow.com)
  • Token (klik ikon mata, lalu salin)
  1. Siapkan direktori deployment

macOS / Linux

ash r -p mcp-tunnel/{config,data} cp-tunnel rt TUNNEL_DOMAIN=YOUR_TUNNEL_DOMAIN_HERE # from step 1 rt TUNNEL_TOKEN='eyJ...' # from step 1

ndows (PowerShell)**

owershell Item -ItemType Directory -Force -Path mcp-tunnel/config, mcp-tunnel/data | Out-Null Location mcp-tunnel :TUNNEL_DOMAIN = "YOUR_TUNNEL_DOMAIN_HERE" # from step 1 :TUNNEL_TOKEN = "eyJ..." # from step 1

  1. Buat CA dan sertifikat server

Proxy mengakhiri inner TLS (TLS bagian dalam) menggunakan sertifikat yang ditandatangani oleh CA yang Anda kendalikan. Buat keduanya:

macOS / Linux

ash ssl req -x509 -newkey rsa:2048 -nodes \ eyout data/ca.key -out data/ca.crt \ ays 3650 -subj "/CN=mcp-tunnel-ca" \ ddext "basicConstraints=critical,CA:TRUE" \ ddext "keyUsage=critical,keyCertSign,cRLSign" \ ddext "subjectKeyIdentifier=hash"

data/tls.ext <

ectAltName = DNS:${TUNNEL_DOMAIN},DNS:*.${TUNNEL_DOMAIN} orityKeyIdentifier = keyid,issuer ndedKeyUsage = serverAuth

ssl req -newkey rsa:2048 -nodes \ eyout data/tls.key -out /tmp/server.csr \ ubj "/CN=${TUNNEL_DOMAIN}" ssl x509 -req -in /tmp/server.csr \ A data/ca.crt -CAkey data/ca.key -CAcreateserial \ ut data/tls.crt -days 90 -extfile data/tls.ext

d 644 data/tls.key

ndows (PowerShell)**

owershell ssl req -x509 -newkey rsa:2048 -nodes eyout data/ca.key -out data/ca.crt ays 3650 -subj "/CN=mcp-tunnel-ca" ddext "basicConstraints=critical,CA:TRUE" ddext "keyUsage=critical,keyCertSign,cRLSign" ` ddext "subjectKeyIdentifier=hash"

ectAltName = DNS:$env:TUNNEL_DOMAIN,DNS:*.$env:TUNNEL_DOMAIN orityKeyIdentifier = keyid,issuer ndedKeyUsage = serverAuth Set-Content -NoNewline -Encoding ascii -Path data/tls.ext

ssl req -newkey rsa:2048 -nodes eyout data/tls.key -out data/server.csr ubj "/CN=$env:TUNNEL_DOMAIN" ssl x509 -req -in data/server.csr A data/ca.crt -CAkey data/ca.key -CAcreateserial ut data/tls.crt -days 90 -extfile data/tls.ext

Kembali ke Console, pada halaman detail tunnel, klik Add certificate dan unggah data/ca.crt (atau tempel isinya). Status tunnel berubah menjadi Active.

  1. Tulis server MCP contoh

macOS / Linux

ash

hello_server.py <<'EOF'

mcp.server.fastmcp import FastMCP

= FastMCP("hello-server", host="0.0.0.0", port=9000)

.tool() hello(name: str = "world") -> str: """Say hello to someone.""" return f"Hello, {name}!"

_name__ == "__main__": mcp.run(transport="streamable-http")

ndows (PowerShell)**

owershell

mcp.server.fastmcp import FastMCP

= FastMCP("hello-server", host="0.0.0.0", port=9000)

.tool() hello(name: str = "world") -> str: """Say hello to someone.""" return f"Hello, {name}!"

_name__ == "__main__": mcp.run(transport="streamable-http") Set-Content -NoNewline -Encoding ascii -Path hello_server.py

  1. Tulis konfigurasi proxy dan file compose

macOS / Linux

ash

config/mcp-proxy.yaml <

en_addr: ":8080" el_domain: ${TUNNEL_DOMAIN}

rt_file: /data/tls.crt y_file: /data/tls.key es: ho: http://hello-mcp:9000

docker-compose.yaml <<'EOF'

ices: p-proxy: image: us-docker.pkg.dev/juglow-public-registry/images/mcp-proxy@sha256:efb27b299d627e4134815663cb8896641eeaee025d734c0f695582b4df38f013 volumes:

  • ./config/mcp-proxy.yaml:/etc/mcp-gateway/config.yaml:ro
  • ./data:/data:ro

restart: unless-stopped

oudflared: image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0 command: tunnel --no-autoupdate run --url http://localhost:8080 environment:

  • TUNNEL_TOKEN

network_mode: "service:mcp-proxy" restart: unless-stopped

llo-mcp: image: python:3.13-slim working_dir: /app volumes:

  • ./hello_server.py:/app/hello_server.py:ro

command: sh -c "pip install --quiet mcp && python hello_server.py" restart: unless-stopped

ndows (PowerShell)**

owershell

en_addr: ":8080" el_domain: $env:TUNNEL_DOMAIN

rt_file: /data/tls.crt y_file: /data/tls.key es: ho: http://hello-mcp:9000 Set-Content -NoNewline -Encoding ascii -Path config/mcp-proxy.yaml

ices: p-proxy: image: us-docker.pkg.dev/juglow-public-registry/images/mcp-proxy@sha256:efb27b299d627e4134815663cb8896641eeaee025d734c0f695582b4df38f013 volumes:

  • ./config/mcp-proxy.yaml:/etc/mcp-gateway/config.yaml:ro
  • ./data:/data:ro

restart: unless-stopped

oudflared: image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0 command: tunnel --no-autoupdate run --url http://localhost:8080 environment:

  • TUNNEL_TOKEN

network_mode: "service:mcp-proxy" restart: unless-stopped

llo-mcp: image: python:3.13-slim working_dir: /app volumes:

  • ./hello_server.py:/app/hello_server.py:ro

command: sh -c "pip install --quiet mcp && python hello_server.py" restart: unless-stopped Set-Content -NoNewline -Encoding ascii -Path docker-compose.yaml

  1. Jalankan

macOS / Linux

ash er compose up -d er compose logs mcp-proxy | grep "route configured" er compose logs cloudflared | grep "Registered tunnel connection"

ndows (PowerShell)**

owershell er compose up -d er compose logs mcp-proxy | Select-String "route configured" er compose logs cloudflared | Select-String "Registered tunnel connection"

Anda seharusnya melihat satu baris route configured untuk echo dan empat baris Registered tunnel connection. Kontainer membutuhkan beberapa detik untuk mulai; jalankan ulang perintah log jika hasilnya kosong.

  1. Panggil dari Haijun

Di Console, buka Managed Agents > Sessions dan buat sebuah sesi. Di pemilih agen, pilih Create new agent, beri nama agen, dan pertahankan model yang sudah terisi. Klik + MCP Server, pilih tunnel Anda, atur Subdomain ke echo dan Path ke mcp. Lalu tanyakan:

Use the hello tool to greet tunnel.

Anda seharusnya melihat sebuah pemanggilan alat diikuti oleh hasilnya.

Langkah selanjutnya

Tunnel telah terverifikasi dari ujung ke ujung. Untuk menggantinya dengan server MCP Anda sendiri, tambahkan server tersebut ke docker-compose.yaml (atau jalankan di jaringan Docker yang sama), tambahkan rute untuknya di config/mcp-proxy.yaml, lalu mulai ulang proxy (docker compose restart mcp-proxy).

Untuk deployment produksi:

Deployment host tunggal yang diperkuat, dengan atau tanpa akses programatik.

Deployment Kubernetes dengan manajemen kredensial otomatis.

On this page
Apa yang akan Anda bangunApa yang Anda butuhkanLangkah selanjutnya