ADR 0043: Паритет восстановления MCP-транспорта (человек ↔ агент) и границы хоста¶
Статус: Proposed
Дата: 2026-04-13
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0008 | контракты MCP |
| 0016 | ACP ортогонально MCP |
| 0002 | Единый слой состояния отладки для человека и агента |
Вне ADR¶
| Документ | Роль |
|---|---|
| north-star-cursor-mcp-cascade-workbench-v1.md | Cursor + MCP + Cascade |
| MCP-PROTOCOL.md | транспорт stdio, видимость MCP |
Контекст¶
Северная звезда продукта предполагает рабочий контур Cursor (или аналог) + MCP + CascadeIDE: агент вызывает инструменты IDE и видит согласованное состояние с человеком (north-star § критерии).
Продуктовая логика: MCP как «способ быть в мире»¶
Для агента MCP — не фоновая деталь, а интерфейс к действию: без живого канала к тулам он не «просто без удобства», а ограничен в том же роде, что человек без руки — только у человека обычно есть обходы: другой инструмент, перезапуск, настройки, «протез» (замена пути к цели). В экосистеме хоста часть серверов может быть встроенной, большинство — внешние процессы; человек-оператор при сбое может починить любое упавшее звено в своей цепочке.
Агент в типичном чате не выбирает хост и не может перезапустить себе инструмент: он шлёт вызовы в тот же транспорт. Если MCP мёртв или завис, агент не имеет того класса самопомощи, который у человека считается нормой. Это не педантичная жалоба на UX — структурная асимметрия операторности: человек может восстановить или обойти цепочку, агент — часто нет, хотя от него ждут того же рода результатов. Такая ситуация противоречит интуиции паритета «мы в одной работе» и заслуживает явного признания в дизайне продукта и хоста, а не сведения к «ну перезапусти MCP руками».
Технически: где проходит граница¶
MCP-серверы у хоста — это процессы: обмен по stdio с дочерним процессом CascadeIDE с --mcp-stdio, плюс другие настроенные у хоста MCP-процессы (например отдельный сервер с тулами Roslyn для C#, сервер отладки .NET). Это не встроенный Roslyn/DAP внутри окна CascadeIDE — у каждого такого процесса свой транспорт и жизненный цикл, которым управляет хост, а не IDE. Ограничение агента следует из роли ProcessHost, не из «не захотели сделать» в одном репозитории.
Связь с 0002: там — паритет состояния отладки в IDE; здесь — другая ось: доступность канала MCP и восстановление после сбоя.
Решение (направление, без обязательства сроков)¶
- Явно разделить уровни:
- Уровень A — хост (Cursor и аналоги): запуск, остановка, перезапуск любого MCP-сервера, который хост держит в своей конфигурации. CascadeIDE не подменяет хост и не обещает произвольный рестарт соседних серверов из процесса IDE.
- Уровень B — процесс CascadeIDE: в перспективе — контролируемое восстановление собственной роли MCP-сервера (например повторная инициализация stdio-сессии внутри поддерживаемой модели), только если это безопасно для UI и не ломает контракт 0008. Отдельные итерации дизайна и реализации.
- Уровень C — наблюдаемость: расширять диагностику «транспорт жив / команда не дошла / IDE не в режиме MCP» так, чтобы агент и человек опирались на одни и те же сигналы (снимок состояния, явные ошибки в ответах тулами), в духе уже описанного в MCP-PROTOCOL.md § «Видимость MCP».
- Зафиксировать цель паритета: где технически возможно, восстановление или явная деградация канала должно быть доступно и через действия человека в хосте, и через поддерживаемый контракт (тулы IDE, команды хоста, или документированный сценарий), а не только «напиши пользователю перезапусти MCP».
- ACP: внешний агент по 0016 остаётся ортогонален этому ADR; восстановление MCP-транспорта к IDE не смешивается с транспортом ACP, кроме общего требования ясных ошибок и наблюдаемости.
Последствия¶
- Появление осмысленных задач в бэклоге: health MCP в снимках IDE, при необходимости узкие команды «переподнять свой серверный режим», согласование с хостом — отдельно.
- Зависимость от roadmap Cursor (или другого клиента) для полного паритета «агент перезапускает любой MCP» — честно отражать в документации и north-star, без обещания «всё в одном репо IDE».
Отклонённые альтернативы¶
- Произвольный рестарт чужих MCP-процессов из CascadeIDE без участия хоста — отклонено: нарушает границу ProcessHost, небезопасно и непереносимо.
- Молчать о разрыве и считать это только проблемой пользователя — отклонено как противоречащее north-star про «снять трение» перехода из Cursor.