Назначение: конкретный список инструментов 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), а именно им скорее всего и управляет недоверенная
подсказка.