qvib.pro
EN

~3 мин чтения · всем

MCP: как агент безопасно подключается к инструментам и данным

Что это

MCP (Model Context Protocol) — это стандартный «разъём», через который агент дотягивается до реальных инструментов и данных: репозиторий на GitHub, файлы проекта, браузер (Playwright), документация (Context7). Без MCP модель — собеседник в вакууме; с MCP она может открыть ваш репозиторий, прогнать e2e-тест в браузере, свериться со свежей докой библиотеки. MCP-сервер — программа-посредник, которая предоставляет агенту набор инструментов; агент вызывает их, не зная деталей реализации.

ИИ-агентClaude Code / Cursorfilesystemgithubplaywrightcontext7проводкасекреты = ${ENV}, не в файлахВаши данные и сервисы
MCP-проводка: агент говорит с инструментами, секреты остаются в окружении

Ростер Quest: ровно 6 серверов

Базовый Quest подключает ровно 6 MCP-серверов — выверенный минимум, который питает движок, без «зоопарка»:

  1. filesystem — доступ к файлам проекта.
  2. memory — рабочая память между шагами.
  3. context7 — свежая документация библиотек (reuse-first: не выдумывать API, а свериться с докой). Секрет опционален.
  4. sequential-thinking — структурированное пошаговое рассуждение.
  5. playwright — браузер для обязательного verify.
  6. github — доступ к репозиторию (секрет — PAT).

Никаких postgres-ro, sentry, snyk, supabase, stripe, grafana, datadog в базовом Quest нет. Если такой сервер вам нужен — это уже слой конструктора поверх ядра, а не то, что приезжает в купленном Quest.

Зачем именно так

Самому прописать .mcp.json — значит знать точный endpoint, транспорт (stdio/http), формат заголовков и ни разу не влепить секрет прямо в файл. Готовая раскладка снимает эту возню и вшивает безопасные умолчания. Плюс каждый сервер питает нужные части движка: Playwright — обязательный браузер-verify и призмы perf/regression; Context7 — reuse-first-сверку с докой перед тем, как тянуть новую зависимость; github — работу с репозиторием; filesystem/memory/sequential-thinking — базовую механику агента.

Главный принцип безопасности: секрет — никогда значением

Жёсткое правило компилятора: в файлы попадают только имена/плейсхолдеры ${NAME}, никогда реальные значения. Значение секрета живёт в вашем окружении и подставляется на вашей машине при запуске. Имена заголовков подобраны так, чтобы не совпасть с фильтром секретов (Authorization, X-*-Key, а не «api key»/«token»), иначе плейсхолдер вырезался бы при материализации. Это проверяется тестом: «секрет НЕ попадает значением в .mcp.json».

Пример: github с секретом-плейсхолдером

Серверу github нужен доступ к репозиторию — это единственный секрет-значение среди шести. В .mcp.json он рендерится с плейсхолдером, а не строкой:

{
  "mcpServers": {
    "github": {
      "command": "...",
      "env": { "GITHUB_MCP_PAT": "${GITHUB_MCP_PAT}" }
    }
  }
}

Значение вы кладёте в окружение; в артефакт, который потом закоммитите или отправите, оно не попадает. В README/INSTALL движок выводит только имя нужного секрета и ссылку на доку, где взять значение. Секрет для github опционален в том смысле, что движок работает и без него — просто без доступа к репозиторию через MCP.

Пример: браузерные тесты без ключей

Сервер playwright рендерится как npx -y @playwright/mcp@latest — stdio-транспорт, никаких ключей. Это «браузерный костяк» обязательного verify: движок открывает ваше приложение, кликает по флоу (happy / error / empty), читает DOM и консоль — то, что house-rule требует делать «не на веру, а реально в браузере» перед закрытием задачи.

Память движка — локально, без облака

Никакого «облачного» MCP-сервера движку не нужно: задачи, решения (.engine/decisions.md), уроки (.engine/LESSONS.md) и бэклог (.engine/backlog.md) ведутся локально в .engine/ вашего проекта. Пакет автономен — работает оффлайн и не зависит от наших серверов.

MCP-подключение делает агента мощнее, но не отменяет границ: движок отдельным слоем permissions требует подтверждения на необратимое (миграции / деплой / удаление) и держит денилист опасных команд. Жёсткая блокировка этого денилиста «в моменте» enforced в Claude Code через hook; на остальных целях это строгая инструкция (ADVISORY), а ENFORCED-границу на любой цели даёт переносимый safety floor (.engine/hooks/pre-commit + CI engine-guard.yml), который входит в пакет уже сейчас.

Sources: