Код как интерфейс для LLM умер: да здравствуют json-render и MCP Apps
Чат как интерфейс перестал справляться: на запрос "покажи продажи за квартал" модель выдает стену цифр, а не интерактивный дашборд. Казалось бы, решение — попросить LLM сгенерировать React-компонент. Но на практике это провал: один и тот же промпт сегодня дает useState, завтра — Zustand, а сгенерированный JSX — это исполняемый код, открывающий дверь для инъекций. В мае 2025 Invariant Labs показали, как вредоносный issue на GitHub через MCP-интеграцию сливал данные из приватных репозиториев.
Ключевая проблема — нет инкрементальности: на запрос "добавь фильтр" модель регенерирует весь компонент, теряя состояние и ввод. Вывод: код — плохой интерфейс между LLM и приложением. Нужен промежуточный декларативный слой.
Статья описывает два таких слоя: json-render (отвечает за то, что и как рендерить из декларативной спецификации) и MCP Apps (доставляет этот интерфейс в ассистент). По официальному анонсу MCP Apps поддерживаются в Claude, Goose, VS Code Insiders и ChatGPT; json-render заявляет интеграцию с Claude, ChatGPT, Cursor и VS Code. Автор прогоняет сквозной пример — дашборд продаж, который пользователь докручивает репликами "добавь разбивку по регионам", "сравни с прошлым годом", "убери блок" — без пересборок и потери состояния.