Files
MikrotikManager/backend/mcp-coverage.json
T

2245 lines
112 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"version": 1,
"routes": [
{
"method": "DELETE",
"path": "/api/backups/:id",
"status": "mediated",
"operations": [
"backups.delete"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "DELETE",
"path": "/api/firewall/address-lists",
"status": "mediated",
"operations": [
"firewall.addressLists.delete"
],
"reason": "Общий REST/MCP address-list сервис: scoped ID, human plan, консервативные защиты зависимых правил, полный stable proof, отдельная проверка expiry window, shared locks/read-back/revision/no retry."
},
{
"method": "DELETE",
"path": "/api/firewall/rules",
"status": "mediated",
"operations": [
"firewall.rules.delete"
],
"reason": "Общий REST/MCP сервис формы Firewall: человеческий sealed plan, scoped native ID, полный matcher/order proof, статическая цель, shared locks, read-back, отдельный статус ревизии и отсутствие retry."
},
{
"method": "DELETE",
"path": "/api/gre/tunnels",
"status": "mediated",
"operations": [
"network.gre.delete"
],
"reason": "Общий REST/MCP GRE business executor: интерфейс и v4/v6 адреса, staged disabled, opaque native proof/dependencies, PSK purpose reference, protections/budget/locks, per-command read-back, partial/unknown без retry; SQL/HTTP проверены."
},
{
"method": "DELETE",
"path": "/api/ipsec/certs/:serverId",
"status": "mediated",
"operations": [
"network.ipsec.certificates.delete"
],
"reason": "Общий REST/MCP single certificate DELETE любого выбранного сертификата: force только для peer/identity ссылок, CA/CRL guards без обхода, native ID/private proof, intent/read-back, история и exact VERIFIED; SQL/HTTP any-cert/force/alias/lost/revoke/ABA/privacy приняты. Native force-reference поведение принимается отдельно на CHR."
},
{
"method": "DELETE",
"path": "/api/ipsec/peers/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.ipsec.peers.delete"
],
"reason": "Общий REST/MCP сервис принят SQL/HTTP: права и human approval, private source fences, bounded transport, точная семантика, partial/unknown без повторов; сетевой forwarding не заявляется."
},
{
"method": "DELETE",
"path": "/api/ipsec/server/:serverId",
"status": "mediated",
"operations": [
"network.ipsec.server.delete"
],
"reason": "Полный общий REST/MCP server removal: точный ordered manifest, зависимости foreign MC/pool и peer/certificate, полный certificate graph и объявленные CA cascade, preservation profiles/proposals, staged ACK/private read-back и история. Human/server/protection/budget guards; unknown не повторяется. SQL/HTTP parity, runtime countdown и dynamic policy exclusions приняты; настоящий CHR cascade отдельно не проверялся."
},
{
"method": "DELETE",
"path": "/api/ipsec/users/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.ipsec.users.delete"
],
"reason": "Общий REST/MCP executor полного удаления клиента с необязательным сертификатом, dependency/source proofs, последовательными intent/read-back, managed-only историей и SQL/HTTP-приёмкой без replay."
},
{
"method": "DELETE",
"path": "/api/mcp/grants/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "DELETE",
"path": "/api/mcp/management-channels/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "DELETE",
"path": "/api/mcp/oauth/clients/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "DELETE",
"path": "/api/mcp/protections/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "DELETE",
"path": "/api/servers/:id",
"status": "mediated",
"operations": [
"servers.delete"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "DELETE",
"path": "/api/users/:id",
"status": "mediated",
"operations": [
"users.delete"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "DELETE",
"path": "/api/users/:id/bindings/:bindingId",
"status": "mediated",
"operations": [
"users.binding_remove"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "DELETE",
"path": "/api/wireguard/interfaces/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.wireguard.interfaces.delete",
"ros.wireguard.delete"
],
"reason": "Общий REST/MCP каскад с запечатанными зависимостями, отдельным бюджетом каждой команды, read-back и остановкой без повтора; native alias не приобретает каскадных полномочий."
},
{
"method": "DELETE",
"path": "/api/wireguard/peers/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.wireguard.peers.delete",
"ros.wireguard_peer.delete"
],
"reason": "Общий REST/MCP сервис удаления peer: подтверждённый parent, привязки пользователей, полный непрозрачный private proof, защита сервера/интерфейса, drift и endpoint ABA, одна команда DELETE, проверка остальных peers, partial/unknown без повтора и отдельный receipt ревизии."
},
{
"method": "DELETE",
"path": "/mcp",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/.well-known/oauth-authorization-server",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/.well-known/oauth-protected-resource",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/alerts",
"status": "mediated",
"operations": [
"alerts.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/alerts/outbox",
"status": "mediated",
"operations": [
"alerts.outbox.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/auth/config",
"status": "excluded",
"operations": [],
"reason": "Bootstrap/health авторизации интерфейса; бизнес-операция MCP отсутствует."
},
{
"method": "GET",
"path": "/api/backups",
"status": "mediated",
"operations": [
"backups.list"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/backups/:id/download",
"status": "mediated",
"operations": [
"backups.download"
],
"reason": "Общий сервис REST/MCP, scoped источники и защиты, человеческое подтверждение, intent/read-back или безопасный human-only artifact, SQL/HTTP-приёмка и сверка без replay."
},
{
"method": "GET",
"path": "/api/backups/jobs/:jobId",
"status": "mediated",
"operations": [
"backups.jobs.read"
],
"reason": "Общий реестр фактической REST backup-очереди: доступ только к целиком разрешённой задаче, проверка устройств и прогресса, ограниченные страницы результатов, без notes/имён/путей/текстов ошибок. Временные задачи очищаются при закрытии приложения и restore; несовпадающие или неоднозначные ID не угадываются."
},
{
"method": "GET",
"path": "/api/backups/schedule",
"status": "mediated",
"operations": [
"backups.schedule.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/backups/storage",
"status": "mediated",
"operations": [
"backups.storage.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/bfd/sessions",
"status": "mediated",
"operations": [
"routing.bfd.sessions.read"
],
"reason": "Общие REST/MCP state-read сервисы и модели; legacy REST сохраняет defaults совместимости, MCP возвращает observed DTO с null/Unknown. Серверная область до опроса, пагинация, явные failures, areas и отдельное чтение BFD."
},
{
"method": "GET",
"path": "/api/bgp/catalog",
"status": "mediated",
"operations": [
"routing.bgp.catalog.read"
],
"reason": "Общие BGP catalog poll/parser; серверы ограничиваются до опроса, пагинация и failures сохраняются явно."
},
{
"method": "GET",
"path": "/api/bgp/sessions",
"status": "mediated",
"operations": [
"routing.bgp.sessions.read"
],
"reason": "Общий readBgpSessionsForServer/parser и pollBgpCatalog; эффективный scope до SQL/native, серверная и строковая пагинация, failures/incomplete сохраняют частичный отказ вместо успешного пустого списка."
},
{
"method": "GET",
"path": "/api/bgp/sessions/raw/:id",
"status": "mediated",
"operations": [
"routing.bgp.sessions.raw.read"
],
"reason": "Общий readRawBgpSessionsForServer, scope/disabled до native GET, bounded raw DTO с метаданными сервера и маскированием ключей до выдачи/аудита."
},
{
"method": "GET",
"path": "/api/certificates",
"status": "mediated",
"operations": [
"certificates.state.read"
],
"reason": "Общий REST/MCP источник сертификатов с проверкой schema и clock offset; refresh только повторяет чтение без записи. Область до опроса, unknown в MCP, native keys исключены; HTTP/SQL parity и malformed failure проверены."
},
{
"method": "GET",
"path": "/api/certificates/acme-settings",
"status": "mediated",
"operations": [
"certificates.acme.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/certificates/issue/:jobId",
"status": "mediated",
"operations": [
"certificates.jobs.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/certificates/renew-settings",
"status": "mediated",
"operations": [
"certificates.renew.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/certificates/state",
"status": "mediated",
"operations": [
"certificates.state.read"
],
"reason": "Общий сервис REST/MCP с ограниченным типизированным DTO; права и серверная область проверяются до SQL/DNS/опроса, выдача ограничена, ошибки и неизвестные значения сохраняются."
},
{
"method": "GET",
"path": "/api/containers",
"status": "mediated",
"operations": [
"containers.state.read"
],
"reason": "Общий REST/MCP collector контейнеров; область до опроса, стабильные страницы, explicit partial/unsupported, env values и cmd скрыты в MCP. Реальные HTTP/SQL тесты сравнивают legacy каталог и observed DTO."
},
{
"method": "GET",
"path": "/api/containers/state",
"status": "mediated",
"operations": [
"containers.state.read"
],
"reason": "Общий сервис REST/MCP с ограниченным типизированным DTO; права и серверная область проверяются до SQL/DNS/опроса, выдача ограничена, ошибки и неизвестные значения сохраняются."
},
{
"method": "GET",
"path": "/api/events",
"status": "mediated",
"operations": [
"events.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/evobgp/settings",
"status": "mediated",
"operations": [
"evobgp.settings.read"
],
"reason": "Общие readEvoBgpSettings/publicEvoBgpSettings без создания строки и без API-ключа; полный эффективный каталог проверяется до чтения."
},
{
"method": "GET",
"path": "/api/filters/gre-tunnels",
"status": "mediated",
"operations": [
"routing.gre.catalog.read"
],
"reason": "Общие fetchServerFilters/pollGreCatalog с REST; разрешённые серверы отбираются до опроса, выдача ограничена, IPsec secret не передаётся, ошибки устройств сохраняются."
},
{
"method": "GET",
"path": "/api/filters/revisions",
"status": "mediated",
"operations": [
"config.filters.revisions.read"
],
"reason": "Общий listRevisions с REST: только метаданные, максимум 50 записей; серверная область и права проверяются до SQL, payload ревизии не выдаётся."
},
{
"method": "GET",
"path": "/api/filters/rules",
"status": "mediated",
"operations": [
"routing.filters.catalog.read"
],
"reason": "Общий REST/MCP live/cache reader BGP-in, scope до опроса/SQL, native order/unknown flags, scoped stale fallback; MCP observer не обновляет cache/revisions и не подтверждает эффекты parser hints."
},
{
"method": "GET",
"path": "/api/firewall/all",
"status": "mediated",
"operations": [
"firewall.state.read"
],
"reason": "Общий listFirewallAll/fetchFirewallState с областью до HTTP; MCP получает observed flags/counters без legacy defaults, отдельные matcher-поля, пагинацию и failures. Неполные flags/ошибки не сохраняются как observed revision."
},
{
"method": "GET",
"path": "/api/firewall/revisions",
"status": "mediated",
"operations": [
"config.firewall.revisions.read"
],
"reason": "Общий listRevisions с REST: только метаданные, максимум 50 записей; серверная область и права проверяются до SQL, payload ревизии не выдаётся."
},
{
"method": "GET",
"path": "/api/geoip",
"status": "mediated",
"operations": [
"geoip.read"
],
"reason": "Общий buildGeoipStatus: только локальные readers и метаданные; глобальная эффективная область проверяется до чтения."
},
{
"method": "GET",
"path": "/api/gre/revisions",
"status": "mediated",
"operations": [
"config.gre.revisions.read"
],
"reason": "Общий listRevisions с REST: только метаданные, максимум 50 записей; серверная область и права проверяются до SQL, payload ревизии не выдаётся."
},
{
"method": "GET",
"path": "/api/gre/tunnels",
"status": "mediated",
"operations": [
"network.gre.state.read"
],
"reason": "Общий REST/MCP опрос GRE и IPv4/IPv6-адресов; ограничение серверов до чтения, страницы адресов, nullable-наблюдения, происхождение метаданных, PSK скрыт; MCP не сохраняет историю и не подтверждает forwarding."
},
{
"method": "GET",
"path": "/api/internet-path/latest",
"status": "mediated",
"operations": [
"routing.internet-path.latest.read"
],
"reason": "Общий latest-row REST/MCP reader, scoped JSON-проекция в SQL до разбора скрытых записей, проверка server bindings и схемы, вложенная пагинация, известные нули/unknown и secret-free whitelist. Возвращается сохранённая интерпретация с возрастом/stale/clockSkew; она не доказывает текущий маршрут или forwarding."
},
{
"method": "GET",
"path": "/api/internet-path/settings",
"status": "mediated",
"operations": [
"internet-path.settings.read"
],
"reason": "Общий сервис настроек коллектора; полная область серверов, защита зависимостей, подтверждённый план и проверка сохранения."
},
{
"method": "GET",
"path": "/api/ipsec",
"status": "mediated",
"operations": [
"network.ipsec.state.read"
],
"reason": "Общий REST polling/parser по выбранным серверам до HTTP; MCP использует safe observed DTO без key material, nullable flags/counters и явные failures. Пагинация каталогов и вложенных peers/VTEP/certificates, без обновления истории конфигурации или утверждения о forwarding."
},
{
"method": "GET",
"path": "/api/ipsec/revisions",
"status": "mediated",
"operations": [
"config.ipsec.revisions.read"
],
"reason": "Общий listRevisions с REST: только метаданные, максимум 50 записей; серверная область и права проверяются до SQL, payload ревизии не выдаётся."
},
{
"method": "GET",
"path": "/api/logs",
"status": "mediated",
"operations": [
"logs.query"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/logs/:id",
"status": "mediated",
"operations": [
"logs.get"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/logs/:id/context",
"status": "mediated",
"operations": [
"logs.context"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/logs/export",
"status": "mediated",
"operations": [
"logs.export"
],
"reason": "Общий REST/MCP SQL-источник с server scope до бюджета 50000 строк/8 MiB; маскированная зашифрованная выгрузка с атомарной квотой и отдельным logs.export.read для чтения частей с повторной авторизацией."
},
{
"method": "GET",
"path": "/api/logs/live",
"status": "mediated",
"operations": [
"logs.follow"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/logs/settings",
"status": "mediated",
"operations": [
"logs.settings.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/logs/summary",
"status": "mediated",
"operations": [
"logs.summary"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/mcp/artifacts/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/audit",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/catalog",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/connections",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/connections/:id/grants",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/coverage",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/database/receipts/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/devices/:serverId/:resource",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/devices/catalog",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/drift",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/management-channels",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/oauth/clients",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/oauth/requests/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/operations",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/overview",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/plans",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/plans/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/protections",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/requests",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/routing-profiles",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/mcp/settings",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/api/ospf/all",
"status": "mediated",
"operations": [
"routing.ospf.state.read"
],
"reason": "Общие REST/MCP state-read сервисы и модели; legacy REST сохраняет defaults совместимости, MCP возвращает observed DTO с null/Unknown. Серверная область до опроса, пагинация, явные failures, areas и отдельное чтение BFD."
},
{
"method": "GET",
"path": "/api/ospf/catalog",
"status": "mediated",
"operations": [
"routing.ospf.catalog.read"
],
"reason": "Общий OSPF/BFD catalog parser; область серверов ограничивается до опроса, коллекции и серверы выдаются страницами с явными failures."
},
{
"method": "GET",
"path": "/api/ospf/instances",
"status": "mediated",
"operations": [
"routing.ospf.state.read"
],
"reason": "Общие REST/MCP state-read сервисы и модели; legacy REST сохраняет defaults совместимости, MCP возвращает observed DTO с null/Unknown. Серверная область до опроса, пагинация, явные failures, areas и отдельное чтение BFD."
},
{
"method": "GET",
"path": "/api/ospf/interfaces",
"status": "mediated",
"operations": [
"routing.ospf.state.read"
],
"reason": "Общие REST/MCP state-read сервисы и модели; legacy REST сохраняет defaults совместимости, MCP возвращает observed DTO с null/Unknown. Серверная область до опроса, пагинация, явные failures, areas и отдельное чтение BFD."
},
{
"method": "GET",
"path": "/api/ospf/neighbors",
"status": "mediated",
"operations": [
"routing.ospf.state.read"
],
"reason": "Общие REST/MCP state-read сервисы и модели; legacy REST сохраняет defaults совместимости, MCP возвращает observed DTO с null/Unknown. Серверная область до опроса, пагинация, явные failures, areas и отдельное чтение BFD."
},
{
"method": "GET",
"path": "/api/recursive-routes",
"status": "mediated",
"operations": [
"routing.recursive.routes.read"
],
"reason": "Общий REST/MCP reader с явным live/stale fallback, строгими effective properties, устойчивыми логическими ID и scoped SQL. MCP observer не меняет кеш/ревизии; malformed source не объявляется успешным пустым каталогом."
},
{
"method": "GET",
"path": "/api/recursive-routes/catalog",
"status": "mediated",
"operations": [
"routing.recursive.catalog.read"
],
"reason": "Общий сервис REST/MCP с ограниченным типизированным DTO; права и серверная область проверяются до SQL/DNS/опроса, выдача ограничена, ошибки и неизвестные значения сохраняются."
},
{
"method": "GET",
"path": "/api/recursive-routes/gateways",
"status": "mediated",
"operations": [
"routing.recursive.gateways.read"
],
"reason": "Общий REST/MCP reader шлюзов приложения с агрегацией up/down/unknown, пагинацией и ограничением сервера до опроса; active не трактуется как подтверждение передачи пакетов."
},
{
"method": "GET",
"path": "/api/recursive-routes/gateways/catalog",
"status": "mediated",
"operations": [
"routing.recursive.gateways.catalog.read"
],
"reason": "Общий сервис REST/MCP с ограниченным типизированным DTO; права и серверная область проверяются до SQL/DNS/опроса, выдача ограничена, ошибки и неизвестные значения сохраняются."
},
{
"method": "GET",
"path": "/api/recursive-routes/revisions",
"status": "mediated",
"operations": [
"config.recursive-routes.revisions.read"
],
"reason": "Общий listRevisions с REST: только метаданные, максимум 50 записей; серверная область и права проверяются до SQL, payload ревизии не выдаётся."
},
{
"method": "GET",
"path": "/api/scheduler/runs",
"status": "mediated",
"operations": [
"scheduler.runs"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/scheduler/status",
"status": "mediated",
"operations": [
"scheduler.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/servers",
"status": "mediated",
"operations": [
"servers.list"
],
"reason": "Общий сервис каталога с ограничениями серверов и типизированным MCP-ответом."
},
{
"method": "GET",
"path": "/api/servers-api-ping/settings",
"status": "mediated",
"operations": [
"servers.api-ping.settings.read"
],
"reason": "Общий сервис настроек коллектора; полная область серверов, защита зависимостей, подтверждённый план и проверка сохранения."
},
{
"method": "GET",
"path": "/api/servers/:id",
"status": "mediated",
"operations": [
"servers.list"
],
"reason": "Общий сервис каталога с ограничениями серверов и типизированным MCP-ответом."
},
{
"method": "GET",
"path": "/api/servers/:id/bgp/sessions",
"status": "mediated",
"operations": [
"routing.bgp.sessions.read"
],
"reason": "Явный serverId в общем sessions-адаптере: общий reader/parser и poller, scope до опроса; диагностические ошибки/неизвестные счётчики не подменяются нулём."
},
{
"method": "GET",
"path": "/api/servers/:id/containers",
"status": "mediated",
"operations": [
"containers.state.read"
],
"reason": "Общий REST/MCP collector контейнеров; область до опроса, стабильные страницы, explicit partial/unsupported, env values и cmd скрыты в MCP. Реальные HTTP/SQL тесты сравнивают legacy каталог и observed DTO."
},
{
"method": "GET",
"path": "/api/servers/:id/ospf",
"status": "mediated",
"operations": [
"routing.ospf.state.read"
],
"reason": "Общие REST/MCP state-read сервисы и модели; legacy REST сохраняет defaults совместимости, MCP возвращает observed DTO с null/Unknown. Серверная область до опроса, пагинация, явные failures, areas и отдельное чтение BFD."
},
{
"method": "GET",
"path": "/api/servers/:id/ros-src-address",
"status": "mediated",
"operations": [
"servers.source-address.read"
],
"reason": "Общий сервис REST/MCP с ограниченным типизированным DTO; права и серверная область проверяются до SQL/DNS/опроса, выдача ограничена, ошибки и неизвестные значения сохраняются."
},
{
"method": "GET",
"path": "/api/servers/:id/snapshots",
"status": "mediated",
"operations": [
"servers.snapshots.read"
],
"reason": "Общий сервис REST/MCP с ограниченным типизированным DTO; права и серверная область проверяются до SQL/DNS/опроса, выдача ограничена, ошибки и неизвестные значения сохраняются."
},
{
"method": "GET",
"path": "/api/servers/:id/vxlan",
"status": "mediated",
"operations": [
"network.vxlan.state.read"
],
"reason": "Общий REST polling/parser по выбранным серверам до HTTP; MCP использует safe observed DTO без key material, nullable flags/counters и явные failures. Пагинация каталогов и вложенных peers/VTEP/certificates, без обновления истории конфигурации или утверждения о forwarding."
},
{
"method": "GET",
"path": "/api/servers/:id/wan-runtime",
"status": "mediated",
"operations": [
"servers.wan-runtime.read"
],
"reason": "Общий readWanRuntimeForServer и модель IPv4/main: scope/disabled до native GET, bound DHCP, explicit unknown/ambiguous default и адреса, ошибка источника не выдаётся за пустое состояние; forwarding не подтверждается."
},
{
"method": "GET",
"path": "/api/sidebar-counts",
"status": "mediated",
"operations": [
"system.sidebar.counts.read"
],
"reason": "Общий REST/MCP readSidebarCounts: SQL COUNT без DTO/привязок пользователей, global allow + все права источников, каталог до 100 серверов до native reads, coalescing, null/unknown отличается от zero, source interval и nonatomic snapshot; реальные SQL/permission/no-native-on-denial проверки."
},
{
"method": "GET",
"path": "/api/statistics",
"status": "mediated",
"operations": [
"statistics.read"
],
"reason": "Общий SQL-сервис статистики/pivot; MCP требует выбранный сервер и период до 31 дня, обновляет только его интерфейсы."
},
{
"method": "GET",
"path": "/api/statistics/pivot",
"status": "mediated",
"operations": [
"statistics.pivot"
],
"reason": "Общий SQL-сервис статистики/pivot; MCP требует выбранный сервер и период до 31 дня, обновляет только его интерфейсы."
},
{
"method": "GET",
"path": "/api/system/database/backup",
"status": "mediated",
"operations": [
"database.backup"
],
"reason": "Общий backup service/event: обязательное human approval, полный global/server scope, exclusive drain, bounded real pg_dump, private temporary libpq service file, encrypted signed receipt и download только JWT владельца; SQL/HTTP проверены."
},
{
"method": "GET",
"path": "/api/traffic/bound-interfaces",
"status": "mediated",
"operations": [
"traffic.bindings.history.read"
],
"reason": "Общий расчёт привязок по сохранённым samples: scoped user eligibility до JSON/метрик, user/server/binding pages, скрытые peer keys/comments, known zero/unknown, binding drift proof и отсутствие RouterOS/планов записи."
},
{
"method": "GET",
"path": "/api/traffic/flow",
"status": "mediated",
"operations": [
"traffic.flow.talkers.read"
],
"reason": "Общая REST/MCP проекция разговоров; серверная область применяется до SQL и pending, источник ограничен, глобальные runtime/host-поля не раскрываются."
},
{
"method": "GET",
"path": "/api/traffic/flow/analytics",
"status": "mediated",
"operations": [
"traffic.flow.analytics.read"
],
"reason": "Общий REST analytics engine в scoped режиме: сервер до SQL, topology без скрытых пользователей/ключей, обход общего кэша, bounded read и страницы, source/access/topology fences; retained данные и контекстные оценки скоростей явно разделены."
},
{
"method": "GET",
"path": "/api/traffic/flow/clients",
"status": "mediated",
"operations": [
"traffic.flow.clients.read"
],
"reason": "Общие REST/MCP readers: scope до SQL/агрегации и каталогов, hidden-binding exclusion, bounded pages/counters, наблюдаемые retained rows вместо выдуманных online/wire rates; клиентская attribution и coverage явно ограничены."
},
{
"method": "GET",
"path": "/api/traffic/flow/exporters",
"status": "mediated",
"operations": [
"traffic.flow.exporters.read"
],
"reason": "Общие REST/MCP readers: scope до SQL/агрегации и каталогов, hidden-binding exclusion, bounded pages/counters, наблюдаемые retained rows вместо выдуманных online/wire rates; клиентская attribution и coverage явно ограничены."
},
{
"method": "GET",
"path": "/api/traffic/flow/host-files",
"status": "mediated",
"operations": [
"traffic.flow.hostFiles.export"
],
"reason": "Общий REST builder файлов NetFlow; полный глобальный допуск и человеческий план создают зашифрованный owner-only артефакт. Ключи не возвращаются MCP; скачивание через JWT повторно проверяет credential/права/область/источник/подпись/hash/срок."
},
{
"method": "GET",
"path": "/api/traffic/flow/host-status",
"status": "mediated",
"operations": [
"netflow.host.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/traffic/flow/live",
"status": "mediated",
"operations": [
"traffic.flow.live.read"
],
"reason": "Ограниченное наблюдение через общий live-сервис REST/MCP: scope до источника, uncached выборки, отмена и отзыв доступа, общий лимит подписок и SQL/HTTP-приёмка."
},
{
"method": "GET",
"path": "/api/traffic/flow/map-hops",
"status": "mediated",
"operations": [
"traffic.flow.map.read"
],
"reason": "Общий REST map engine со scoped SQL/pending/topology, отказом от общего кэша/enrichment, проверками источника/настроек/доступа, лимитами и вложенными страницами; предполагаемые связи не выдаются за traceroute или forwarding proof."
},
{
"method": "GET",
"path": "/api/traffic/flow/monthly",
"status": "mediated",
"operations": [
"traffic.flow.monthly.read"
],
"reason": "Общие REST/MCP readers: scope до SQL/агрегации и каталогов, hidden-binding exclusion, bounded pages/counters, наблюдаемые retained rows вместо выдуманных online/wire rates; клиентская attribution и coverage явно ограничены."
},
{
"method": "GET",
"path": "/api/traffic/flow/settings",
"status": "mediated",
"operations": [
"netflow.settings.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/traffic/flows",
"status": "mediated",
"operations": [
"traffic.flow.talkers.read"
],
"reason": "Общая REST/MCP проекция разговоров; серверная область применяется до SQL и pending, источник ограничен, глобальные runtime/host-поля не раскрываются."
},
{
"method": "GET",
"path": "/api/traffic/servers",
"status": "mediated",
"operations": [
"traffic.servers.history.read"
],
"reason": "Общий REST/MCP reader сохранённой истории: scoped SQL/context до чтения, enabled каталог и страницы серверов, подтверждённый ноль/unknown masks, freshness, предел строк без частичных итогов, без RouterOS и observer writes."
},
{
"method": "GET",
"path": "/api/traffic/servers/:id",
"status": "mediated",
"operations": [
"traffic.server.history.read"
],
"reason": "Общий REST/MCP расчёт сервера/интерфейса по сохранённым counters; scoped SQL до разбора, disabled/stale/error не становятся текущим нулём, known volume отдельно от coverage, bounded range/rows, без опроса."
},
{
"method": "GET",
"path": "/api/traffic/servers/:id/interfaces",
"status": "mediated",
"operations": [
"traffic.server.interfaces.read"
],
"reason": "Общий REST/MCP интерфейсный reader за 24 часа: aggregate-only, nullable statusKnown/freshness, будущие samples исключены, страницы/предел строк, без current-state и forwarding claims."
},
{
"method": "GET",
"path": "/api/traffic/servers/:id/live",
"status": "mediated",
"operations": [
"traffic.live.read"
],
"reason": "Общий readTrafficLiveSample; MCP возвращает ограниченную серию до трёх срезов вместо бесконечного SSE. Полнота суммы, направление RX/TX, отзыв доступа и смена источника проверяются перед каждым новым native-запросом."
},
{
"method": "GET",
"path": "/api/traffic/settings",
"status": "mediated",
"operations": [
"traffic.settings.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/traffic/users",
"status": "mediated",
"operations": [
"traffic.users.history.read"
],
"reason": "Общий расчёт REST/MCP: eligibility/scope до SQL JSON, исключение пользователей со скрытыми привязками, страницы пользователей/серверов/привязок, явный subtotal, guarded global unbound, freshness и проверка drift без observer writes."
},
{
"method": "GET",
"path": "/api/traffic/users/:id",
"status": "mediated",
"operations": [
"traffic.user.history.read"
],
"reason": "Общий REST/MCP user-traffic builder с scoped SQL input вместо глобальной гидрации: nullable masks, peer-specific counters без вывода ключа, completeness выбранных источников, guards прав/server/binding proof."
},
{
"method": "GET",
"path": "/api/uptime/overview",
"status": "mediated",
"operations": [
"uptime.overview.read"
],
"reason": "Общий readUptimeOverview; SQL scope до samples/provenance, bounded pages/window, unknown вместо UI zeros, явный historical fallback, повторные source/probe/grant checks, только stored data без сетевых команд и секретов."
},
{
"method": "GET",
"path": "/api/uptime/probes",
"status": "mediated",
"operations": [
"uptime.ping.probes.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/uptime/settings",
"status": "mediated",
"operations": [
"uptime.settings.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/uptime/sources/:id/interfaces",
"status": "mediated",
"operations": [
"uptime.ping.interfaces.read"
],
"reason": "Общий reader/model интерфейсов: scope/disabled до native, effective disabled, unknown flag явно непригоден; пагинация и ошибки не подменяются пустым успехом."
},
{
"method": "GET",
"path": "/api/uptime/speed-probes",
"status": "mediated",
"operations": [
"uptime.speed.probes.read"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/uptime/speed-test/endpoints/:id/interfaces",
"status": "mediated",
"operations": [
"uptime.speed.interfaces.read"
],
"reason": "Общий reader/model с IPv4 address candidates, без выдуманных flags; bounded пагинация и адреса, неизвестное состояние видно отдельно."
},
{
"method": "GET",
"path": "/api/uptime/speed-test/runs",
"status": "mediated",
"operations": [
"uptime.speed.runs.read"
],
"reason": "Общий readSpeedHistoryRuns/mapSpeedHistoryRun; оба serverId ограничены в SQL до LIMIT/OFFSET и parser, стабильный порядок, unknown/zero сохранены."
},
{
"method": "GET",
"path": "/api/users",
"status": "mediated",
"operations": [
"users.list"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/users/:id",
"status": "mediated",
"operations": [
"users.get"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "GET",
"path": "/api/users/interface-catalog",
"status": "mediated",
"operations": [
"users.interfaces.read"
],
"reason": "Общий сервис каталога с ограничениями серверов и типизированным MCP-ответом."
},
{
"method": "GET",
"path": "/api/users/interface-catalog-state",
"status": "mediated",
"operations": [
"users.interfaces.state"
],
"reason": "Общий сервис каталога с ограничениями серверов и типизированным MCP-ответом."
},
{
"method": "GET",
"path": "/api/vxlan",
"status": "mediated",
"operations": [
"network.vxlan.state.read"
],
"reason": "Общий REST polling/parser по выбранным серверам до HTTP; MCP использует safe observed DTO без key material, nullable flags/counters и явные failures. Пагинация каталогов и вложенных peers/VTEP/certificates, без обновления истории конфигурации или утверждения о forwarding."
},
{
"method": "GET",
"path": "/api/wireguard",
"status": "mediated",
"operations": [
"network.wireguard.state.read"
],
"reason": "Общий REST polling/parser по выбранным серверам до HTTP; MCP использует safe observed DTO без key material, nullable flags/counters и явные failures. Пагинация каталогов и вложенных peers/VTEP/certificates, без обновления истории конфигурации или утверждения о forwarding."
},
{
"method": "GET",
"path": "/api/wireguard/revisions",
"status": "mediated",
"operations": [
"config.wireguard.revisions.read"
],
"reason": "Общий listRevisions с REST: только метаданные, максимум 50 записей; серверная область и права проверяются до SQL, payload ревизии не выдаётся."
},
{
"method": "GET",
"path": "/health",
"status": "excluded",
"operations": [],
"reason": "Bootstrap/health авторизации интерфейса; бизнес-операция MCP отсутствует."
},
{
"method": "GET",
"path": "/mcp",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "GET",
"path": "/oauth/authorize",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "PATCH",
"path": "/api/firewall/address-lists",
"status": "mediated",
"operations": [
"firewall.addressLists.toggle"
],
"reason": "Общий REST/MCP address-list сервис: scoped ID, human plan, консервативные защиты зависимых правил, полный stable proof, отдельная проверка expiry window, shared locks/read-back/revision/no retry."
},
{
"method": "PATCH",
"path": "/api/firewall/rules",
"status": "mediated",
"operations": [
"firewall.rules.toggle"
],
"reason": "Общий REST/MCP сервис формы Firewall: человеческий sealed plan, scoped native ID, полный matcher/order proof, статическая цель, shared locks, read-back, отдельный статус ревизии и отсутствие retry."
},
{
"method": "PATCH",
"path": "/api/gre/tunnels",
"status": "mediated",
"operations": [
"network.gre.update"
],
"reason": "Общий REST/MCP GRE business executor: интерфейс и v4/v6 адреса, staged disabled, opaque native proof/dependencies, PSK purpose reference, protections/budget/locks, per-command read-back, partial/unknown без retry; SQL/HTTP проверены."
},
{
"method": "PATCH",
"path": "/api/ipsec/peers/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.ipsec.peers.update"
],
"reason": "Общий REST/MCP peer PATCH всех REST-полей, same-value/native empty strings и history-only noop; certificate presence отклоняется. Native alias сохраняет comment и входит в общий private proof/intent/read-back/history. SQL/HTTP lost/ignored/collateral/reference mismatch/grant/protection/reconcile приняты; native rename gate остаётся отдельным."
},
{
"method": "PATCH",
"path": "/api/ipsec/users/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.ipsec.users.update"
],
"reason": "Полный общий REST/MCP PATCH клиента: display name, static IPv4/pool reset, PSK reference, Remote ID/disabled, cert-only promotion/ignored fields, чужой mode-config upsert с consumer closure, история, полный private proof и staged ACK/read-back. Human/server/operation/protection guards и SQL/HTTP parity приняты; lost ACK не повторяется."
},
{
"method": "PATCH",
"path": "/api/uptime/probes/:id",
"status": "mediated",
"operations": [
"uptime.ping.visibility.update"
],
"reason": "Общий guarded updateProbeShowOnDashboard: scoped конфигурация, approval, защиты глобального probe ID, проверка drift/read-back без запуска сетевых измерений."
},
{
"method": "PATCH",
"path": "/api/users/:id",
"status": "mediated",
"operations": [
"users.update",
"users.permissions.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PATCH",
"path": "/api/wireguard/interfaces/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.wireguard.interfaces.update"
],
"reason": "Общий REST/MCP WireGuard PATCH: все поля, scoped key refs, rename peer/address ссылок, primary/secondary адреса, private dependency proof, actual byte limits, epoch ABA, intent/fences/read-back и exact VERIFIED reconcile без replay. Сторонние routing/firewall/application зависимости требуют отдельного плана; SQL/HTTP проверены, native readiness отдельно не заявляется."
},
{
"method": "PATCH",
"path": "/api/wireguard/peers/:serverId/:rosId",
"status": "mediated",
"operations": [
"network.wireguard.peers.update",
"ros.wireguard_peer.update"
],
"reason": "Общий REST/MCP сервис изменения peer: зависимости, приватный proof, один PATCH, точный read-back и отдельная read-only сверка без повтора."
},
{
"method": "POST",
"path": "/_internal/mcp/portal/revocations",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/alerts/outbox/:id/retry",
"status": "mediated",
"operations": [
"alerts.outbox.retry"
],
"reason": "Общий REST/MCP повтор unknown: human approval, acknowledged duplicate risk, private row source proof under lock, CAS version/status and application protections; подтверждается только постановка в очередь."
},
{
"method": "POST",
"path": "/api/alerts/telegram/test",
"status": "mediated",
"operations": [
"alerts.telegram.test"
],
"reason": "Общий REST/MCP test payload и единственный guarded POST после человеческого подтверждения. Full global/server scope, owner/purpose secretRef, private proof и late fence; ack не delivery, reject/unknown без повтора, bounded response и запрет redirect."
},
{
"method": "POST",
"path": "/api/backups/:id/restore",
"status": "mediated",
"operations": [
"backups.restore"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/backups/create",
"status": "mediated",
"operations": [
"backups.create"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/backups/storage/sync",
"status": "mediated",
"operations": [
"backups.storage.sync"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/backups/storage/test",
"status": "mediated",
"operations": [
"backups.storage.test"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/certificates/acme-settings/test",
"status": "mediated",
"operations": [
"certificates.acme.test"
],
"reason": "Общий сервис REST/MCP, scoped источники и защиты, человеческое подтверждение, intent/read-back или безопасный human-only artifact, SQL/HTTP-приёмка и сверка без replay."
},
{
"method": "POST",
"path": "/api/certificates/issue",
"status": "mediated",
"operations": [
"certificates.issue"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/certificates/refresh",
"status": "mediated",
"operations": [
"certificates.state.read"
],
"reason": "Общий REST/MCP источник сертификатов с проверкой schema и clock offset; refresh только повторяет чтение без записи. Область до опроса, unknown в MCP, native keys исключены; HTTP/SQL parity и malformed failure проверены."
},
{
"method": "POST",
"path": "/api/events/batch",
"status": "mediated",
"operations": [
"events.batch.append"
],
"reason": "Общий REST/MCP client batch insert: все поля и payload, server UUID, human approval/full global scope, bounded encrypted plan, atomic insert и exact VERIFIED read-only global/portal reconcile; lost acknowledgement/tamper/late pause/protection не повторяются. Это записи журнала, не доказательства системных действий."
},
{
"method": "POST",
"path": "/api/evobgp/catalog",
"status": "mediated",
"operations": [
"evobgp.catalog.read"
],
"reason": "Общие parser/formatter и distinct server counts, полный эффективный scope до HTTP/SQL, credentials только из БД, bounded GET без redirects, пагинация всех коллекций с fingerprint и сохранением неизвестных счётчиков."
},
{
"method": "POST",
"path": "/api/evobgp/test",
"status": "mediated",
"operations": [
"evobgp.connection.check"
],
"reason": "Общий ограниченный modules GET; MCP принимает сохранённый ключ или owner/destination-bound secret reference вместо открытого секрета. Полная серверная область проверяется до HTTP, результат не отражает upstream payload и не сохраняет настройки."
},
{
"method": "POST",
"path": "/api/filters/revisions/:id/restore",
"status": "mediated",
"operations": [
"filters.revision.restore"
],
"reason": "Общий guarded applyFiltersToServer; scoped filters revision/checksum повторно проверяются после approval, те же зависимости/защиты и native/DB/revision read-back, human only."
},
{
"method": "POST",
"path": "/api/firewall/address-lists",
"status": "mediated",
"operations": [
"firewall.addressLists.create"
],
"reason": "Общий REST/MCP address-list сервис: scoped ID, human plan, консервативные защиты зависимых правил, полный stable proof, отдельная проверка expiry window, shared locks/read-back/revision/no retry."
},
{
"method": "POST",
"path": "/api/firewall/revisions/:id/restore",
"status": "mediated",
"operations": [
"firewall.revision.restore"
],
"reason": "Общий строгий REST/MCP restore: scoped revision fingerprint, full native proof, точный static порядок/дубликаты, staged disabled preparation, per-command read-back, защиты/бюджет/locks и no retry."
},
{
"method": "POST",
"path": "/api/firewall/rules",
"status": "mediated",
"operations": [
"firewall.rules.create"
],
"reason": "Общий REST/MCP сервис формы Firewall: человеческий sealed plan, scoped native ID, полный matcher/order proof, статическая цель, shared locks, read-back, отдельный статус ревизии и отсутствие retry."
},
{
"method": "POST",
"path": "/api/firewall/rules/move",
"status": "mediated",
"operations": [
"firewall.rules.move"
],
"reason": "Общий moveFirewallRule: точные ID/порядок и все matcher-поля без счётчиков, static source/destination, sealed человеческий план, защиты всей таблицы/сервера, fingerprint перед POST, read-back, без retry и явное состояние сохранения ревизии."
},
{
"method": "POST",
"path": "/api/geoip/update",
"status": "mediated",
"operations": [
"geoip.update"
],
"reason": "Общий сервис REST/MCP, scoped источники и защиты, человеческое подтверждение, intent/read-back или безопасный human-only artifact, SQL/HTTP-приёмка и сверка без replay."
},
{
"method": "POST",
"path": "/api/gre/revisions/:id/restore",
"status": "mediated",
"operations": [
"network.gre.revision.restore"
],
"reason": "Общий строгий REST/MCP GRE restore: весь раздел и IPv4/IPv6 адреса, зависимости и защиты, отключение перед адресами, приватные proof/PSK, human approval, поштучный read-back и отказ без повторной записи."
},
{
"method": "POST",
"path": "/api/gre/tunnels",
"status": "mediated",
"operations": [
"network.gre.create"
],
"reason": "Общий REST/MCP GRE business executor: интерфейс и v4/v6 адреса, staged disabled, opaque native proof/dependencies, PSK purpose reference, protections/budget/locks, per-command read-back, partial/unknown без retry; SQL/HTTP проверены."
},
{
"method": "POST",
"path": "/api/ipsec/certs/:serverId/export",
"status": "mediated",
"operations": [
"network.ipsec.existing-certificates.export"
],
"reason": "Общий REST/MCP executor существующего сертификата: оба selector и все роли, явный private/CA intent, human MCP plan, actor/key no-replay, exact owned file/read/cleanup, encrypted owner-only artifact/TTL; синтетическая SQL/HTTP/portal и browser приёмка. Native CHR отдельно."
},
{
"method": "POST",
"path": "/api/ipsec/revisions/:id/restore",
"status": "mediated",
"operations": [
"network.ipsec.revisions.restore"
],
"reason": "Общий REST/MCP revision restore: strict fingerprint/schema, private whole-state proof, PKI/profile/policy/pool dependencies, exact clears, human approval и read-back без replay. Утраченные PKI ключи не генерируются."
},
{
"method": "POST",
"path": "/api/ipsec/server/init",
"status": "mediated",
"operations": [
"network.ipsec.server.init"
],
"reason": "Общий REST/MCP init: полная форма, raw dependency closure, подпись только новых ACK-owned сертификатов, human approval, per-command fences/read-back и обязательная история."
},
{
"method": "POST",
"path": "/api/ipsec/users",
"status": "mediated",
"operations": [
"network.ipsec.users.create"
],
"reason": "Full shared guarded client creation, purpose-bound secret refs, human-approved encrypted PKCS12 artifact and owner portal; private export separately authorized"
},
{
"method": "POST",
"path": "/api/ipsec/users/:serverId/:rosId/cert",
"status": "mediated",
"operations": [
"network.ipsec.existing-certificates.export"
],
"reason": "Общий REST/MCP executor существующего сертификата: оба selector и все роли, явный private/CA intent, human MCP plan, actor/key no-replay, exact owned file/read/cleanup, encrypted owner-only artifact/TTL; синтетическая SQL/HTTP/portal и browser приёмка. Native CHR отдельно."
},
{
"method": "POST",
"path": "/api/mcp/connections",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/connections/:id/check",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/connections/:id/grants",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/connections/:id/revalidate",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/connections/:id/rotate",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/connections/:id/status",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/database/archives",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/database/plan",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/devices/:serverId/:resource/plan",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/management-channels",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/oauth/clients",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/oauth/consent",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/operations/:id/reconcile",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/operations/:id/recover",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/pause",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/plans/:id/apply",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/plans/:id/decision",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/policy/preview",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/protections",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/routing-profiles/:id/check",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/routing-profiles/:id/pause",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/routing-profiles/plan",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/secrets",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/mcp/stop-automation",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/api/network/resolve-hosts",
"status": "mediated",
"operations": [
"network.hosts.resolve"
],
"reason": "Общий bounded resolveNetworkHosts: явный global grant и network-write как в REST, IPv4/DNS/IDN validation, IPv6 literal без DNS как unsupported, дедупликация, TTL/cache/pending/deadline caps, stage access/cancel fences и различение manager resolver от RouterOS/path proof."
},
{
"method": "POST",
"path": "/api/recursive-routes/revisions/:id/restore",
"status": "mediated",
"operations": [
"routing.recursive.revision.restore"
],
"reason": "Общий applyRecursiveToServer/executeRecursiveApply с REST: scoped revision/fingerprint, максимум 50 маршрутов, effective properties, зависимости фильтров/таблиц/интерфейсов, полный бюджет create+delete+metadata и read-back native/revision."
},
{
"method": "POST",
"path": "/api/scheduler/jobs/:jobKey/run-now",
"status": "mediated",
"operations": [
"scheduler.run"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/scheduler/refresh",
"status": "mediated",
"operations": [
"scheduler.refresh"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/servers",
"status": "mediated",
"operations": [
"servers.create"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/servers-api-ping/collect-now",
"status": "mediated",
"operations": [
"servers.api-ping.collect"
],
"reason": "Общий полный manual executor REST/MCP: все включённые устройства, samples/partition maintenance/settings и отложенный глобальный alert engine. GLOBAL + весь каталог, человеческий план, явный skipped при busy, audit/idempotency и no replay; SQL/HTTP приёмка пройдена без реальных уведомлений."
},
{
"method": "POST",
"path": "/api/servers/:id/containers/remove",
"status": "mediated",
"operations": [
"containers.remove"
],
"reason": "Общий removeContainer/removeStoppedContainer с REST: fresh stopped-only, идентичность конфигурации/интерфейса, защиты родителя и подтверждение удаления. Native delete alias использует тот же план."
},
{
"method": "POST",
"path": "/api/servers/:id/containers/restart",
"status": "mediated",
"operations": [
"containers.restart"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/servers/:id/containers/start",
"status": "mediated",
"operations": [
"containers.start"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/servers/:id/containers/stop",
"status": "mediated",
"operations": [
"containers.stop"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/servers/:id/exec",
"status": "mediated",
"operations": [
"servers.terminal.read"
],
"reason": "Общий REST/MCP allowlist терминальной диагностики: 15 типизированных сценариев, все aliases и форматирование, прежнее servers:write право, полный scope/epoch до credentials, bounded transport/output и отзыв между запросами. SQL/REST parity подтверждена; произвольные CLI-команды не принимаются."
},
{
"method": "POST",
"path": "/api/servers/:id/ospf/optimize",
"status": "mediated",
"operations": [
"routing.ospf.application.optimize"
],
"reason": "Общий legacy REST ranker/apply; human-only полный каталог, private source/prefix proofs, native dispatch/read-back и отдельное восстановление."
},
{
"method": "POST",
"path": "/api/servers/:id/ospf/optimize/preview",
"status": "mediated",
"operations": [
"routing.ospf.application.preview"
],
"reason": "Общий REST/MCP reader рейтинга приложения; peer scope и probes отсекаются SQL до чтения, latest aggregate traffic требует известной дельты. MCP разделяет modeled/observed, ограничивает страницы/peers, повторно проверяет доступ/источник перед GET/POST и отменяет HTTP при остановке. Preview не создаёт план и не заменяет строгий family/VRF-aware optimizer."
},
{
"method": "POST",
"path": "/api/servers/:id/poll",
"status": "mediated",
"operations": [
"servers.poll"
],
"reason": "Полный human-approved servers.poll: исходный sealed допуск и actual operation ID, общий снимок/обслуживание истории, quota-bound durable журнал, сохранённая квитанция без повтора native. UI REST-обработчик сохранён; retained admission limits MCP применяются отдельно."
},
{
"method": "POST",
"path": "/api/servers/:id/probes/run",
"status": "mediated",
"operations": [
"servers.probes.run"
],
"reason": "Общий v2 service executor для всех6 диагностик: REST JWT/local и MCP human plan, durable stages/receipts, общие квоты, текущие права, отмена и bounded retention; публичная регистрация и SQL/HTTP/DNS приёмка проверены."
},
{
"method": "POST",
"path": "/api/servers/test-connection",
"status": "mediated",
"operations": [
"servers.test-connection"
],
"reason": "Общий REST/MCP сервис принят SQL/HTTP: права и human approval, private source fences, bounded transport, точная семантика, partial/unknown без повторов; сетевой forwarding не заявляется."
},
{
"method": "POST",
"path": "/api/system/database/restore",
"status": "mediated",
"operations": [
"database.restore"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/traffic/collect-now",
"status": "mediated",
"operations": [
"traffic.collect"
],
"reason": "Полный общий REST/MCP executor: GLOBAL и весь каталог, человеческий план, штатные samples/settings/locks и глобальный alert hook. SQL/HTTP приёмка на одноразовой БД/localhost; busy/partial/unknown без автоматического повтора, квитанция не подтверждает доставку уведомлений."
},
{
"method": "POST",
"path": "/api/traffic/flow-overlay",
"status": "mediated",
"operations": [
"traffic.flow.overlay.apply"
],
"reason": "Общий сервис REST/MCP, scoped источники и защиты, человеческое подтверждение, intent/read-back или безопасный human-only artifact, SQL/HTTP-приёмка и сверка без replay."
},
{
"method": "POST",
"path": "/api/traffic/flow/host-reconcile",
"status": "mediated",
"operations": [
"netflow.host.reconcile"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/traffic/flow/overlay",
"status": "mediated",
"operations": [
"traffic.flow.overlay.apply"
],
"reason": "Общий сервис REST/MCP, scoped источники и защиты, человеческое подтверждение, intent/read-back или безопасный human-only artifact, SQL/HTTP-приёмка и сверка без replay."
},
{
"method": "POST",
"path": "/api/traffic/flow/purge",
"status": "mediated",
"operations": [
"traffic.flow.purge"
],
"reason": "Полный общий REST/MCP сценарий: human/global scope, acknowledged drain всех retiring workers, транзакционная очистка, сохранение настроек/ключей/peers, утверждённый partition inventory/budget, journal/restart, SQL/HTTP-приёмка и unknown без replay."
},
{
"method": "POST",
"path": "/api/traffic/flow/rebuild-facts",
"status": "mediated",
"operations": [
"traffic.flow.facts.rebuild"
],
"reason": "Общий REST/MCP rebuild: обязательное human/global/full-server подтверждение, строгий drain существующих writers, атомарные кубы/событие/квитанция, source/protection guards и отдельная read-only сверка без replay. Принят на настоящей временной SQL-базе через MCP и JWT REST; живой worker отдельно не запускался."
},
{
"method": "POST",
"path": "/api/traffic/flow/settings/generate-keys",
"status": "mediated",
"operations": [
"traffic.flow.settings.generate-keys"
],
"reason": "Shared full-config CAS, single-use durable receipt, human approval; public key only, no collector or host apply"
},
{
"method": "POST",
"path": "/api/uptime/collect-now",
"status": "mediated",
"operations": [
"uptime.collect"
],
"reason": "Полный общий REST/MCP executor: GLOBAL и весь каталог, человеческий план, штатные samples/settings/locks и глобальный alert hook. SQL/HTTP приёмка на одноразовой БД/localhost; busy/partial/unknown без автоматического повтора, квитанция не подтверждает доставку уведомлений."
},
{
"method": "POST",
"path": "/api/uptime/probes/collect-group",
"status": "mediated",
"operations": [
"uptime.ping.group.collect"
],
"reason": "Полный общий REST/MCP executor: GLOBAL и весь каталог, человеческий план, штатные samples/settings/locks и глобальный alert hook. SQL/HTTP приёмка на одноразовой БД/localhost; busy/partial/unknown без автоматического повтора, квитанция не подтверждает доставку уведомлений."
},
{
"method": "POST",
"path": "/api/uptime/speed-test",
"status": "mediated",
"operations": [
"uptime.speed.test"
],
"reason": "Обычный RouterOS bandwidth-test через общий speed-сервис: MCP проверяет оба server scope, человеческое подтверждение, срок и лимит нагрузки; общие блокировки, аудит и стандартная история. Без отдельного реестра узлов, ключей и Docker-окон; no replay при unknown."
},
{
"method": "POST",
"path": "/api/users",
"status": "mediated",
"operations": [
"users.create"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/users/:id/bindings",
"status": "mediated",
"operations": [
"users.binding_add"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "POST",
"path": "/api/wireguard/export",
"status": "mediated",
"operations": [
"network.wireguard.export"
],
"reason": "Общий REST/MCP export для rsc/conf/peer-conf: явный private-key opt-in, human approval, зашифрованный файл на 15 минут только владельцу через JWT; модель получает квитанцию. Полная SQL/HTTP-проверка форматов, обоих ID пира, source/grant/checkpoint и tamper; неоднозначное или невоспроизводимое состояние отклоняется."
},
{
"method": "POST",
"path": "/api/wireguard/import",
"status": "mediated",
"operations": [
"network.wireguard.import.preview",
"network.wireguard.import"
],
"reason": "Общий REST/MCP импорт .rsc/.conf: owner/purpose/server contentRef, скрытые ключи, disabled preparation и selective activation всех peers/address/interface, отдельные object refs и полный command budget, per-command durable intent/fence/read-back, prefix checkpoint, exact VERIFIED reconcile; partial/unknown без автоматического повтора или компенсации."
},
{
"method": "POST",
"path": "/api/wireguard/interfaces",
"status": "mediated",
"operations": [
"network.wireguard.interfaces.create"
],
"reason": "Общий сервис REST/MCP, scoped источники и защиты, человеческое подтверждение, intent/read-back или безопасный human-only artifact, SQL/HTTP-приёмка и сверка без replay."
},
{
"method": "POST",
"path": "/api/wireguard/peers",
"status": "mediated",
"operations": [
"network.wireguard.peers.create"
],
"reason": "Общий REST/MCP peer create и native alias: полная форма, существующий parent/dependencies, secret refs, staged disabled, per-command fences/read-back, exact verified checkpoint, partial/unknown без retry; SQL/HTTP проверены."
},
{
"method": "POST",
"path": "/api/wireguard/revisions/:id/restore",
"status": "mediated",
"operations": [
"config.wireguard.revisions.restore"
],
"reason": "Общий REST/MCP whole-section restore: строгая ревизия, encrypted desired keys, полный dependency inventory, staged disable, exact clears, per-command fences и read-back без replay."
},
{
"method": "POST",
"path": "/mcp",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/oauth/revoke",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "POST",
"path": "/oauth/token",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "PUT",
"path": "/api/alerts/rules",
"status": "mediated",
"operations": [
"alerts.replace"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/alerts/telegram",
"status": "mediated",
"operations": [
"alerts.telegram.update"
],
"reason": "Общий guarded REST/MCP selective-update сервис; полный global/server scope, человеческий план, owner/purpose secretRef или явное очищение, private source/reference proof, проверки перед записью и read-back. Сообщения не отправляются."
},
{
"method": "PUT",
"path": "/api/backups/schedule",
"status": "mediated",
"operations": [
"backups.schedule.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/backups/storage",
"status": "mediated",
"operations": [
"backups.storage.update"
],
"reason": "Общий REST updateBackupStorageSettings: глобальный человеческий план, полный каталог серверов/защиты, owner/destination-bound secretRef вместо literal secret, keyed credential proof, защита S3-архивов и занятости, полная проверка конфигурации/сохранённого ключа, partial при несовпадении и idempotency. Настройка не объявляется проверкой доступности S3."
},
{
"method": "PUT",
"path": "/api/certificates/acme-settings",
"status": "mediated",
"operations": [
"certificates.acme.update"
],
"reason": "Общий REST/MCP settings executor: owner/purpose secret refs, full global scope, human approval, bounded private SQL/source proof, CAS/read-back, verified exact receipt и no replay; SQL/HTTP проверены."
},
{
"method": "PUT",
"path": "/api/certificates/renew-settings",
"status": "mediated",
"operations": [
"certificates.renew.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/evobgp/settings",
"status": "mediated",
"operations": [
"evobgp.settings.update"
],
"reason": "Общий guarded writeEvoBgpSettings/schema; подтверждение человеком, URL-bound opaque secret вместо ключа, явное удаление ключа, fingerprint всех настроек и полного каталога, read-back включая ключ без его выдачи."
},
{
"method": "PUT",
"path": "/api/filters/rules",
"status": "mediated",
"operations": [
"filters.rules.replace"
],
"reason": "Общий guarded applyFiltersToServer: human approval, совместные filters/network/BGP права, HMAC источника и routing dependencies, server-wide protections, безопасный compiler, native read-back до metadata/revision, без удаления чужих правил и автоматического повтора."
},
{
"method": "PUT",
"path": "/api/firewall/address-lists",
"status": "mediated",
"operations": [
"firewall.addressLists.update"
],
"reason": "Общий REST/MCP address-list сервис: scoped ID, human plan, консервативные защиты зависимых правил, полный stable proof, отдельная проверка expiry window, shared locks/read-back/revision/no retry."
},
{
"method": "PUT",
"path": "/api/firewall/rules",
"status": "mediated",
"operations": [
"firewall.rules.update"
],
"reason": "Общий REST/MCP сервис формы Firewall: человеческий sealed plan, scoped native ID, полный matcher/order proof, статическая цель, shared locks, read-back, отдельный статус ревизии и отсутствие retry."
},
{
"method": "PUT",
"path": "/api/geoip",
"status": "mediated",
"operations": [
"geoip.settings.update"
],
"reason": "Общий schema/updateGeoipSettings и refreshScheduler; защищённый human-approved план, полный каталог зависимостей, fingerprint конфигурации без observer metadata и read-back сохранённых полей."
},
{
"method": "PUT",
"path": "/api/internet-path/settings",
"status": "mediated",
"operations": [
"internet-path.settings.update"
],
"reason": "Общий сервис настроек коллектора; полная область серверов, защита зависимостей, подтверждённый план и проверка сохранения."
},
{
"method": "PUT",
"path": "/api/logs/settings",
"status": "mediated",
"operations": [
"logs.settings.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/mcp/connections/:id",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "PUT",
"path": "/api/mcp/settings",
"status": "excluded",
"operations": [],
"reason": "Управление самим MCP, транспорт или машинная авторизация: отдельного AI-инструмента нет."
},
{
"method": "PUT",
"path": "/api/recursive-routes",
"status": "mediated",
"operations": [
"routing.recursive.routes.replace"
],
"reason": "Общий applyRecursiveToServer для полного apply/copy набора до 50 строк: человеческий план, стоимость create+delete+metadata, sealed native/DB/filter proof, устойчивые ID, проверка зависимостей и каждого нового/удаляемого маршрута, независимый native/cache/revision read-back и отсутствие повторов при partial/unknown."
},
{
"method": "PUT",
"path": "/api/servers-api-ping/settings",
"status": "mediated",
"operations": [
"servers.api-ping.settings.update"
],
"reason": "Общий сервис настроек коллектора; полная область серверов, защита зависимостей, подтверждённый план и проверка сохранения."
},
{
"method": "PUT",
"path": "/api/servers/:id",
"status": "mediated",
"operations": [
"servers.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/traffic/flow/settings",
"status": "mediated",
"operations": [
"netflow.settings.update"
],
"reason": "Full 10-field shared CAS and fenced main/worker lifecycle, global store/RIPE scope, human approval and durable two-phase receipt; readiness separate"
},
{
"method": "PUT",
"path": "/api/traffic/settings",
"status": "mediated",
"operations": [
"traffic.settings.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/uptime/probes",
"status": "mediated",
"operations": [
"uptime.ping.probes.replace"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/uptime/settings",
"status": "mediated",
"operations": [
"uptime.settings.update"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
},
{
"method": "PUT",
"path": "/api/uptime/speed-probes",
"status": "mediated",
"operations": [
"uptime.speed.probes.replace"
],
"reason": "Типизированный MCP-адаптер этого сервисного сценария; применяются собственные scopes, лимиты, проверка зависимостей и подтверждение записи."
}
]
}