پخپله کوربه شوي MCP سرورونه زیاتېږي. لومړی د داخلي اسنادو لپاره یو وي، بیا د ډېټابېس لپاره یو، بیا څوک د ډیپلای پایپ لاین لپاره یو کوچنی لیکي. هر یو خپل پورټ، خپل URL او خپل راز لري، او د ټیم هر غړی درې واړه د خپل کلاینټ په تنظیماتو کې ږدي. د ټوکن بدلول یعنې ټولو ته پیغام لېږل.
دروازه دا ټول یوې پتې او یو ټوکن ته اړوي. کلاینټان له https://mcp.example.com/docs/mcp، .../db/mcp او داسې نورو سره نښلي. دروازه ټوکن ګوري، هره لاره په localhost کې سم سرور ته لېږي، او پخپله سرورونه هېڅکله بهر نه ښکاري. ډېر لږ څه پکار دي: یو کوچنی VPS د خپل IPv4 سره او Caddy.
لاندې تنظیم مو په یوه ازمویښتي سرور جوړ کړ او له لیکلو مخکې مو د رښتینو کلاینټانو سره وڅېړ.
څه پکار دي
- یو VPS د عامه IPv4 سره، څو کلاینټان 443 ته ورسېږي. که ستاسو MCP سرورونه پخپله دروند کار نه کوي، Nano-IP بس دی.
- یوه ډومېن د A ریکارډ سره چې سرور ته اشاره کوي، دلته
mcp.example.com. - Ubuntu 24.04 یا Debian 12/13. Caddy د دواړو په معیاري زېرمو کې شته.
۱. MCP سرورونه په localhost وچلوئ
هر سرور د systemd خدمت په توګه چلېږي. دلته د بېلګې د بشپړتیا لپاره د سرچینې سرور server-everything دوه ځله کاروو؛ خپل سرورونه یې پر ځای کېږدئ. Node.js 20 یا نوی ته اړتیا لري:
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
دویمه کاپي 3102 پورټ کاروي. بیا:
systemctl daemon-reload
systemctl enable --now mcp-everything-1 mcp-everything-2
هغه څه چې په ازموینه کې مو ولیدل: دا سرور یوازې 127.0.0.1 ته نه، بلکې ټولو انټرفېسونو ته غوږ نیسي، او ډېر نور هم همداسې کوي. درېیم ګام دا حل کوي.
۲. Caddy: لومړی ټوکن وګورئ، بیا د لارې له مخې یې ولېږئ
یو ټوکن جوړ کړئ او د چاپېریال د فایل له لارې یې Caddy ته ورکړئ:
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
د mcp.example.com سند Caddy پخپله ترلاسه کوي.
د route بلاک ښکلا نه ده. زموږ په لومړۍ نسخه کې د ټوکن څېړنه او د handle_path بلاکونه په پورتنۍ کچه کې څنګ په څنګ وو، او بې ټوکنه غوښتنې په 200 سره سیدې تېرېدې. Caddy لارښوونې په خپل ترتیب برابروي، او handle_path له respond مخکې چلېږي. د route دننه دوی په لیکل شوي ترتیب چلېږي. که دا تنظیم بدلوئ، لومړی د «بې ټوکنه» حالت وازمویئ.
handle_path مخکینی برخه لرې کوي، نو /everything/mcp سرور ته د /mcp په بڼه رسېږي. flush_interval -1 سټریم شوې پېښې د رسېدو سره سم تېروي.
۳. له SSH او HTTPS پرته هر څه وتړئ
apt install -y ufw
ufw default deny incoming
ufw allow OpenSSH
ufw allow 80,443/tcp
ufw enable
له دې وروسته زموږ په ازموینه کې 3101 او 3102 پورټونو ته له سرور بهر رسېدل نه کېدل، په داسې حال کې چې 22 او 443 ځواب ورکاوه. 80 پورټ یوازې ددې لپاره خلاص پاتې کېږي چې Caddy سندونه ترلاسه او نوي کړي او HTTPS ته یې ولېږي.
۴. وڅېړئ
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"
لومړۍ غوښتنه باید 401 او دویمه 200 وښيي. زموږ په ازموینه کې غلط ټوکن او پرې شوي ټوکن دواړو 401 ترلاسه کړ، او یوې ناپېژندل شوې لارې حتی د سم ټوکن سره 404 ترلاسه کړ.
بیا له یو کلاینټ، لکه Claude Code:
claude mcp add --transport http everything https://mcp.example.com/everything/mcp \
--header "Authorization: Bearer $TOKEN"
claude mcp list
دواړو سرورونو ✔ Connected وښود. همغه کلاینټ د غلط ټوکن سره ✘ Failed to connect وښود. د کلاینټ تنظیم په اړه نور په EQVPS MCP له Claude Code او Codex سره ونښلوئ کې ولولئ.
بل سرور زیاتول
هغه په نوي localhost پورټ پیل کړئ، یو handle_path بلاک زیات کړئ، Caddy بیا پورته کړئ. د هېچا تنظیم نه بدلېږي، یوازې د همغه کوربه او همغه ټوکن لاندې یو نوی URL راځي.
هغه پولې چې باید پرې پوه شئ
- د ټولو لپاره یو ټوکن ساده دی او بدلول یې یوه فایل ده، خو تاسو نشئ کولی د ټولو لپاره له بدلولو پرته د یو کس لاسرسی واخلئ. د هر کارن لپاره جلا لاسرسي ته، مخې ته یو تصدیقي پراکسي کېږدئ یا هر کس ته خپله لاره او ټوکن ورکړئ.
- دروازه سرور خوندي نه کوي. هغه MCP سرور چې shell کمانډونه چلوي، د هر هغه چا لپاره چې ټوکن لري لا هم shell دی. ټوکنونه له ګډو تنظیماتو او git څخه لرې وساتئ.
- اندازه د سرورونو له مخې وټاکئ، نه د دروازې. پخپله Caddy څو لسګونه میګابایټه کاروي. که کوم سرور محلي ماډل چلوي یا لویه زېرمه انډکس کوي، پلان هغه ټاکي، نه پراکسي.
یوازې یو MCP سرور لرئ؟ د MCP سرورونو لپاره VPS هغه ساده حالت بیانوي. غواړئ اجنټان مو هغه سرور هم اداره کړي چې پرې اوسېږي؟ دا کار د EQVPS MCP سرور کوي (یا REST API که سکرېپټ غوره ګڼئ)، او د خپل IPv4 لرونکي پلانونه له میاشتې $8 څخه پیلېږي.
تبصرې
لا تبصرې نشته. لومړی اوسئ.