參與貢獻

編輯此文件

翻譯文件,或在您的電腦上開啟完整專案。

在您選擇提交成果之前,不會發布任何內容。

LLM 控制(MCP)

讓 LLM 代理透過模型上下文協定測試及控制您的應用程式

Wails v3 內建模型上下文協定(MCP)伺服器,讓 LLM 代理(例如 Claude Code、IDE 助理或任何 MCP 用戶端)能檢查、測試及操控執行中的 Wails 應用程式。

若要自動化專案生命週期,請使用獨立的wails3 mcp CLI 伺服器。它可讓代理檢查及初始化專案、執行診斷、啟動建置與開發工作、產生繫結、執行具名的 Taskfile 工作,以及擷取有界限的工作輸出。CLI 伺服器預設僅限存取目前目錄,且不會開放任意 Shell 指令執行功能。如需傳輸、驗證及工具的詳細資訊,請參閱CLI MCP 文件。

啟用後,連線至您應用程式的代理可以:

  • 列出及控制視窗 — 大小、位置、焦點、全螢幕、開發人員工具、重新載入等
  • 檢查 DOM — 查詢元素、取得 HTML、擷取結構快照
  • 執行 JavaScript — 在任何視窗內執行任意程式碼並取得結果
  • 模擬使用者輸入 — 以螢幕動畫游標呈現滑鼠移動、點擊、拖曳及捲動,讓您可以觀看代理的操作過程
  • 輸入文字及按鍵 — 產生真實的逐字元事件,並可搭配 React 受控輸入元件使用
  • 呼叫已繫結的 Go 方法,以及發出或等待應用程式事件

運作方式

只有在使用mcp建置標籤時,MCP 伺服器才會編譯至您的應用程式中。若未使用該標籤,伺服器程式碼將完全不會出現在二進位檔中 — 不會產生執行階段負擔、不會開啟任何連接埠,也不會增加攻擊面。

使用該標籤時,伺服器會在App.Run()內自動啟動,預設繫結至127.0.0.1:9099,並將其端點寫入記錄。不需要任何使用者程式碼。

教學課程

步驟1 — 撰寫一般的 Wails 應用程式

MCP 不需要匯入套件或註冊。請依平常的方式建立應用程式:

main.go
go
package main

import (
    "embed"
    "log"

    "github.com/wailsapp/wails/v3/pkg/application"
)

//go:embed assets
var assets embed.FS

func main() {
    app := application.New(application.Options{
        Name: "My App",
        Assets: application.AssetOptions{
            Handler: application.BundledAssetFileServer(assets),
        },
    })

    app.Window.NewWithOptions(application.WebviewWindowOptions{
        Title: "My App",
        Width: 1024, Height: 768,
    })

    if err := app.Run(); err != nil {
        log.Fatal(err)
    }
}

步驟2 — 使用mcp標籤建置或執行

設定WAILS_MCP=1後,Wails CLI 會自動為您加入mcp標籤:

shell
# Development
WAILS_MCP=1 wails3 dev

# Production build
WAILS_MCP=1 wails3 build

應用程式啟動時會記錄 MCP 端點:

text
INFO MCP server started. Connect MCP clients using the streamable HTTP transport.
     url=http://127.0.0.1:9099/mcp

步驟3 — 連線用戶端

此伺服器採用MCP 可串流 HTTP 傳輸。您可以使用任何相容 MCP 的用戶端連線。

shell
claude mcp add --transport http my-app http://127.0.0.1:9099/mcp

接著,請要求 Claude 與您的應用程式互動:

text
Click the "Submit" button, then verify a success toast appears.

步驟4 — 執行測試工作階段

要求代理操作您的應用程式。以下是一些提示詞範例:

text
Take a DOM snapshot of the main window.
text
Click the "Add item" button, type "Hello world" in the input field,
then press Enter and verify the item appears in the list.
text
Call the bound method main.GreetService.Greet with argument ["World"]
and return the result.
text
Wait for the event "save:complete" while clicking the Save button.

設定

所有設定皆透過環境變數完成,不需要變更程式碼。

環境變數 預設值 說明
WAILS_MCP (未設定) 使用 Wails CLI 時,設為1、true、on或yes,即可自動加入mcp建置標籤。
WAILS_MCP_HOST 127.0.0.1 要繫結的網路介面。繫結至非回送介面時需要WAILS_MCP_TOKEN。
WAILS_MCP_TOKEN 未設定 回送介面可選用持有人權杖;其他繫結位址則必須使用。用戶端傳送Authorization: Bearer <token>。
WAILS_MCP_PORT 9099 要接聽的連接埠。設為0即可隨機指派可用連接埠(會顯示於記錄中)。
WAILS_MCP_TIMEOUT 30000 預設的 JS 執行逾時,單位為毫秒。
WAILS_MCP_HIDE_CURSOR (未設定) 設為1或true可停用動畫游標疊加層。

範例 — 自訂連接埠及60秒逾時:

shell
WAILS_MCP=1 WAILS_MCP_PORT=9200 WAILS_MCP_TIMEOUT=60000 wails3 dev

可用工具

工具 用途
app_info 應用程式資訊:平台、架構、所有視窗、MCP 端點
windows_list 列出所有視窗及其幾何資訊與狀態
window_control 聚焦、調整大小、移動、全螢幕、開發人員工具、重新載入、設定 URL 等(22個動作)
js_eval 在視窗中執行 JavaScript(非同步主體,使用return取得值)
dom_html 取得頁面或特定元素的 HTML
dom_query 使用 CSS 選擇器尋找元素 — 標籤、文字、邊界、可見性
screenshot_dom 可見頁面的結構快照(以 DOM 為基礎,不含像素)
mouse_move 以動畫方式將游標移至某個點或 CSS 選擇器
mouse_click 使用動畫游標點按(左鍵/右鍵/中鍵、按兩下、輔助按鍵)
mouse_drag 使用動畫游標拖曳(支援 HTML5 拖放元素)
mouse_scroll 在某個點或元素上捲動
keyboard_type 逐字元輸入文字並產生逼真的事件
keyboard_press 按下單一按鍵(Enter、Tab、Escape、ArrowDown……),可選擇搭配輔助按鍵
call_bound_method 呼叫已繫結的 Go 服務方法,例如main.GreetService.Greet
emit_event 發出 Wails 應用程式事件
wait_for_event 等待 Wails 應用程式事件並傳回其資料

多視窗支援

所有會對視窗執行操作的工具都接受選用的window引數,其中包含視窗的名稱(透過WebviewWindowOptions.Name設定)。若省略此引數,工具會以目前取得焦點的視窗為目標;若沒有視窗取得焦點,則以第一個視窗為目標。

text
List all windows, then click the "New" button in the window named "editor".

選取元素

滑鼠和鍵盤工具接受下列任一項:

  • CSS 選擇器 — selector: "#submit-btn"(自動捲動至元素所在位置)
  • 座標 — x: 400, y: 300(相對於檢視區的 CSS 像素)

進行拖曳操作時,請加上from_和to_前綴:

text
Drag from selector: ".card" to selector: ".dropzone"

安全性

  • 伺服器預設繫結至127.0.0.1。瀏覽器來源必須是 HTTP(S) 回送來源;不透明(null)、格式錯誤及外部來源都會遭到拒絕。
  • 仍支援不含標頭的原生 MCP 用戶端。未設定WAILS_MCP_TOKEN時,系統會信任本機處理程序及獲准的本機瀏覽器來源;來源檢查並非驗證。請設定高熵權杖,要求所有/mcp呼叫都必須使用持有人驗證,並在用戶端的Authorization: Bearer <token>標頭中設定相同權杖。預檢要求不需要此權杖。
  • /eval-result回呼使用每次求值時都無法預測的 ID,而非用戶端持有人權杖,因此仍與 WebView 結果傳遞相容。
  • 正式環境組建不應包含mcp標籤。Wails CLI 只會在明確設定WAILS_MCP=1時加入此標籤,而預設的wails3 build完全不含伺服器程式碼。
  • 若需要在非回送介面上公開伺服器(例如進行區域網路測試),請設定WAILS_MCP_HOST=0.0.0.0及高熵WAILS_MCP_TOKEN;若未設定權杖,啟動將會失敗。由於內建接聽程式使用 HTTP,請在不受信任的網路上使用加密通道或終止 TLS 的 Proxy。

範例應用程式

v3/examples/mcp提供了展示所有工具的完整遊樂場應用程式。
其中包括:

  • 附有遞增/重設按鈕的計數器
  • 附有 Greet、Add、Shout 繫結方法的名稱輸入欄位
  • HTML5 拖放來源和目標
  • 可捲動清單(50個項目)
  • 事件記錄

使用下列命令執行:

shell
cd v3/examples/mcp
go run -tags mcp .

接著,將 Claude Code 或任何 MCP 用戶端連線至http://127.0.0.1:9099/mcp,並要求它操作此 UI。

意見回饋

內建 MCP 伺服器是一項實驗,其未來方向將由您的意見回饋決定。如果您試用了它,我們很想知道您使用了哪些用戶端和工具、您的預期與實際結果,以及讓代理程式操作您的應用程式是否有幫助 — 最有用的報告會明確說明您實際執行的內容。請到MCP 伺服器意見回饋討論告訴我們。

編輯頁面

上次更新: