Dart MCP翻车了!3.9.0版本无法运行,这个坑你踩过吗?

哈喽,我是老刘

你敢信吗?

开发者在升级Dart 3.9.0后,集体"翻车"了!

Google IO大会宣传的dart mcp server功能居然不能用。

使用AI助手调用dart mcp server功能,会返回如下错误:

swift 复制代码
It seems you need to update your Dart SDK. The required version is 3.9.0-163.0.dev or greater.

什么鬼?

我去github上看了下,3.9.0应该是这个系列最终的正式版,理论上版本号比3.9.0-163.0.dev要高。

正好,在github上看到还有最新的3.10.0版本,那就升级到3.10.0试试。

还是不行!

这波操作真的是把程序员们整不会了。

好家伙,这好像没经过测试就发布了。

如果你也踩过这个坑,那你绝对不是一个人在战斗。

今天老刘就来给大家扒一扒,这个让无数开发者抓狂的bug到底是怎么回事,以及如何优雅地解决它。

问题原因分析

说实话,刚开始遇到这个问题的时候,我也是一脸懵逼。

明明版本号都对了,为什么还是报错?

深入研究了GitHub上的issue后,我终于找到了问题的根源。

核心问题:URI类型搞混了!

原来,当我们给LLM传递的URI实际上是一个VM(虚拟机)服务URI,而不是DTD(Dart Tooling Daemon)URI时,就会出现这个诡异的错误。

什么意思呢?

简单来说,Dart的开发工具链中有两套不同的服务体系:

VM Service URI: 这是Dart虚拟机提供的调试接口,主要用于性能分析、内存监控等底层操作。

DTD URI: 这是Dart Tooling Daemon提供的工具链接口,专门为IDE和外部工具设计的高级API。

AI助手调用dart mcp需要的是DTD URI,但是LLM在默认情况下拿不到DTD Uri,只能获取到VM Service URI。

这就像你拿着银行卡去刷地铁,卡是真的,钱也够,但就是刷不了。

理论上来说这是Dart工具链的一个bug,没有把整个环节打通。

老刘个人猜测是为了赶发布时间没有充分测试。

更深层的问题在于错误提示的逻辑缺陷

在不同的异常处理流程下没有从底层反馈并捕获正确的异常信息,给使用者有效的提示。

所以老刘自己浪费了不少时间去测试3.10版本,但是其实这个问题和版本没有任何关系。

别慌!一招让Dart MCP重新为你打工

既然知道了问题的根源,解决方案其实很简单。

核心思路就是:获取DTD URI,然后传递给LLM

具体操作步骤如下:

第一步:启动Flutter项目并获取DTD URI

给Flutter默认的执行命令添加一个参数:

bash 复制代码
flutter run --print-dtd

注意这里的关键参数是--print-dtd,不是普通的flutter run

运行后,终端会输出类似这样的信息:

csharp 复制代码
A Dart VM Service on sdk gphone64 x86 64 is available at: http://127.0.0.1:13876/2I5k4Otig48=/
The Dart Tooling Daemon is available at: ws://127.0.0.1:13879/IkY5qdOwSQ0=

The Flutter DevTools debugger and profiler on sdk gphone64 x86 64 is available at:
http://127.0.0.1:9101?uri=http://127.0.0.1:13876/2I5k4Otig48=/

这个"ws://..."就是真正的DTD Uri了。

第二步:让LLM读取正确的Uri

这里要注意,我们需要的是DTD URI,也就是ws://127.0.0.1:9394/ws这个地址。

不要搞混了Dev Tools URL,那个是给浏览器用的。

另外这里也不需要手工的给LLM复制粘贴,只要在提示词中告诉LLM从正确的位置获取DTD URI,然后我们试一下。

看到已经成功连接到MCP了。

甚至老刘测试过,即使不加任何提示词,只要Flutter项目编译过程中打印出DTD URI,LLM大概率就会自动读取到正确的URI。

第三步:让Dart MCP工作

可以直接要求LLM获取当前的组件树,效果如下:

当然你也可以做更多的事情,比如让LLM基于这个mcp进行代码调试等等。

总结

说实话我觉得这个bug是Dart工具链的一个设计缺陷,没有从底层反馈并捕获正确的异常信息,给使用者有效的提示。

或者说是发布的太仓促,没有经过充分的测试,导致这个问题暴露出来。

好了,本文算是帮大家扫清一个障碍,下一篇文章会系统的介绍Dart MCP Server的使用方法。

如果看到这里的同学对客户端开发或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。 私信免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。 可以作为Flutter学习的知识地图。

------------ laoliu_dev

相关推荐
倔强的石头_6 小时前
不想每次都从头解释:我用 Doubao-Seed-Evolving 做了一个「稿件接力站」
ai编程
GitLqr7 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
世人万千丶8 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
大模型码小白8 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
-XWB-9 小时前
【LLM】Agent Planning 完全指南:8 种纯 LLM 范式 + 8 种混合规划模式详解(二)
人工智能·经验分享·aigc·学习方法·ai编程
沉默王二10 小时前
腾讯一面,我霸气反问:“你说你们在做Agent项目,说说 SubAgent、Plan 模式、Skill 调用这些你们都是怎么做的?”面试官一直在擦汗。。
面试·agent·ai编程
kyriewen10 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
神奇霸王龙13 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
z1234567898613 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
GeekArch14 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程