MCP — внешний интерфейс инструмента, а не секретный конфиг
Расширенный разбор MCP: сервер, клиентская настройка, транспорт, permissions и проверка границ.
- component
- mcp

`mcp`

mcp — способ, которым агент получает структурированную tool surface: сервер, говорящий на Model Context Protocol, или клиентская конфигурация, которая указывает харнессу на такой сервер.
MCP-компонент отвечает на вопрос: какой внешний tool-интерфейс подключён?
Он не отвечает «как агент должен пользоваться этим tool?» ( или ), «какой пакет расширяет харнесс?» () и «какой именованный shortcut набрать?» ().
!!! warning "Два разных MCP-объекта"
Эта страница покрывает обе нативные роли, которые может сообщить discovery. Они разделяют вид mcp и это не один объект.
| Объект | native_role | Что делает discovery |
|---|---|---|
| Пакет MCP-сервера | mcp_server | harness_id=null; доказывает цепочку пакета; сервер никогда не запускает |
.mcp.json plugin | mcp_client_config | доказывает себя именем; discovery не открывает файл |
| Серверы внутри файла настроек | mcp_client_config | файл также является setting; читаются только имена серверов |
.mcp.json plugin — клиентский конфиг, не сервер. Токены, URL с доступом, command, args, headers и env никогда не попадают в вывод discovery, паспорта, логи или фикстуры.
Файлы с именем mcp.json под Pi — расширения пользователя, не layout харнесса. Машинная таблица сообщает no_documented_mcp_client_config.
Соседи
| Вид | Главное отличие |
|---|---|
plugin | plugin может нести клиентский конфиг .mcp.json; пакет сервера всё равно mcp |
setting | Codex, OpenCode и Grok Build держат клиентские серверы в файле, который также объявлен как setting |
skill | skill объясняет, когда и как пользоваться tool; MCP — сам интерфейс tool |
instruction | постоянные правила про tools остаются текстом; они не запускают сервер |
hook | hook срабатывает на событии; MCP ждёт вызова как tool |
command | command — именованный shortcut; MCP — поверхность протокола |
agent | роли могут разрешить вызывать MCP-tools; сервер — не роль |
Выбирайте mcp, когда агент должен вызывать внешний tool через MCP. Выбирайте plugin, когда вы поставляете пакет харнесса, который может включать клиентский конфиг. Выбирайте setting, когда закрепляете параметры, которые не являются записями серверов.
Рекомендуемая структура пакета
--language для MCP-сервера — одно из python, typescript, javascript, rust, go или dart-flutter. Вид исполняемый.
Пакет MCP-сервера не принадлежит ни одному харнессу (harness_id=null). Discovery не угадывает по подстроке mcp. Он требует согласованную цепочку:
- Python:
pyproject.toml→ зависимость MCP SDK →project.scripts→ точный import модуля SDK. - TypeScript:
package.json→ зависимость SDK →bin/ script source → точный import SDK.
github-issues/ # опубликованный пакет сервера
├── pyproject.toml # dependencies включают mcp или fastmcp
└── src/
└── github_issues/
└── server.py # цель project.scripts; импортирует SDKgithub-issues/ # пакет сервера TypeScript
├── package.json # @modelcontextprotocol/sdk или fastmcp
└── src/
└── index.ts # вход bin/script; импортирует SDKКогда вы начинаете из ai_stp, сначала сделайте scaffold. Авторский каталог шире опубликованного пакета: discover / adopt переносят source/ для portable и projections/<harness>/ для конкретного харнесса, а не всё дерево. Scaffold кладёт source/mcp.json и языковой entry; обнаруживаемому серверу всё равно нужна цепочка манифеста выше. Claude Code mcp отклоняется: у provider нет собственной MCP-поверхности.
github-issues/ # component-scaffold/3
├── .ai-stp-template.json
├── .gitignore
├── README.md
├── component-passport.json
├── eval-profile.json
└── source/
├── mcp.json
└── src/main.py # python handler; добавьте манифест пакетаai-stp component scaffold plan \
--type mcp \
--language python \
--harness portable \
--name github-issues \
--output ./github-issues \
--json
ai-stp component scaffold apply \
--type mcp \
--language python \
--harness portable \
--name github-issues \
--output ./github-issues \
--expected-plan-digest <digest> \
--jsonДля required_env в паспорт записывайте имена и назначение, никогда значения. Секреты, токены и пароли в паспорт не попадают.
Команды ai-stp component mcp validate нет. Структурная готовность — component passport validate. Kind-specific проверка по спецификации есть только у .
Стандарты и фреймворки
- Model Context Protocol — независимый стандарт.
- Руководство по сборке сервера, которое discovery использует как
layout_sourceпакетов сервера: Build an MCP server. - Имена SDK, которые discovery примет в цепочке зависимостей: Python
mcpилиfastmcp; TypeScript@modelcontextprotocol/sdkилиfastmcp. - NVIDIA SkillSpector и Cisco Skill Scanner — сканеры skill. Они не проверяют MCP.
Клиентские layout объявлены по харнессам. Ссылайтесь на layout_source находки, а не угадывайте путь вендора.
Нативные layout по харнессам
Discovery сообщает только объявленные layout. Точные пути на машине даёт ai-stp component discover --json. У каждой находки есть layout_source. Если классификация неясна, покажите это поле; не угадывайте путь соседа.
Из матрицы discovery:
| Харнесс | Global | Project | Что есть в контракте discovery |
|---|---|---|---|
| Claude Code | да | да | внутренний .mcp.json plugin — mcp_client_config; discovery его не открывает |
| Codex | имена в config.toml | имена в config.toml | файл также является setting; ключ mcp_servers; существования недостаточно |
| Pi | нет | нет | пробел no_documented_mcp_client_config; файлы mcp.json — расширения пользователя |
| OpenCode | имена в opencode.json / opencode.jsonc | те же файлы | файл также является setting; ключ mcp; существования недостаточно |
| Grok Build | имена в config.toml | имена в config.toml | файл также является setting; ключ mcp_servers; существования недостаточно |
| Cursor | не выдумывается из соседнего каталога | не выдумывается из соседнего каталога | официальная схема plugin называет mcpServers; walker файл не изобретает |
| Antigravity | да | да | |
undefined | переносимые соглашения | переносимые соглашения | это не харнесс; автоматическая установка не считается безопасной |
| (пакет сервера) | n/a | n/a | harness_id=null; цепочка Python или TypeScript как выше |
Codex, OpenCode и Grok Build держат клиентские серверы в файле, который также объявлен как setting. Существования файла недостаточно: под ключом должен быть объявлен хотя бы один сервер. Один файл может дать две находки (setting + mcp). В evidence_refs попадают только имена серверов (например mcp_servers.github). Значения рядом с именем — command, аргументы, URL, headers, environment — не читаются и не возвращаются.
.mcp.json plugin доказывает себя именем, поэтому discovery его не открывает. Рабочие серверы Claude Code pack живут там; угадывать другой home-файл — не layout.
ai-stp component discover --root . --json
ai-stp toolchain harness-capabilities --jsonЕсли один путь одновременно setting и mcp, назовите --kind при adopt. Не adopt'ьте файл дважды под угаданными видами.
Версии — `X.Y`, не SemVer
Опубликованная версия MCP неизменяема и имеет вид X.Y. Патч-номера нет. Изменение сервера, точки входа или клиентского объявления — новая версия. Обновление MCP внутри сетапа — новая версия сетапа.
ai-stp component version list --id <stable_id> --json
ai-stp component version release --id <stable_id> --json--major открывает следующую мажорную линию. Мажорная линия — отдельная граница доступа.
Что проверяет `ai_stp`
Процент карточки каталога и разделение обязательных и необязательных проверок объяснены на странице Проверки безопасности. Для MCP ожидайте как минимум:
- структуру, digest, лицензию, tags, исходный репозиторий;
- ограниченную распаковку и path denylist;
- сканирование секретов (
secrets_heuristicи Gitleaks, если включён); - правила prompt-injection и скрытого содержимого;
mcp_config_static(схема, политика транспорта, capability);- языковой SAST и SCA, когда есть scripts и lockfiles.
Пройденное сканирование снижает известный риск. Это не гарантия, что сервер безвреден. Обязательные проверки, которые провалились или не смогли запуститься, блокируют публикацию.
Перед установкой также смотрите:
| Проверка | Почему важно |
|---|---|
native_role | клиентский конфиг — не сервер; сервер — не plugin |
| Требуемые permissions | MCP расширяет то, до чего агент может дотянуться |
| Как передаются секреты | имена в паспорте, значения в окружении или системном хранилище |
| Кто автор | verified-автор не делает сервер автоматически безопасным |
Какой X.Y закреплён | обновление MCP создаёт новую версию сетапа |
| Линия доверия | experimental требует явного согласия |
author_verified и component_verified независимы. Ни одно не является гарантией безопасности.
Связанные команды CLI
Только команды, которые существуют. Флаги всегда со страниц CLI и всегда --json. Исполняемый файл — ai-stp (пакет ai-stp-cli). Команд component inspect и setup show нет. Единственный kind-specific validate — ai-stp component skill validate.
Именно этот вид: команды component mcp validate нет. Используйте проверку паспорта.
ai-stp component passport validate --id <stable_id> --jsonАвтор, adopt, публикация:
ai-stp component discover --root . --json
ai-stp component adopt --path <source_path> --json
ai-stp component passport validate --id <stable_id> --json
ai-stp component version release --id <stable_id> --json
ai-stp publication plan --id <stable_id> --version 1.0 --json
ai-stp publication confirm --plan-id <id> --plan-hash <hash> --confirm --jsonКогда находка также является файлом setting:
ai-stp component adopt --path <source_path> --kind mcp --jsonНайти, выбрать, установить:
ai-stp registry search --kind component --query <name> --json
ai-stp select eligibility --harness <id> --json
ai-stp install plan --jsonMCP-компонент может быть embedded-членом compose-манифеста. См. Сетапы.
Как MCP-компонент проходит через `ai_stp`
=== "Автор" Автор публикует сервер или клиентский конфиг из публичного GitHub-источника или импортирует его локально. Версия закрепляет точный commit и подпуть. Секретные значения в дерево не входят.
=== "Каталог" Каталог показывает назначение, поддерживаемые харнессы, требуемые permissions, trusted status автора и независимый status самого компонента.
=== "Сборщик" Сборщик проверяет, что MCP-объект можно встроить в выбранный сетап и что его файловая структура подходит проекции provider.
=== "Provider" Provider регистрирует нативную клиентскую запись или поставляет пакет сервера только после плана, digest и подтверждения. Он не копирует токены из паспорта — их там нет.
Красные флаги
- Обращение с
.mcp.jsonplugin так, будто это пакет сервера. - Открытие
.mcp.jsonили MCP-блока настроек, чтобы «проверить» токены — discovery уже отказывается читать эти значения. - Файлы
mcp.jsonу Pi, выданные за layout харнесса (no_documented_mcp_client_config). config.toml/opencode.jsonбез серверов под ключом, помеченные как MCP потому что файл существует.- Незакреплённые запускатели
npx/uvxили command/args/URL/headers/env, сохранённые в паспорте. - Живые токены, закрытые ключи или тела
.envв пакете. - Линия доверия
experimentalбезconsent allow. - Харнесс не в списке совместимости компонента.
- «Latest» или имя ветки вместо точных
X.Yи commit. - Обращение с
author_verifiedкак сcomponent_verified. - Сканеры skill, процитированные так, будто они проверили этот вид.
??? question "Можно ли MCP-компонент использовать без публикации" Да. Собственный, импортированный или точно закреплённый MCP-объект можно использовать после локальных проверок. Он от этого не становится platform-verified и должен быть показан именно как локальный или закреплённый объект (local_owner_or_pinned).
Чеклист автора
- Сделайте scaffold с
--type mcpи настоящим--language(неnone). - Для сервера соберите цепочку Python или TypeScript: манифест, зависимость SDK, объявленный вход, точный import SDK. Не запускайте сервер, чтобы его «доказать».
- Для клиентского конфига держите значения с доступом вне артефакта. Записывайте только имена env.
- Объявите в паспорте потребности в файловой системе, сети и учётных данных.
- Запустите
ai-stp component discover --root . --jsonи прочитайтеnative_role,harness_idиlayout_source. component adopt --path <точный source_path>— добавьте--kind mcp, когда файл также является setting.- Закрепите точный публичный GitHub commit и подпуть. Секретов в дереве нет.
component passport validate→component version release, чтобы выпустить неизменяемыйX.Y.- Публикуйте через путь публикации. В сетапе закрепите этот
X.Y.
Связанное: Авторство, Компоненты, , .