Seva za MCP zinazojipangisha huongezeka. Kwanza kuna moja ya nyaraka za ndani, kisha moja ya hifadhidata, kisha mtu huandika ndogo ya mfumo wa usambazaji. Kila moja ina mlango wake, URL yake na siri yake, na kila mtu kwenye timu hubandika zote tatu kwenye usanidi wa mteja wake. Kubadilisha tokeni kunamaanisha kumwandikia kila mtu.
Lango hugeuza hayo kuwa anwani moja na tokeni moja. Wateja huunganisha na https://mcp.example.com/docs/mcp, .../db/mcp na kadhalika. Lango hukagua tokeni, hutuma kila njia kwa seva sahihi kwenye localhost, na seva zenyewe hazifichuliwi kamwe. Kinachohitajika ni kidogo sana: VPS ndogo yenye IPv4 yake na Caddy.
Tulijenga usanidi ulio hapa chini kwenye seva ya majaribio na kuukagua kwa wateja halisi kabla ya kuandika hili.
Unachohitaji
- VPS yenye IPv4 ya umma, ili wateja wafikie 443. Nano-IP inatosha, isipokuwa seva zako za MCP zifanye kazi nzito zenyewe.
- Kikoa chenye rekodi ya A inayoelekeza kwa seva, hapa
mcp.example.com. - Ubuntu 24.04 au Debian 12/13. Caddy iko kwenye hazina za kawaida za zote mbili.
1. Endesha seva za MCP kwenye localhost
Kila seva huendeshwa kama huduma ya systemd. Hapa tunatumia seva ya marejeo server-everything mara mbili ili mfano ujitosheleze; weka zako. Inahitaji Node.js 20 au mpya zaidi:
mkdir -p /opt/mcp && cd /opt/mcp
npm install @modelcontextprotocol/server-everything
# /etc/systemd/system/mcp-everything-1.service
[Unit]
Description=MCP server everything #1
After=network.target
[Service]
WorkingDirectory=/opt/mcp
Environment=PORT=3101
ExecStart=/opt/mcp/node_modules/.bin/mcp-server-everything streamableHttp
Restart=always
User=nobody
[Install]
WantedBy=multi-user.target
Nakala ya pili hutumia mlango 3102. Kisha:
systemctl daemon-reload
systemctl enable --now mcp-everything-1 mcp-everything-2
Jambo tuliloona wakati wa majaribio: seva hii husikiliza kwenye violesura vyote, si 127.0.0.1 tu, na nyingine nyingi hufanya hivyo pia. Hatua ya 3 inashughulikia hilo.
2. Caddy: kagua tokeni kwanza, kisha elekeza kwa njia
Tengeneza tokeni na umpe Caddy kupitia faili ya mazingira:
apt install -y caddy
echo "MCP_GATEWAY_TOKEN=$(openssl rand -hex 32)" > /etc/caddy/gateway.env
chmod 600 /etc/caddy/gateway.env
mkdir -p /etc/systemd/system/caddy.service.d
printf '[Service]\nEnvironmentFile=/etc/caddy/gateway.env\n' > /etc/systemd/system/caddy.service.d/env.conf
systemctl daemon-reload
Caddyfile:
mcp.example.com {
route {
@unauthorized not header Authorization "Bearer {$MCP_GATEWAY_TOKEN}"
respond @unauthorized 401
handle_path /everything/* {
reverse_proxy 127.0.0.1:3101 {
flush_interval -1
}
}
handle_path /tools2/* {
reverse_proxy 127.0.0.1:3102 {
flush_interval -1
}
}
respond 404
}
}
caddy validate --config /etc/caddy/Caddyfile && systemctl restart caddy
Caddy hupata cheti cha mcp.example.com yenyewe.
Kizuizi cha route si pambo. Toleo letu la kwanza liliweka ukaguzi wa tokeni na vizuizi vya handle_path ubavu kwa ubavu kwenye ngazi ya juu, na maombi yasiyo na tokeni yalipita moja kwa moja na 200. Caddy hupanga maagizo kwa mpangilio wake mwenyewe, na handle_path huendeshwa kabla ya respond. Ndani ya route huendeshwa kwa mpangilio ulioandikwa. Ukibadilisha usanidi huu, jaribu kwanza hali ya "bila tokeni".
handle_path huondoa kiambishi, kwa hiyo /everything/mcp hufika kwa seva kama /mcp. flush_interval -1 hupitisha matukio ya mtiririko yanapofika.
3. Funga kila kitu isipokuwa SSH na HTTPS
apt install -y ufw
ufw default deny incoming
ufw allow OpenSSH
ufw allow 80,443/tcp
ufw enable
Baada ya hapo, kwenye jaribio letu milango 3101 na 3102 haikufikika kutoka nje ya seva, huku 22 na 443 zikijibu. Mlango 80 hubaki wazi tu ili Caddy apate na kuhuisha vyeti na kuelekeza kwenye HTTPS.
4. Kagua
TOKEN=$(cut -d= -f2 /etc/caddy/gateway.env)
INIT='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"check","version":"1"}}}'
curl -s -o /dev/null -w '%{http_code}\n' -X POST https://mcp.example.com/everything/mcp \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d "$INIT"
curl -s -o /dev/null -w '%{http_code}\n' -X POST https://mcp.example.com/everything/mcp \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d "$INIT"
Ombi la kwanza linapaswa kuchapisha 401 na la pili 200. Kwenye jaribio letu, tokeni isiyo sahihi na tokeni iliyokatwa zote zilipata 401, na njia isiyojulikana ilipata 404 hata kwa tokeni sahihi.
Kisha kutoka kwa mteja, kwa mfano Claude Code:
claude mcp add --transport http everything https://mcp.example.com/everything/mcp \
--header "Authorization: Bearer $TOKEN"
claude mcp list
Seva zote mbili zilionyesha ✔ Connected. Mteja yule yule kwa tokeni isiyo sahihi alionyesha ✘ Failed to connect. Zaidi kuhusu kusanidi wateja kwenye Unganisha EQVPS MCP na Claude Code na Codex.
Kuongeza seva inayofuata
Iwashe kwenye mlango mpya wa localhost, ongeza kizuizi kimoja cha handle_path, pakia upya Caddy. Usanidi wa mtu yeyote haubadiliki, isipokuwa URL mpya chini ya mwenyeji yule yule na tokeni ile ile.
Mipaka inayofaa kujua
- Tokeni moja kwa wote ni rahisi na kuibadilisha ni faili moja, lakini huwezi kumwondolea mtu mmoja ufikiaji bila kuibadilisha kwa wote. Kwa ufikiaji wa kila mtumiaji, weka proksi ya uthibitishaji mbele au mpe kila mtu njia na tokeni yake.
- Lango halifanyi seva kuwa salama. Seva ya MCP inayoendesha amri za shell bado ni shell kwa yeyote mwenye tokeni. Weka tokeni mbali na usanidi wa pamoja na git.
- Chagua ukubwa kwa seva, si kwa lango. Caddy yenyewe hutumia makumi machache ya megabaiti. Ikiwa moja ya seva zako inaendesha modeli ya ndani au inaorodhesha hazina kubwa, ndiyo inayoamua mpango, si proksi.
Una seva moja tu ya MCP? VPS kwa seva za MCP inashughulikia hali hiyo rahisi zaidi. Unataka mawakala wako pia wasimamie seva wanayoishi? Hilo hufanywa na seva ya MCP ya EQVPS (au REST API ukipendelea hati), na mipango yenye IPv4 yake huanzia $8 kwa mwezi.
Maoni
Bado hakuna maoni. Kuwa wa kwanza.