Start Debugging

MCP-сервер Dart и Flutter: одна команда, чтобы передать Claude Code запущенное приложение Flutter

В Dart 3.12 появился dart mcp-server, официальный MCP-мост к toolchain Dart и Flutter. Зарегистрируйте его один раз в Claude Code, Cursor или Codex CLI, и агент получит hot reload, поиск по pub.dev и интроспекцию виджетов в реальном времени без копирования URI DTD.

На Google I/O 2026 (19 и 20 мая) команда Dart анонсировала Dart 3.12 вместе с чем-то менее шумным, но более полезным изо дня в день: официальным dart mcp-server. Он входит в SDK начиная с Dart 3.9 и позволяет любому MCP-совместимому агенту разработки (Claude Code, Cursor, Gemini CLI, Codex CLI, GitHub Copilot в VS Code) управлять запущенным приложением Flutter, не заставляя вас снова и снова копировать URI Dart Tooling Daemon. Статус в официальной документации всё ещё “экспериментальный”, но путь установки стабилен между клиентами, и подключить сервер стоит уже сейчас.

Трение, которое он убирает, реально. Раньше просьба к агенту “поправь этот красный текст в дереве виджетов” означала: запустить приложение, открыть DevTools, скопировать URI подключения DTD, вставить его в подсказку инструмента и надеяться, что агент не потеряет его на следующем шаге. Теперь MCP-сервер сам находит DTD, а агент просто вызывает hot_reload.

Что сервер на самом деле предоставляет

Согласно документации MCP-сервера Dart и Flutter, инструменты разделены на четыре группы:

Каждый инструмент возвращает результаты, понимающие Dart. analyze_files возвращает те же диагностики, что и analysis server, а не результат регулярки по выводу компилятора. pub_search обращается к pub.dev с тем же скорингом, что и сайт. get_runtime_errors забирает живые исключения из работающего приложения, включая виджет, который их выбросил.

Подключение к Claude Code

Одна команда, из корня проекта Flutter:

claude mcp add --transport stdio dart -- dart mcp-server

Это регистрирует dart как stdio MCP-сервер в текущем workspace Claude Code. Сервер сам находит активный DTD от корня workspace, поэтому пока flutter run жив в другом терминале, hot_reload и take_screenshot автоматически становятся доступны.

Для Cursor добавьте это в .cursor/mcp.json:

{
  "mcpServers": {
    "dart": {
      "command": "dart",
      "args": ["mcp-server"]
    }
  }
}

Для Codex CLI в SDK всё ещё есть пробел в обнаружении roots на некоторых shell, поэтому передайте флаг fallback:

codex mcp add dart -- dart mcp-server --force-roots-fallback

Пользователям Copilot в VS Code ничего из этого не нужно. Поставьте dart.mcpServer: true в настройках (Dart Code v3.116 или новее), и расширение само подключит тот же бинарник.

Одна ловушка, о которой стоит знать

MCP-сервер привязан к конкретному SDK Dart. Если у вас установлено несколько каналов Flutter и агент подхватывает master, пока проект на stable, вызовы инструментов будут проходить, но разговаривать будут с не тем analysis server, и вы получите путаные ответы вида “символ не найден” для кода, который компилируется без проблем. Зафиксируйте бинарник явно на машинах с несколькими каналами:

claude mcp add --transport stdio dart -- /path/to/flutter/bin/dart mcp-server

Вторая ловушка: сервер ожидает единственный корень workspace. Если вы открываете melos-монорепо и позволяете агенту перемещаться между пакетами, hot reload по-прежнему будет нацелен на то приложение, которое вы запустили через flutter run. Передайте --force-roots-fallback, чтобы сервер использовал roots, объявленные клиентом, а не гадал сам.

Полный changelog смотрите в нашем предыдущем посте о приватных именованных параметрах Dart 3.12 и инициализирующих формалах. MCP-сервер — самая тихая часть этого релиза и, вероятно, та, что сильнее всего меняет ваш ежедневный loop.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад