Попробую запостить тут пост - размышления :)
Наконец-то написал небольшой mcp сервер для flutter до относительно стабильного состояния.
Самым интересным было понять как работать с dart vm и devtools extensions - можно ли вообще обращаться к ним со стороннего сервера и что можно использовать для агента (например в cursor).
Так как на момент начала dart mcp сервера стабильного не было в pub.dev, решил mcp server писать на typescript.
Что получилось (на данный момент)
Архитектура сообщений (использовал везде JSON RPC 2, так как это по умолчанию протокол общения с Dart VM):
MCP server <-> Dart VM
Из плюсов - прямой доступ, проще работать
Из минусов - не все методы работали (в основном связанные с другими extensions), все структуры нужно писать с нуляMCP server (TS) <-> Forwarding Server (TS) <-> Devtools Extension (Dart) <-> Dart VM
Из плюсов: в devtools можно использовать готовые библиотеки для работы с dart vm. Все методы работают как должны. Можно очень просто дебажить все методы, так как есть прямой доступ к dart vm, и не нужно работать через MCP inspector.
Все ошибки мониторятся (слушаются через Dart VM) в Devtools Extension.
Из минусов: сложность запуска: нужно обязательно запускать Forwarding Server, Devtools Extension и проверять что всё работает.
Почему так: напрямую MCP server связать с Devtools Extension пока не удалось, идея через регистрацию методов в Dart VM, чтобы Dart VM выступала как forwarding server пока тоже не сработала.
Изначально, чтобы разобраться как работает, подключил все методы, доступные в dart vm, но со временем пришел только к двум-трем основным:
- get_app_errors - чтобы мониторить ошибки, появляющиеся в Dart VM. Использовал только краткое описание, чтобы было сложно переполнить context.
- hot_reload - чтобы агент мог сделать hot reload и ошибки записались в Devtools Extension.