← Claude Code: Agentic Development in the Terminal
06 / 08 · 45 min

MCP Servers in Claude Code

Model Context Protocol in practice: connecting servers via claude mcp add, scopes, .mcp.json, and the security of external tools.

Lesson content is currently available in Russian.

What you will learn

  • →Подключать MCP-серверы с правильной областью видимости: local, project, user.
  • →Различать транспорты stdio и HTTP и отлаживать неподнявшийся сервер.
  • →Управлять безопасностью: секреты через окружение, минимальные права, цена контекста.

Зачем агенту протокол

Model Context Protocol — открытый стандарт подключения внешних систем к LLM-приложениям. Без него каждая интеграция — самописный мост; с ним любой сервер, говорящий по MCP, работает в любом совместимом клиенте: Claude Code, IDE-плагинах, других агентах. Сервер объявляет три вида возможностей: tools — действия, которые агент может вызвать (создать issue, выполнить SQL-запрос), resources — данные для чтения (файлы, записи, схемы), prompts — готовые шаблоны запросов.

Для Claude Code это выход за пределы файловой системы и терминала. Типовые серверы: GitHub — issues и pull requests как инструменты агента; Sentry — стектрейсы продакшена прямо в контекст; Postgres — схема и запросы к базе; Playwright — живой браузер для end-to-end проверок. Инструменты сервера появляются в сессии с именами вида mcp__github__create_issue — по префиксу всегда видно, какой сервер выполняет действие, и на эти имена работают обычные правила permissions.

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

Подключение и области видимости

Сервер подключается одной командой:

# локальный stdio-сервер
claude mcp add github -- npx -y @modelcontextprotocol/server-github

# удалённый HTTP-сервер
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

# управление
claude mcp list
claude mcp get github
claude mcp remove github

Область видимости решает, кто увидит сервер. local (по умолчанию) — только вы и только в этом проекте. user (--scope user) — вы во всех проектах на машине. project (--scope project) — сервер записывается в файл .mcp.json в корне репозитория, коммитится и автоматически доступен всей команде:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
    }
  }
}

Обратите внимание на ${GITHUB_TOKEN}: .mcp.json поддерживает подстановку переменных окружения, поэтому сам токен в репозиторий не попадает — каждый член команды держит его в своём окружении. Файл с сырым секретом в git — типовая утечка; подстановка закрывает её по построению. Правило выбора scope: инфраструктура проекта — project, личные интеграции — user, эксперименты — local.

Транспорты, статус и отладка

Два основных транспорта. stdio — Claude Code сам запускает процесс сервера и общается с ним через стандартные потоки; так работают локальные серверы: файловые, базы данных, обёртки над CLI. HTTP — сервер работает удалённо, клиент ходит к нему по URL; так подключаются облачные сервисы: Sentry, GitHub, корпоративные шлюзы. Для удалённых серверов с OAuth авторизация проходит через команду /mcp: она показывает статус каждого сервера и проводит вход через браузер.

Отладка по слоям. Первый слой — /mcp в сессии: поднялся ли сервер, какие инструменты экспортирует. Второй — claude mcp get имя: какая конфигурация реально применяется, тот ли scope. Третий — для stdio-серверов: запустите команду сервера руками в терминале и читайте stderr; в девяти случаях из десяти причина — отсутствующая переменная окружения или неустановленный пакет.

Разрешения на MCP-инструменты управляются теми же правилами permissions, что и встроенные. Правило mcp__github в allow снимет подтверждения со всех инструментов сервера, mcp__github__create_issue — только с одного. Практичный дефолт: читающие инструменты — в allow сразу, пишущие — под подтверждением хотя бы первую неделю. Созданный в чужом репозитории issue отзывается труднее, чем локальный дифф, — цена ошибки у внешних действий выше.

Безопасность и цена контекста

MCP расширяет и возможности, и поверхность атаки. Три правила, которые стоит принять до первого продакшен-инцидента, а не после.

Первое: считайте контекст. Описания всех инструментов каждого подключённого сервера загружаются в окно сессии — десяток серверов съест заметную долю контекста ещё до первого сообщения. Подключайте то, что нужно текущему проекту, а не всё интересное; /context покажет, во что обходится каждый сервер.

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

Третье: помните о prompt injection. Данные, которые сервер приносит извне — тексты issues, веб-страницы, письма, — попадают в контекст и могут содержать инструкции, адресованные агенту. Архитектурная защита — минимальные права: агент, у которого нет инструмента удаления, не удалит ничего, что бы ни написали в тексте issue. Комбинация «внешние данные + широкие права + автоподтверждение» — худшая из возможных; разрывайте её хотя бы в одном звене.

Practice

Внешний инструмент в деле

Подключите реальный MCP-сервер (GitHub, Sentry или Postgres) в project-scope через .mcp.json с подстановкой токена из окружения. Выполните задачу, требующую его инструментов: например, найдите три давних issue и предложите план их закрытия.

Deliverable

.mcp.json без сырых секретов, вывод /mcp со статусом сервера и транскрипт с вызовом mcp__-инструмента.

Checkpoint

Объясните выбор scope и транспорта для вашего сервера и покажите, как защищён токен.

  • ✓ Scope выбран осознанно: project для команды, local или user для личного.
  • ✓ Секрет передан через переменную окружения, а не сырым значением в файле в git.
  • ✓ Названы права токена и объяснено, почему их достаточно для задачи.

Check yourself

Какой scope делает MCP-сервер доступным всей команде через git?

01Какой scope делает MCP-сервер доступным всей команде через git?

Как называются инструменты MCP-сервера внутри сессии?

02Как называются инструменты MCP-сервера внутри сессии?

В чём разница между транспортами stdio и HTTP?

03В чём разница между транспортами stdio и HTTP?

Почему не стоит подключать десять MCP-серверов «на всякий случай»?

04Почему не стоит подключать десять MCP-серверов «на всякий случай»?

Лучшая архитектурная защита от prompt injection во внешних данных?

05Лучшая архитектурная защита от prompt injection во внешних данных?

Sources

MCP Servers in Claude Code · Claude Code: Agentic Development in the Terminal · VORCL