Вы написали MCP-сервер. Локально всё хорошо — агент его дёргает, инструменты срабатывают, всё связано. А потом вы закрываете ноутбук, и его нет. Если сервер должен быть доступен в любой момент, когда он нужен агенту — с другой машины, из чужого сетапа, по расписанию в три часа ночи — он должен жить там, где всегда включено, со стабильным адресом и HTTPS. Для этого и нужен VPS.
Ниже — как перенести MCP-сервер с ноутбука на машину, которой вы реально управляете, и честно про то, куда уходят силы.
stdio против remote: что значит «хостить»
MCP-серверы бывают двух видов.
stdio-сервер работает как локальный процесс и общается с клиентом на той же машине через стандартный ввод/вывод. Пока вы разрабатываете — идеально. Но по сети до него не достучаться.
Remote-сервер говорит по HTTP (Server-Sent Events или новый транспорт streamable-HTTP) через URL. Любой клиент, который знает адрес и держит нужные креды, может его вызвать. Хостить свой MCP-сервер — значит запустить именно remote-вариант где-то публично и стабильно.
Почему не тоннель с ноутбука
Технически домашнюю машину можно выставить наружу тоннелем, и для быстрой демки этого хватит. Но во всём, на что вы полагаетесь всерьёз, вы получаете её проблемы: она уходит в сон, провайдер меняет IP, аплоад медленный, а теперь ещё и сервис с боевыми инструментами висит в домашней сети рядом со всем остальным. VPS даёт фиксированный публичный IP, нормальный домен, реальный аптайм и изоляцию. За пару долларов в месяц это убирает целый класс вопросов «почему у агента отвалилось соединение».
Стек по шагам
Возьмите маленькую машину. MCP tool-сервер — это в основном I/O: он ждёт API, файлы, базы, а не молотит числа. 1–2 ГБ оперативки хватает большинству. (Гонять модель внутри, чтобы отвечать, — другая история, см. self-hosting LLM с Ollama.)
Запустите сервер на localhost — например, Node или Python на 127.0.0.1:3100. Наружу напрямую его не выставляйте, этим займётся прокси.
Поставьте перед ним reverse-proxy, чтобы терминировать TLS на вашем домене. Caddy делает это примерно в четыре строки и сам получает бесплатный сертификат:
mcp.yourdomain.com {
reverse_proxy 127.0.0.1:3100
}
Направьте mcp.yourdomain.com на IP вашего VPS, перезагрузите Caddy — и сервер живёт на https://mcp.yourdomain.com по streamable-HTTP.
Чтобы работал всегда
Сервер, который умирает при первом краше или перезагрузке, — это не «захостили», это «пока работает». Заверните его в systemd-юнит, чтобы он рестартовал после падения и поднимался после ребута:
[Unit]
Description=My MCP server
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/mcp/server.js
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
systemctl enable --now my-mcp — и он по-настоящему всегда включён. (Тот же приём держит любого агента или бота 24/7.)
То, что упускают: нужен доступный порт
Публичному MCP-эндпоинту нужен входящий порт — 443 — доступный из интернета. На NAT-тарифе у вас ровно один проброшенный порт под SSH и ничего больше; открыть 443 наружу не получится. Чтобы хостить публичный HTTPS MCP-сервер, нужен тариф с выделенным IP, где все порты ваши и домен направляется прямо на машину. Это и есть разница между «мой агент на том же ноутбуке достаёт до него» и «любой клиент откуда угодно».
Закройте его — это API с правами
MCP-сервер обычно даёт инструменты, которые что-то делают: читают файлы, дёргают платные API, двигают деньги. Голым в открытый интернет это выставлять нельзя.
- Требуйте токен на каждом вызове. Отбивайте анонимные запросы; проверяйте bearer-токен или API-ключ до запуска любого инструмента.
- Фаервол на всё, кроме 443 и вашего SSH-порта.
- SSH только по ключам, без пароля. (Чек-лист на десять минут.)
Относитесь к эндпоинту как к тому, чем он и является — API с реальными полномочиями, — и большая часть риска уходит.
Честные ограничения
- Теперь эксплуатация на вас. Обновления ОС, здоровье процесса, логи. Сертификат Caddy продлевает сам, остальное — ваше. Managed-функция в облаке это прячет; VPS отдаёт вам в обмен на контроль и куда меньший счёт.
- Спека MCP ещё движется. Транспорты и схемы авторизации меняются от релиза к релизу. Зафиксируйте версию SDK и будьте готовы иногда обновляться.
- CPU-машина хороша для tool-серверов, а не для генерации ответов локальной моделью. Если сервер запускает LLM, чтобы отвечать, — это отдельная и более тяжёлая машина, см. гайд по Ollama.
- Никогда не выставляйте разрушающие инструменты без авторизации и шага подтверждения. Открытый инструмент, который что-то удаляет, рано или поздно встретит бота, сканирующего всё подряд.
Как платить
Регистрация по email, оплата в USDC или USDT — без карты и без документов. А если вы поднимаете это для агента, такую же машину можно заказать и оплатить программно через наш собственный MCP-сервер: агент регистрируется, пополняет баланс и заказывает сам.
Захостите сервер один раз — и ваши инструменты на месте всякий раз, когда за ними тянется агент.