−25%

kwa Windows ya mwaka, hadi 31 Okt. Tazama mipango

EQVPS
Anza

VPS kwa lango la MCP: seva kadhaa za MCP nyuma ya anwani moja na tokeni moja

Timu yako inatumia seva tatu za MCP zinazojipangisha na kila mtu ana URL tatu na siri tatu. Ziweke nyuma ya anwani moja ya HTTPS kwenye VPS ndogo: Caddy hukagua bearer token, huelekeza kwa njia na huweka seva zenyewe mbali na intaneti. Usanidi uliojaribiwa.

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.

Maswali

Kwa nini kuweka seva za MCP nyuma ya lango?

Anwani moja na tokeni moja kwa timu badala ya moja kwa kila seva, TLS mahali pamoja, na seva zenyewe husikiliza localhost tu. Kuongeza seva ya nne kunakuwa mabadiliko ya mistari mitatu kwenye lango, si siri mpya kwa kila mtu.

Ninahitaji mpango gani?

Mpango wenye IPv4 yake, kwa sababu wateja lazima wafikie milango 80 na 443. Nano-IP ($8/mwezi, 2 vCPU, 1 GB) inatosha kwa lango na seva chache nyepesi za MCP. Ikiwa seva moja hufanya kazi nzito yenyewe, chagua ukubwa kulingana nayo.

Je, utiririshaji hufanya kazi kupitia Caddy?

Ndiyo. Streamable HTTP hutumia maombi ya kawaida ya POST pamoja na server-sent events. Weka flush_interval -1 kwenye reverse proxy ili matukio yapite mara moja badala ya kukaa kwenye bafa.

Je, tokeni moja ya pamoja ni salama vya kutosha?

Kwa timu ndogo ni mwanzo wa busara: tokeni haitoki nje ya HTTPS, na unaibadilisha kwa kuhariri faili moja. Unapohitaji ufikiaji kwa kila mtu au kuuondoa, weka safu halisi ya uthibitishaji mbele yake. Tokeni ya pamoja ni sakafu, si dari.

Je, naweza kuendesha hii kwenye mpango wa NAT?

Si kama lango la umma. Mpango wa NAT una mlango mmoja uliopelekwa kwa SSH na hakuna kingine kinachoingia, kwa hiyo wateja hawafikii 443. Inafanya kazi tu ikiwa wateja wote wako kwenye seva hiyo hiyo.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.