Базовая конфигурация и тестирование локального сервера

Теперь, когда вы установили готовый MCP-сервер, настало время сделать его по-настоящему вашим. Установка — это только первый шаг. Чтобы сервер работал стабильно, был готов к интеграции и легко переносился между окружениями, его нужно правильно настроить. Именно этим мы займёмся сейчас.

В этой теме вы научитесь управлять поведением сервера с помощью конфигурации, увидите, как читать логи и диагностировать проблемы. Эти навыки — основа надёжной и безопасной работы любого ИИ-агента.


Конфигурационный файл: центр управления сервером

Когда вы запускаете MCP-сервер, он должен знать: на каком порту слушать запросы, какие инструменты использовать, насколько подробно вести журнал. Вместо того чтобы прописывать это прямо в коде, мы используем конфигурационный файл — отдельный файл, в котором хранятся все настройки.

Такой подход называется config-as-code и является стандартом в современной разработке. Он позволяет:

  • Быстро менять настройки без изменения кода
  • Версионировать конфигурации в Git
  • Легко переносить сервер между локальной машиной и сервером

Часто конфигурационные файлы пишут в формате YAML или JSON. Мы будем использовать YAML — он более читаемый и удобен для редактирования.

Пример файла config.yaml:

server:
  host: "127.0.0.1"
  port: 8080
  log_level: "info"

tools:
  - name: "web_search"
    enabled: true
  - name: "file_reader"
    enabled: false

context:
  max_tokens: 4096
  history_limit: 10

Каждое поле здесь имеет значение:

  • port — номер порта, на котором сервер будет принимать запросы
  • log_level — уровень детализации логов (info, debug, error)
  • tools — список доступных инструментов и их статус

⚠️ Важно: синтаксис YAML чувствителен к отступам. Используйте пробелы, а не табуляцию. Один отступ — 2 пробела.


Запуск сервера с конфигурацией

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

python mcp_server.py --config config.yaml

Если всё в порядке, вы увидите сообщение в терминале:

INFO:     MCP Server started on http://127.0.0.1:8080
INFO:     Loaded 1 active tool(s)
INFO:     Log level: info

Если порт занят или в конфигурации ошибка — сервер не запустится. Но не волнуйтесь: мы научимся понимать, что пошло не так.


Логирование: ваше окно в работу сервера

Логирование — это процесс записи событий, происходящих в сервере. Логи помогают понять:

  • Запустился ли сервер
  • Какие запросы он получает
  • Где возникла ошибка

Уровни логов:

  • INFO — информационные сообщения (сервер запущен, инструмент загружен)
  • DEBUG — подробные данные для разработки
  • ERROR — критические сбои (например, не удалось подключиться к LLM)

При log_level: "info" вы не увидите отладочную информацию, но и не будете перегружены деталями. Это оптимальный выбор для обычной работы.

💡 Совет: при диагностике проблем временно установите log_level: "debug", чтобы увидеть больше деталей.


Тестирование сервера через HTTP-запросы

Теперь проверим, что сервер работает. Мы будем использовать curl — утилиту для отправки HTTP-запросов. Это простой и надёжный способ протестировать API.

Проверим доступность:

curl http://127.0.0.1:8080/capabilities

Ожидаемый ответ:

{
  "version": "1.0",
  "tools": [
    {
      "name": "web_search",
      "description": "Инструмент для поиска информации в интернете"
    }
  ]
}

Если вы получили такой JSON — сервер отвечает корректно.

Теперь проверим обработку промпта:

curl -X POST http://127.0.0.1:8080/prompt \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Привет! Расскажи, что ты умеешь."}'

Если сервер возвращает текст — значит, он готов к интеграции с LLM.


Диагностика ошибок: как находить и исправлять проблемы

Даже при правильной настройке могут возникать ошибки. Главное — не паниковать, а системно анализировать.

Пример 1: порт уже занят

Попробуем запустить сервер на порту 8080, если он уже занят:

ERROR:    Error starting server: [Errno 98] Address already in use

Что делать:

  1. Проверить, какой процесс использует порт:
    lsof -i :8080
    
  2. Завершить процесс или изменить порт в config.yaml

Пример 2: ошибка в синтаксисе YAML

Если в конфиге лишняя табуляция:

ERROR:    Failed to load config: while scanning a simple key

Что делать:

  1. Открыть config.yaml
  2. Проверить отступы — везде должны быть пробелы
  3. Использовать редактор с подсветкой YAML

Пример 3: 404 при запросе к /prompt

Если сервер запущен, но /prompt не отвечает:

  • Убедитесь, что сервер запущен с правильным конфигом
  • Проверьте логи: возможно, модуль обработки промптов не загрузился

🔍 Золотое правило диагностики: всегда смотрите логи первыми. Там почти всегда есть подсказка.


Практическое задание

  1. Создайте файл config.yaml с портом 8081 и уровнем логирования debug
  2. Запустите сервер с этим конфигом
  3. Отправьте запрос к /capabilities через curl
  4. Намеренно добавьте ошибку в YAML (например, табуляцию) и попробуйте запустить
  5. Найдите ошибку в логах и исправьте

Теперь вы умеете настраивать сервер, управлять его поведением и находить причины сбоев. Это важный шаг к созданию стабильных ИИ-агентов.

В следующей теме вы узнаете, как упаковать ваш настроенный сервер в Docker-контейнер. Это позволит запускать его на любом компьютере с одинаковым результатом — даже без установки Python или зависимостей. Готовы сделать вашего агента по-настоящему переносимым?