Baru aja beres install ulang MCPProxy dan pindah port ke belakang reverse proxy nginx, eh pas konektor dicoba disambungin dari Claude malah muncul error invalid host header. Kalau kamu ngalamin ini pas expose MCPProxy lewat domain publik (apalagi setelah update ke versi 0.5x ke atas), errornya persis kayak gini: Forbidden: invalid Host header "mcp.domainmu.com". Di artikel ini gue bahas kenapa invalid host header ini muncul, kenapa gampang salah diagnosa karena ada beberapa penyebab lain yang keliatannya mirip, dan cara fix paling praktis tanpa harus buka port ke publik.
Setup awalnya kayak gini: MCPProxy sudah jalan normal, sudah diinstal via apt sesuai panduan instalasi MCPProxy dan reverse proxy sebelumnya, listen di 127.0.0.1:8004, dan sudah di-proxy ke domain publik lewat nginx (CloudPanel reverse proxy). Semua kelihatan fine sampai proses connect OAuth/API key dari Claude gagal terus dengan pesan yang nggak jelas ujung pangkalnya.
Kenapa Invalid Host Header Ini Muncul di MCPProxy
MCPProxy (dan kebanyakan implementasi MCP server berbasis SDK resmi) punya proteksi bawaan namanya DNS rebinding protection. Fiturnya sederhana: server cuma mau percaya request yang header Host-nya cocok sama alamat listen yang dikonfigurasi, biasanya localhost atau 127.0.0.1. Tujuannya emang bagus, mencegah serangan DNS rebinding di mana browser korban dipaksa mengakses service lokal lewat domain yang dikontrol penyerang.
Masalahnya, begitu MCPProxy dipasang di belakang reverse proxy dengan domain publik (misal mcp.domainmu.com), request yang sampai ke MCPProxy otomatis bawa header Host: mcp.domainmu.com karena defaultnya nginx meneruskan header Host asli lewat proxy_set_header Host $host;. Nah, versi lama MCPProxy (sekitar 0.4x) kelihatannya belum menerapkan validasi ini seketat sekarang, jadi setup lama masih bisa jalan normal. Tapi di versi 0.51.0 ke atas, validasinya lebih ketat sehingga Host header yang bukan 127.0.0.1 langsung ditolak dengan status 403.
Gejala di Log yang Bikin Bingung
Enaknya, error ini kelihatan jelas kalau kamu tes langsung ke domain publiknya:
curl -s -X POST "https://mcp.domainmu.com/mcp?api_key=xxx" -H "Content-Type: application/json" -d '{}'
# Forbidden: invalid Host header "mcp.domainmu.com"
Tapi kalau kamu tes ke backend lokalnya langsung, semua kelihatan normal:
curl -s -X POST http://127.0.0.1:8004/mcp -H "Content-Type: application/json" -d '{}'
# Invalid session ID (ini normal, cuma soal protokol MCP)
Bedanya cuma di header Host yang dikirim. Ini kunci diagnosanya.
Cara Fix Invalid Host Header Lewat Reverse Proxy
Solusi paling gampang dan aman: jangan teruskan Host header asli ke MCPProxy, override jadi alamat listen lokalnya. Nggak perlu ubah listen MCPProxy ke 0.0.0.0 dan nggak perlu buka firewall tambahan, karena MCPProxy tetap aman di localhost.
Edit vhost nginx buat domain MCP-mu (di CloudPanel biasanya ada di /etc/nginx/sites-enabled/nama-domain.conf), cari baris di dalam block reverse proxy:
proxy_set_header Host $host;
Ganti jadi alamat listen MCPProxy kamu (sesuaikan port):
proxy_set_header Host 127.0.0.1:8004;
Test syntax dan reload nginx:
sudo nginx -t
sudo systemctl reload nginx
Kalau kamu pakai CloudPanel, ingat vhost yang di-generate lewat UI bisa ke-overwrite lagi kalau kamu save ulang dari panel. Jadi setelah dites berhasil, terapkan juga perubahan yang sama di menu Vhost Editor CloudPanel biar permanen, bukan cuma di file sites-enabled.
Invalid Host Header vs Penyebab Lain yang Mirip
Pas lagi debug error konek ke MCP server, ada beberapa kemungkinan penyebab lain yang gejalanya mirip-mirip (sama-sama 403 atau gagal connect) tapi solusinya beda total. Ini beberapa yang perlu dicek satu-satu biar nggak salah arah:
- CrowdSec ban – kalau kamu pakai CrowdSec di VPS, cek dulu
sudo cscli decisions list. Kalau IP client (Claude atau IP kamu sendiri) nggak ada di daftar ban, berarti bukan ini penyebabnya. Cara setup dan troubleshoot CrowdSec bouncer bisa dibaca di artikel soal mengatasi firewall bouncer CrowdSec. - OAuth discovery endpoint 404 – kalau client kayak Claude minta endpoint
/.well-known/oauth-authorization-serveratau/registerdan hasilnya 404, itu wajar karena MCPProxy nggak jalan sebagai OAuth authorization server buat koneksi masuk. Yang dipakai justru API key lewat query string, bukan OAuth flow. - API key salah atau kosong – cek dulu apakah API key yang dikirim client cocok sama yang ada di
api_keypadamcp_config.json. - Permission Docker buat MCP server berbasis container – kalau ada upstream server yang jalan via
docker run, pastikan user sistemmcpproxysudah masuk grupdocker:sudo usermod -aG docker mcpproxy, baru restart service-nya.
Urutan cek yang efisien: pertama pastikan service MCPProxy jalan normal (systemctl status mcpproxy), kedua tes langsung ke backend lokal (skip nginx dulu), baru bandingkan sama hasil lewat domain publik. Kalau backend lokal normal tapi lewat domain gagal dengan pesan soal Host header, hampir pasti itu invalid host header yang dibahas di atas.
Troubleshooting Tambahan
Beberapa hal lain yang perlu diperhatikan biar setup reverse proxy MCPProxy stabil jangka panjang:
- Selalu cek
sudo journalctl -u mcpproxy -n 50 --no-pagersetiap kali ada error koneksi, karena log-nya biasanya kasih tahu alasan penolakan secara spesifik, bukan cuma kode status HTTP. - Kalau baru pindah port, pastikan config
listendimcp_config.jsondanproxy_passdi nginx dua-duanya sudah sinkron ke port yang sama. - Jangan ubah ownership folder
/etc/mcpproxyke user biasa (misal lewatchownsembarangan), karena service jalan sebagai user sistemmcpproxydan butuh permission yang benar (root:mcpproxy) buat baca config-nya sendiri. - Setelah upgrade versi MCPProxy, selalu cek changelog resminya, karena kayak kasus invalid host header ini, versi baru bisa nambahin proteksi security yang bikin setup lama tiba-tiba nggak kompatibel.
Intinya, error invalid host header di MCPProxy itu bukan tanda ada yang rusak di instalasi kamu, cuma proteksi DNS rebinding yang lebih ketat di versi terbaru. Fix-nya cukup satu baris di config reverse proxy, tanpa perlu buka MCPProxy ke publik atau ubah setting security lainnya. Kalau kamu belum pernah setup MCPProxy dan reverse proxy-nya dari awal, cek dulu dokumentasi resmi instalasi MCPProxy buat referensi opsi konfigurasi lengkapnya.























