Перейти к содержимому

Модуль V — MCP, навыки и управление возможностями

Модуль V — это оверлей управления возможностями: он управляет инструментами и возможностями ваших агентов — какой MCP-сервер предоставляет какой инструмент, каковы его транспорт, область и конфигурация, какой инициатор (origin) подключено к какой возможности, история её версий и базовое состояние её соединения. Он находится в слое управления (Management layer) и не имеет поверхности актуации: он каталогизирует, управляет и аудирует, но никогда не запускает инструмент и не изменяет работающий MCP-рантайм.

Модуль — это оверлей, построенный поверх пассивного обнаружения модуля I и интроспекции коннекторов. Он не реализует заново MCP-клиент и намеренно не материализует заново базовые сущности, которыми инвентаризация уже владеет (записи MCP-сервера, навыка, инструмента и ресурса). Вместо этого он читает эти базовые сущности и хранит только свои собственные оверлеи, ключуемые по уже маскированным естественным ссылкам коннекторов и разрешаемые в базовые сущности при чтении — дисциплина единственного писателя, которая удерживает его от гонки с материализатором инвентаризации.

Это отличается от модуля III. Модуль V отвечает на вопрос «к какой возможности подключён агент»; модуль III отвечает на вопрос «какой ресурс прочитал или записал инициатор». Это отдельные представления, и продукт никогда их не смешивает.

Модуль V владеет четырьмя оверлейными сущностями (каждая с префиксом capabilities.):

СущностьЧто она содержит
mcp_configУправляемая конфигурация MCP-сервера — транспорт, область, ссылка на конечную точку и ссылки на секреты. Нет столбца, который мог бы содержать пригодные к использованию учётные данные.
config_revisionСнимок только-для-добавления (append-only) на каждую версию конфигурации — неизменяемая история версий, переживающая удаление конфигурации.
wiringГраф подключений возможностей: ребро инициатор → возможность, хранимое по естественной ссылке, никогда по id базовой сущности.
healthПоследний наблюдённый сигнал соединения возможности (connected / degraded / down / unknown) — базовый сигнал, а не SLA.

Два свойства контракта не подлежат обсуждению. Аннотации инструментов MCP недоверенные: readOnlyHint/destructiveHint инструмента — это заявленная подсказка от сервера, которую, как говорит спецификация MCP, клиенты должны рассматривать как недоверенную — каждая проекция инструмента несёт явный флаг недоверенности, никогда не значок безопасности. Никаких значений секретов в протоколе передачи: конфигурация ссылается на секреты по имени, виду и замаскированной подсказке; бэкенд отклоняет встроенные учётные данные в конечной точке или спецификации, а не хранит их. Минимум данных — это свойство протокола, а не запоздалая мысль.

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

Модуль V питается шиной событий, а не собственным опросом. Он реагирует на два канала:

  • edge.observed — рантаймовое использование возможности становится рёбрами wiring. Поле Source различает наблюдённые сигналы (otel) и заявленные (mcp_annotation), а более новый питатель обнаружения конфигураций помечает статически заявленные возможности источником config.
  • finding.reported — находки о состоянии соединения от коннекторов питают статус последнего сигнала оверлея health.

Он не производит собственных событий и ничего не отправляет в живую инфраструктуру; его вывод читается UI управления и другими модулями по его типизированным маршрутам.