Stories

Detail Return Return

Dart MCP翻車了!3.9.0版本無法運行,這個坑你踩過嗎? - Stories Detail

哈嘍,我是老劉

你敢信嗎?

開發者在升級Dart 3.9.0後,集體"翻車"了!

Google IO大會宣傳的dart mcp server功能居然不能用。

使用AI助手調用dart mcp server功能,會返回如下錯誤:

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默認的執行命令添加一個參數:

flutter run --print-dtd

注意這裏的關鍵參數是--print-dtd,不是普通的flutter run

運行後,終端會輸出類似這樣的信息:

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學習的知識地圖。
覆蓋90%開發場景的《Flutter開發手冊》

Add a new Comments

Some HTML is okay.