VFLIN
ВойтиСкачать

docs · docs/20-control-plane/MCP_TOOL_CATALOG.md · перевод от 2026-09-12 · с английской ревизии a32d81c83d2d

Каталог MCP-инструментов

каждый MCP-инструмент, метод Local API за ним, его уровень опасности

Назначение: конкретный список инструментов MCP, каждый из которых отображается в метод Local API. Это поверхность, обращённая к агенту. Колонка опасности задаёт требуемый режим политики.

Опасность: 🟢 чтение и безопасное · 🟡 изменяющее, режим normal · 🔴 опасное (режим power/danger + аудит).

Профили

Инструмент Отображается в Опасность
vflin_profile_list profile.list 🟢
vflin_profile_get profile.get 🟢
vflin_profile_create profile.create 🟡
vflin_profile_start profile.start 🟡
vflin_profile_stop profile.stop 🟡
vflin_profile_delete profile.delete (hard=🔴) 🟡/🔴

Отпечаток

| vflin_fingerprint_generate | fingerprint.generate | 🟢 | | vflin_fingerprint_validate | fingerprint.validate | 🟢 | | vflin_fingerprint_presets | fingerprint.catalog.list | 🟢 | | vflin_fingerprint_generate_from_host | fingerprint.generateFromHost | 🟢 | | vflin_node_characterize | node.characterize | 🟢 |

Прокси

| vflin_proxy_list | proxy.list | 🟢 | | vflin_proxy_test | proxy.test | 🟢 | | vflin_proxy_bind | proxy.bind | 🟡 |

Автоматизация

| vflin_automation_run | automation.run | 🟡 | | vflin_automation_status | automation.status | 🟢 | | vflin_automation_cancel | automation.cancel | 🟡 | | vflin_automation_group_schedule | automation.group.schedule | 🟡 |

Синхронизация

| vflin_sync_status | sync.status | 🟢 | | vflin_sync_push / vflin_sync_pull | sync.push/pull | 🟡 |

Облачный аккаунт (A90 — паритет с кабинетом на сайте)

Инструмент Отображается в Опасность
vflin_cloud_account_get cloud.account.get 🟢
vflin_cloud_account_change_password cloud.account.changePassword (верификаторы выводятся в демоне, ADR-0019 C1) 🟡 (power)
vflin_cloud_twofa_enroll / vflin_cloud_twofa_activate cloud.twofa.enroll / activate 🟡 (power)
vflin_cloud_twofa_disable cloud.twofa.disable 🔴
vflin_cloud_devices_list cloud.devices.list 🟢
vflin_cloud_devices_revoke cloud.devices.revoke 🔴
vflin_cloud_compare cloud.compare (только чтение: same / localNewer / cloudNewer / diverged / localOnly) 🟢
vflin_settings_get / vflin_settings_set settings.get / settings.set (cloudUrl, deviceName) 🟢 / 🟡 (power)

Ядро и система

| vflin_core_list | core.list | 🟢 | | vflin_core_diagnose | core.diagnose | 🟢 | | vflin_system_health | system.health | 🟢 | | vflin_log_tail | log.tail | 🟢 |

Опасные (🔴 — режим power/danger, всегда с аудитом)

Инструмент Отображается в Чем опасен
vflin_vault_read vault.get открывает секреты
vflin_cookies_export vault.export(scope=cookies) материал сессии, который можно унести
vflin_profile_hard_delete profile.delete{hard} необратимо
vflin_profile_mass_update пакетные profile.* широкий радиус поражения
vflin_browser_eval CDP ядра Runtime.evaluate произвольный код на странице
vflin_migration_import импортёр принимает недоверенные внешние данные
vflin_profile_cdp_attach profile.cdp.attach отдаёт CDP живого профиля коду, которого демон не видит, — один клиент, через отзываемую дверь (A89, ADR-0038)
vflin_cloud_twofa_disable cloud.twofa.disable убирает фактор из аккаунта (A90)
vflin_cloud_devices_revoke cloud.devices.revoke выводит из аккаунта другое устройство — или это самое, и тогда оно теряет свою сессию (A90)

CDP через демон (A89, ADR-0038 Accepted)

Ядро профиля говорит по CDP через трубу, которую держит только демон, — по умолчанию ничего на диске, никакого порта. Агенту, которому нужен сырой CDP на запущенном профиле, надо вызвать vflin_profile_cdp_attach (опасно: VFLIN_MCP_MODE=trusted, fail-closed), и он получит {wsEndpoint, expiresAt, brokered} — loopback ws:// для ОДНОГО клиента, отзываемый через vflin_profile_cdp_detach, по своему TTL (по умолчанию 15 минут) или остановкой профиля; vflin_profile_cdp_sessions (normal) — зелёное чтение, которое говорит, что открыто. Профиль, которому оператор поставил cdpTransport: port, отвечает собственным публичным эндпоинтом с brokered:false. Измерено: второму клиенту в одну дверь отказывают сразу; после detach эндпоинт отказывает в подключении.

Правила

  • 🔴-инструменты отказывают, пока режим политики сессии не ≥ требуемого; отказ объясняет, как повысить его.
  • Каждый вызов 🟡/🔴 пишет запись в Action Log (инструмент, краткое описание аргументов, режим, результат).
  • Новые инструменты добавляются сюда только тогда, когда за ними есть метод Local API.

Открытые вопросы

Отгружается ли vflin_browser_eval в v1 вообще или остаётся за флагом сборки → SECURITY_POLICY.md / OPEN_QUESTIONS.md.

Сессии (Feature c — ADR-0034)

Написанных вручную инструментов для сессий нет, и быть не должно: tools/list целиком строится из сгенерированной таблицы SURFACE, поэтому все пять операций сессий появляются сами как vflin_profile_session_{list,get,set,clear} и vflin_session_recipe_list, неся режим и уровень опасности из самого контракта. MCP — единственная поверхность, которая структурно не может разойтись с контрактом.

Шлюз опасности, как он работает сегодня:

Инструмент Опасность Что нужно
vflin_session_recipe_list, vflin_profile_session_list, vflin_profile_session_get 🟢 только чтение
vflin_profile_session_set, vflin_profile_session_clear 🔴 VFLIN_MCP_MODE=trusted; отказ до любого вызова демона

Одно, что автор агента обязан знать: vflin_profile_start помечен 🟡, но запуск профиля, чей автоматический вход ещё не выполнялся, отправил бы третьей стороне сохранённые учётные данные и код 2FA. Поэтому демон вычисляет требуемый режим из привязок профиля, а не из маршрута, и ниже danger отказывает с SESSION_LOGIN_MODE_REQUIRED. Подстановки cookies это не касается: восстановление собственного сохранённого состояния профиля остаётся запуском в режиме normal.

И честный предел этой защиты: режим сессии MCP действует на весь процесс, поэтому сервер, запущенный с VFLIN_MCP_MODE=trusted, шлёт x-vflin-mode: danger на каждый вызов — включая 🟡-запуск. Значит, для доверенного агента шлюз не срабатывает никогда. Это согласуется с тем, что режим привязан к сессии (SECURITY_POLICY §1), и такой агент всё равно мог бы вызвать vflin_profile_session_set, так что новых прав это не даёт, — но не читайте шлюз как «доверенный агент всё равно не сможет запустить вход по учётным данным». Он защищает агента ПО УМОЛЧАНИЮ (только чтение / normal), а именно им скорее всего и управляет недоверенная подсказка.