Этот документ нужен для запуска и диагностики MCP-сервера. Полный каталог инструментов здесь не дублируется: доступный набор зависит от активного профиля и меняется вместе с сервером. После смены профиля или перезапуска проверяйте каталог, который видит подключённый клиент.
Выполняйте команды из одобренной локальной копии исходников CodeGraph с его Python-окружением и настроенными серверными зависимостями. Не запускайте второй процесс на занятом порту. Для управляемого развёртывания используйте MCP-подключение администратора вместо локального сервера из исходников. Команды запуска ниже предназначены для Bash, диагностика профиля — для PowerShell.
Канонические stdio и /mcp используют MCP 2026-07-28 без сессии протокола: каждый запрос
содержит версию протокола и метаданные клиента. Запрос server/discover возвращает возможности
сервера, а tools/list — каталог инструментов активного профиля.
Для стандартного MCP-клиента HTTP-адаптер /agent-plugin/mcp согласует версию 2025-11-25
или 2026-07-28 и преобразует запросы для основного MCP-сервера. Вход и настройка клиента
для управляемого сервиса описаны в OAuth и MCP.
Выбор транспорта
Если локальный клиент запускает CodeGraph как дочерний процесс, используйте stdio:
python -m src.mcp --transport stdio
Для Streamable HTTP задайте адрес явно и подключайте клиент к
http://127.0.0.1:27495/mcp:
python -m src.mcp --transport http --host 127.0.0.1 --port 27495
Если порт 27495 занят, выберите свободный локальный порт. Замените значение --port
и порт в URL клиента одним и тем же значением.
Поддерживаются только stdio и http. SSE и прежние совместимые SSE-маршруты удалены.
Проверка каталога через stdio
Отправьте запущенному stdio-процессу это JSON-RPC-сообщение через stdin одной строкой. Ниже поля показаны с отступами; при отправке клиент сериализует сообщение в одну строку.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "docs-check",
"version": "1"
},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
Ответ содержит тот же id и массив result.tools. Перед вызовом инструмента посмотрите
его name и inputSchema. Состав каталога определяется активным профилем.
Отправка канонического HTTP-запроса
Отправьте то же JSON-RPC-сообщение методом POST на /mcp. Вместе с данными авторизации,
описанными ниже, передайте заголовки для примера tools/list:
| Заголовок | Значение |
|---|---|
Content-Type |
application/json |
Accept |
application/json, text/event-stream |
MCP-Protocol-Version |
2026-07-28 |
MCP-Method |
tools/list |
Значение MCP-Method должно совпадать с method в JSON-RPC-сообщении. При несовпадении
сервер возвращает mcp-method header does not match the request body's method.
Для вызова инструмента задайте MCP-Method: tools/call и заголовок MCP-Name,
равный params.name в теле запроса. Например, для codegraph_project_context_status
передайте MCP-Name: codegraph_project_context_status. После ответа проверьте результат
инструмента: состояние denied с причиной mcp_authentication_required требует
авторизации, даже если HTTP-запрос завершился кодом 200.
Аутентификация и область проекта
Stdio считается доверенным локальным транспортом. HTTP по умолчанию требует
аутентификацию через Authorization: Bearer <jwt> или X-API-Key: <api-key>. Для сетевых
вызовов с областью проекта передавайте X-Project-ID: сервер сопоставляет его с
аутентифицированной учётной записью и отклоняет несовпадающие project_key и namespace.
Флаг --no-auth предназначен только для локальной разработки. Команда завершится ошибкой,
если не включён параметр security.mcp_allow_no_auth_network_transports; сервер без
аутентификации разрешено привязать только к loopback-адресу:
python -m src.mcp --transport http --host 127.0.0.1 --port 27495 --no-auth
Управляемое изменение разрешается после проверки роли, точной области задачи и сохранённого одобрения внутри обработчика. Полный и ролевой профили задают доступный каталог инструментов.
Выбор и проверка профиля
Без переменной CODEGRAPH_MCP_TOOL_PROFILE команда запускает профиль codex. Для
инструментов конкретной роли используйте её профиль подключения. Актуальный каталог
инструментов определяйте по выбранному профилю.
Задайте профиль в окружении процесса, который запускает сервер. Например,
следующие команды явно выбирают codex. Для ролевого подключения замените codex
именем профиля из настроек этого подключения.
CODEGRAPH_MCP_TOOL_PROFILE=codex python -m src.mcp --transport stdio
В PowerShell задайте переменную перед запуском:
$env:CODEGRAPH_MCP_TOOL_PROFILE = 'codex'
python -m src.mcp --transport stdio
При запуске из IDE укажите эту переменную в настройках окружения MCP-подключения.
Переподключите клиент и выполните tools/list: ответ покажет выбранный каталог.
В локальной копии исходников вычисляйте текущий размер профиля, а не переносите число в документацию:
python -c "from src.mcp.surface_catalog import profile_family_tool_names; print(len(profile_family_tool_names('full')))"
profile_family_tool_names подходит для локальной диагностики исходников. Фактическим
подтверждением остаётся каталог, который возвращает запущенный MCP-сервер.
Канонический wire-контракт
- Совместимый вход для структурированных полей — нативные массивы и объекты. Удалённые алиасы
*_jsonи контейнеры в виде JSON-строк отклоняются сервером. - Передавайте
story_idстрокой и используйте компактные канонические идентификаторы, напримерhandoff_v1. - Не передавайте
db_pathили другой путь к хранилищу в инструменты, вызываемые агентом. Сервер определяет хранилище из аутентифицированного контекста проекта. - Для выполнения задач PRD передавайте утверждения трассируемости и результаты выполнения тестов как типизированные массивы. Приёмку подтверждают требования, результаты тестов и решения ответственных ролей; код завершения команды, путь и историческая метка статуса дают операционный контекст.
- Не составляйте вручную пакеты одобрения, финансовых данных и подтверждения полномочий. Используйте только значения, выпущенные или сохранённые авторитетным серверным процессом.
Поддерживаемые представления PRD-статуса
codegraph_digital_employee_prd_delivery_status принимает только следующие значения view:
| Представление | Назначение |
|---|---|
full |
Полный статус. |
only_blockers |
Компактная проекция блокеров. |
only_pending |
Компактная проекция ожидающих передач задачи. |
closure_summary |
Блокеры, ожидающие передачи задачи и сводные данные по ролям. |
latest_chain |
Эффективные элементы текущей цепочки передач задачи. |
projection_gaps |
Пробелы в отображении пользовательских историй и блокеры. |
Любое другое значение возвращает unsupported_status_view; алиасов summary и compact нет.
Диагностика неуспешного вызова
- Выполните
python -m src.mcp --helpи проверьте транспорт и параметры привязки. - После перезапуска сервера переподключите клиент и обновите каталог инструментов, чтобы получить текущую регистрацию сервера.
- Проверьте активный профиль и требуемый ролевой профиль в тексте ошибки.
- Для HTTP сначала проверьте аутентификацию и
X-Project-ID, а затем меняйте аргументы. - Удалённые алиасы, замена массива строкой или числа контейнером и самостоятельно составленные подтверждения полномочий нарушают формат запроса. Исправьте аргументы по схеме инструмента.
Источники истины
src/mcp/__main__.py— транспорты CLI, привязка, аутентификация и выбор профиля.src/mcp/surface_catalog.py— семейства профилей, ролевые проекции и удалённые инструменты.src/mcp/auth.py— HTTP-аутентификация и каноническая привязка области проекта.src/digital_employees/planning/delivery/prd_delivery_actions_projection_parts/compact_handoffs.py— точный набор представлений PRD-статуса.