Wiki / 40
Шлюз MCP (Gateway)
Безопасная модель обнаружения и текущие ограничения шлюза (Gateway).
Маршруты
POST /mcp/search— публичный MCP-сервер потокового HTTP (Streamable HTTP) только для чтения и поиска по каталогу.POST /mcp/gateway— аутентифицированный MCP-сервер потокового HTTP. ТребуетX-API-Key.
Доступные инструменты
Шлюз (Gateway) предоставляет только внутренние инструменты реестра (Registry) для чтения:
search_skills(query, limit)— поиск навыков;get_skill_details(name)— сведения о навыке;get_server_health(name)— работоспособность сервера;gateway_info()— сведения о шлюзе.
Шлюз не проксирует произвольные удалённые адреса MCP и не принимает от MCP-клиента внешний адрес, заголовок аутентификации или токен.
Политика безопасности
Запись в каталоге, результат проверки работоспособности или активный статус в реестре никогда не дают разрешения на выполнение действий. Будущее подключение стороннего сервера через шлюз требует утверждённого снимка возможностей, списка разрешённых инструментов, профиля клиента, согласия пользователя и классификации риска.
Основа второй версии шлюза
Каждый вызов tools/call требует общий ключ программного интерфейса шлюза и X-Gateway-Client-Key, выданный для серверного профиля клиента. Профиль содержит явный список разрешённых внутренних инструментов только для чтения. Шлюз хранит только HMAC-хеш клиентского ключа, проверяет, что профиль не отозван, и проверяет разрешение на запрошенный инструмент до обработки вызова FastMCP. Отсутствующий, отозванный или неразрешённый клиентский ключ получает 403, а отсутствующий ключ шлюза — 401.
Оператор один раз создаёт профиль через POST /api/v1/admin/gateway-client-profiles. Ответ единственный раз возвращает его клиентский ключ hwg_.... Через тот же административный интерфейс можно просматривать несекретные метаданные профиля и отзывать его. Отзыв действует со следующего вызова инструмента.
Это граница для действующих внутренних инструментов поиска, а не средство общего выполнения действий через сторонние серверы. Шлюз не принимает внешние адреса, произвольные заголовки аутентификации, токены или имена удалённых инструментов. Для добавления внешнего выполнения по-прежнему нужны отдельно утверждённые снимок возможностей, список разрешённых инструментов, запись согласия, классификация риска и проект аудита.
Каждое разрешение имеет явные поля risk_class («класс риска») и consent_required («требуется согласие»). Текущий механизм выдаёт только разрешения read_only («только чтение») без согласия, а шлюз отклоняет любой другой класс риска и любое разрешение, требующее согласия. Это намеренное ограничение: прежде чем включать возможность не только для чтения, запись согласия должна быть спроектирована для аутентифицированного пользователя с узким описанием действия, сроком действия, отзывом и журналом аудита.
Обработчик проверки допускает только HTTPS-адреса на порту 443, разрешает DNS до соединения, отклоняет любые неглобальные адреса, закрепляет соединение за разрешённым адресом с TLS SNI, запрещает перенаправления и ограничивает заголовки, ответы и время ожидания. При ошибке проверки сервер сохраняет немаршрутизируемое состояние pending_verification («ожидает проверки»).
Журналы аудита запросов шлюза содержат только путь, код ответа, задержку и усечённую строку агента пользователя. В них намеренно не попадают ключи программного интерфейса, аргументы JSON-RPC и тела ответов внешних серверов.