OffshoreVps
Инструкции6 окт. 20266 мин чтенияАвтор: команда OffshoreVps

Как разместить MCP-сервер на VPS

Запуск удалённого сервера Model Context Protocol: локальный и удалённый режимы, пример на Python, служба systemd, HTTPS с токеном и чек-лист безопасности.

Model Context Protocol (MCP) позволяет ИИ-ассистентам вызывать инструменты и читать данные с серверов, которые вы запускаете. Многие MCP-серверы работают локально, но удалённый сервер на VPS полезен, когда нескольким людям, инструментам или агентам нужны одни и те же возможности. В этом руководстве рассмотрены варианты настройки и безопасная базовая конфигурация.

Окно терминала на VPS с командами для размещения MCP-сервера, начиная с «sudo adduser --disabled-password --gecos "" mcp»
Примерно такие команды вы будете выполнять на своём сервере в этом руководстве.

Локальный или удалённый MCP?

  • Локальный (stdio). Клиент запускает сервер как дочерний процесс на вашей машине. Просто и приватно, но работает только на этой машине.
  • Удалённый (HTTP). Сервер работает на VPS, а клиенты подключаются по HTTPS. Именно его вы размещаете. Он подходит для общих инструментов, долго выполняющихся задач и инструментов, которым нужен фиксированный IP.

Проверьте актуальную спецификацию MCP на предмет транспорта, который поддерживает ваш клиент. Streamable HTTP — обычный выбор для удалённых серверов. Размеры для типичных задач указаны на странице хостинга MCP-серверов.

Шаг 1: подготовьте сервер

Возьмите новый сервер Ubuntu LTS и выполните шаги из статьи как защитить новый VPS. Создайте пользователя для службы.

sudo adduser --disabled-password --gecos "" mcp

Шаг 2: запустите сервер

Используйте официальный SDK или готовый сервер. В этом примере на Python применяется вспомогательный класс FastMCP из MCP SDK:

sudo -iu mcp
python3 -m venv ~/venv && . ~/venv/bin/activate
pip install "mcp[cli]"
# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("demo", host="127.0.0.1", port=8000)

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

if __name__ == "__main__":
    mcp.run(transport="streamable-http")
Шаги этого руководства по порядку: 1. Локальный или удалённый MCP?; 2. подготовьте сервер; 3. запустите сервер; 4. запустите как службу; 5. HTTPS и аутентификация; 6. Чек-лист безопасности
Шаги этого руководства по порядку.

Шаг 3: запустите как службу

[Unit]
Description=MCP server
After=network-online.target

[Service]
User=mcp
WorkingDirectory=/home/mcp
ExecStart=/home/mcp/venv/bin/python server.py
Restart=always

[Install]
WantedBy=multi-user.target

Сохраните файл как /etc/systemd/system/mcp.service и выполните sudo systemctl enable --now mcp.

Шаг 4: HTTPS и аутентификация

MCP-сервер может выполнять код и читать данные, поэтому никогда не оставляйте его открытым. Поставьте его за обратный прокси с TLS и требуйте токен:

mcp.example.com {
  @noauth not header Authorization "Bearer YOUR_LONG_RANDOM_TOKEN"
  respond @noauth 401
  reverse_proxy 127.0.0.1:8000
}

Для рабочей конфигурации используйте OAuth, как описано в спецификации авторизации MCP, а не один общий токен.

Чек-лист безопасности

  • Давайте инструментам минимально необходимый доступ. Не предоставляйте инструменту доступ к оболочке, если только в этом не заключается его назначение.
  • Храните секреты в файлах окружения с правами chmod 600.
  • Журналируйте вызовы инструментов, чтобы видеть, что происходило.
  • Держите порт привязанным к 127.0.0.1 и открывайте наружу только прокси.