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

相关推荐
RainbowSea4 小时前
4. LangChain4j 模型参数配置超详细说明
java·langchain·ai编程
RainbowSea4 小时前
3. LangChain4j + 低阶 和 高阶 API的详细说明
java·llm·ai编程
ideal树叶5 小时前
flutter 中 的 关键字
flutter
量子位7 小时前
10年前押中英伟达:这位复旦学霸如何用AI Agent重新定义投资
ai编程
量子位7 小时前
Nano banana手办玩法火爆出圈!无需抽卡,效果惊了(°o°)
人工智能·ai编程
世界不及妳微笑9 小时前
Flutter 记录应用授权登录踩坑之旅
flutter
孟健12 小时前
AI 出海应用存储怎么选?我踩过的坑,你别再踩了
ai编程
bug菌13 小时前
🤔还在为代码调试熬夜?字节TRAE如何让我的开发效率翻三倍的神操作!
aigc·ai编程·trae