Перейти к содержимому
PD
MCP-серверы

Настройка MCP-сервера: конфиги, переменные, отладка

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

Все статьи гида MCP-серверы · 11

Большая часть проблем с MCP - это не протокол, а конфигурация. Разберём её устройство и порядок отладки.

Структура конфига

Конфигурация - это описание серверов: имя, способ запуска и окружение. Минимально нужны две вещи.

Имя сервера. Произвольное, но оно попадает в имена инструментов, которые видит агент. Короткое и осмысленное лучше длинного: два сервера с похожими именами - готовая путаница при выборе инструмента.

Способ запуска. Для локального сервера - команда и её аргументы. Для удалённого - адрес. Здесь же указывается окружение процесса.

Уровней обычно два: пользовательский, действующий во всех проектах, и проектный, лежащий в репозитории. Про выбор между ними - в статье про подключение.

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

Переменные окружения и секреты

Правило одно: токены живут в окружении, конфиг на них ссылается.

Почему это важнее, чем кажется:

  • Проектный конфиг лежит в репозитории. Токен в нём уедет всем, кто клонирует проект.
  • Удалить файл потом недостаточно: токен останется в истории git. Его придётся отзывать.
  • Один и тот же конфиг у разных разработчиков должен работать с разными доступами.

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

Ещё одна частая ловушка: пустая переменная неотличима от отсутствующей. Сервер стартует, не может авторизоваться и отдаёт пустой список инструментов. Со стороны это выглядит как «подключился, но не работает».

Логи

Три места, где искать.

Лог клиента. Видно, запустился ли процесс и с какой ошибкой он завершился. Первое место при проблеме «сервера нет в списке».

Вывод сервера в stderr. Стандартный вывод занят протоколом, поэтому всё диагностическое идёт в stderr. Если вы пишете свой сервер, любой print в stdout ломает обмен - это самая частая ошибка новичков.

Файловый лог сервера. Самый полезный вариант для своего сервера: видно, какой инструмент вызвали, с какими аргументами и что вернулось. Без этого разбор «агент сделал не то» невозможен.

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

Типовые ошибки

СимптомПричина
Сервера нет в спискеНе перезапустили клиента, или сломан JSON
Сервер помечен упавшимКоманда не найдена; нужен полный путь
Сервер живой, инструментов нетПровал авторизации: проверьте переменные
Инструменты есть, агент их не берётРасплывчатые описания
Работает у вас, не работает у коллегиКонфиг пользовательский, а не проектный
Всё работает, но медленноСервер ходит во внешнюю систему на каждый вызов
Агент выбирает не тот инструментДва сервера с похожими именами инструментов

Отдельно про последнее: конфликт имён решается отключением лишнего сервера, а не уточнением промпта. Если два сервера дают похожие инструменты, агент будет ошибаться независимо от формулировок.

Порядок отладки

  1. Запустите команду сервера руками в терминале.
  2. Проверьте синтаксис конфига.
  3. Перезапустите клиента.
  4. Посмотрите статус сервера в списке.
  5. Спросите у агента список инструментов.
  6. Сделайте один безопасный вызов.

Каждый шаг отсекает свой класс причин, и вместе они закрывают почти всё. Подробности по локальному запуску - в статье про локальный сервер. Общая картина - гид по MCP.

Вопросы и ответы

Где хранить токены для MCP-серверов?

В переменных окружения, а конфиг должен на них ссылаться. Токен в проектном конфиге попадёт в репозиторий и уедет всем, кто клонирует проект. Если это уже произошло, файл удалить недостаточно: токен нужно отозвать, потому что он остался в истории git.

Почему конфиг не применяется?

Три причины по частоте: клиента не перезапустили, в JSON синтаксическая ошибка и файл читается молча без применения, или правка внесена не в тот уровень - в пользовательский вместо проектного либо наоборот.

Где смотреть логи MCP-сервера?

У клиента есть свой лог, где видно, поднялся ли процесс и с какой ошибкой он упал. Сам сервер должен писать в stderr или в файл: stdout занят протоколом, и вывод туда ломает обмен. Если сервер свой, файловый лог стоит завести с самого начала.

Ещё по теме