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

相关推荐
路很长OoO7 小时前
Flutter 插件开发实战:桥接原生 SDK
前端·flutter·harmonyos
大熊猫侯佩8 小时前
大内密探零零发之 iOS 密探神器 AI 大模型 MCP 服务开发记(下)
llm·ai编程·mcp
大熊猫侯佩8 小时前
大内密探零零发之 iOS 密探神器 AI 大模型 MCP 服务开发记(上)
llm·ai编程·mcp
下位子9 小时前
『AI 编程』用 Claude Code 从零到一开发全栈减脂追踪应用
前端·ai编程·claude
子昕9 小时前
Claude Code插件系统上线!AI编程的“App Store”时代来了
ai编程
Java中文社群9 小时前
n8n和在线免费体验蚂蚁万亿开源大模型Ling-1T!
aigc·ai编程
我有与与症11 小时前
从0使用Kuikly框架写一个小红书Demo-Day2
客户端
yaocheng的ai分身11 小时前
氛围编码革命进入下一阶段: Bolt v2
ai编程
我有与与症11 小时前
从0使用Kuikly框架写一个小红书Demo-Day1
客户端
三翼鸟数字化技术团队12 小时前
Flutter中的动效实现方式
flutter·动效