Tauri应用调试服务器

一个用于AI助手检查、调试和自动化Tauri v2应用的Model Context Protocol (MCP)服务器,提供截图、DOM检查、JavaScript执行和UI交互功能。

  • by vdavid
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 vdavid/tauri-mcp

使用说明

tauri mcp

注意:我暂时放弃了这个项目,因为我发现 MCP服务器Tauri 为了达到我的目的。

一个模型上下文协议(MCP)服务器,使AI助手能够检查、调试和自动化Tauri v2应用程序。提供屏幕截图、DOM检查、JavaScript执行和UI交互功能。

概述

tauri mcp由两个包组成:

  • tauri-mcp (Rust):一个Tauri v2插件,在你的应用程序中公开一个WebSocket服务器
  • @vdavid/tauri-mcp (TypeScript):一个将AI助手连接到插件的MCP服务器
┌─────────────────────┐    MCP (stdio)    ┌─────────────────────┐
│   AI Assistant      │ ◄───────────────► │   MCP Server (TS)   │
│  (Claude, Cursor)   │                   │  @vdavid/tauri-mcp  │
└─────────────────────┘                   └──────────┬──────────┘
                                                     │
                                          WebSocket (port 9223)
                                                     │
                                          ┌──────────▼──────────┐
                                          │    Tauri App        │
                                          │  tauri-mcp plugin   │
                                          └─────────────────────┘

快速开始

1.将插件添加到您的Tauri应用程序中

在您的应用程序中 Cargo.toml:

[dependencies]
tauri-mcp = "0.1"

在你的 main.rs:

fn main() {
    tauri::Builder::default()
        .plugin(tauri_mcp::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

2.安装MCP服务器

npm install -g @vdavid/tauri-mcp

3.配置您的MCP客户端

添加到您的MCP客户端配置中(例如,Claude Desktop或Cursor):

{
  "mcpServers": {
    "tauri": {
      "command": "tauri-mcp"
    }
  }
}

4.开始使用它

  1. 启动您的Tauri应用程序(启用插件)
  2. 在您的AI助手中,使用 tauri_session 行动起来 start 连接
  3. 使用其他工具检查您的应用程序并与之交互

可用工具

工具 说明
tauri_session 启动、停止或检查与Tauri应用程序的连接
tauri_screenshot 捕获网络视图屏幕截图(PNG或JPEG)。 仅限macOS。
tauri_dom_snapshot 获取DOM树(可访问性或结构)
tauri_execute_js 在Web视图中运行JavaScript
tauri_console_logs 获取捕获的控制台输出
tauri_window_list 列出所有窗口
tauri_window_info 获取窗口详细信息(大小、位置、状态)
tauri_window_resize 调整窗口大小
tauri_interact 单击、键入、滚动
tauri_wait_for 等待选择器、文本或可见性

注: 截图仅在macOS上受支持。Windows和Linux返回错误。

工具示例

连接到您的应用程序

tauri_session({ action: "start" })
→ "Connected to My App (localhost:9223)"

截图

tauri_screenshot({ format: "png" })
→ [image data]

检查DOM

tauri_dom_snapshot({ type: "accessibility" })
→ YAML format:
  - tag: button
    role: button
    name: Submit
    selector: "#submit-btn"

tauri_dom_snapshot({ type: "structure" })
→ Tree format:
  div.app
  ├─ header
  │  └─ h1
  └─ main#content
     ├─ form
     └─ button.submit-btn

执行JavaScript

tauri_execute_js({ script: "document.title" })
→ "My App"

tauri_execute_js({ script: "await fetch('/api/data').then(r => r.json())" })
→ { ... }

与UI交互

tauri_interact({ action: "click", selector: "#submit-btn" })
→ "Clicked #submit-btn"

tauri_interact({ action: "type", selector: "input[name=email]", text: "user@example.com" })
→ "Typed into input[name=email]"

等待条件

tauri_wait_for({ type: "selector", value: ".loading-complete", timeout: 5000 })
→ "Found element matching '.loading-complete'"

配置

环境变量

变量 默认值 描述
TAURI_MCP_HOST localhost WebSocket服务器主机
TAURI_MCP_PORT 9223 WebSocket服务器端口
TAURI_MCP_TIMEOUT 10000 命令超时(毫秒)

插件配置(Rust)

// Default configuration
tauri_mcp::init()

// Custom port and host
tauri_mcp::Builder::new()
    .port(9224)
    .host("0.0.0.0")  // Allow remote connections
    .build()

安全说明

默认情况下,WebSocket服务器绑定到 localhost 只有。如果你使用 .host("0.0.0.0") 要允许远程连接,请注意 网络上的任何人都可以执行任意JavaScript 在您的应用程序中。仅在受信任的网络或防火墙后绑定到0.0.0.0。

平台支持

功能 macOS Windows Linux
截图 是 特技 特技
JavaScript执行 是 是 有
控制台日志 是 是 有
DOM快照 是 是 有
窗口管理 是 是 有
UI交互 是 是 有

Windows和Linux上的屏幕截图将返回“未实现”错误。其他功能适用于所有平台。

局限性

DOM快照深度

DOM快照的最大深度为20级。较深的嵌套在没有警告的情况下被截断。这可以防止深度嵌套DOM上的性能问题。

不支持iframe

这 interact, wait_for,以及 dom_snapshot 命令仅对主文档有效。他们无法访问内部的元素 <iframe> 由于浏览器安全限制,元素。

JavaScript执行要求

该插件使用Tauri的事件系统返回JavaScript执行结果。在大多数情况下,这会通过两种机制自动工作:

  1. window.__TAURI__.event -可用时间: withGlobalTauri: true 在你的 tauri.conf.json
  2. window.__TAURI_INTERNALS__ -在Tauri v2网络视图中始终可用(内部API)

如果两者都不可用,JavaScript执行将超时。如果遇到超时,请将其添加到您的 tauri.conf.json:

{
  "app": {
    "withGlobalTauri": true
  }
}

这在全球范围内公开了Tauri的JavaScript API。对于只运行受信任代码的应用程序(大多数Tauri应用程序)来说是安全的,但如果你的应用程序加载了不受信任的第三方内容,请避免使用。

建筑

该插件创建了一个WebSocket服务器(默认端口9223),接受类似JSON RPC的命令。MCP服务器将MCP工具调用转换为WebSocket命令并返回结果。

关键设计决策:

  • 无备用链:如果某件事失败了,它会明显失败,并显示一条可操作的错误消息
  • 保持连接:WebSocket连接每30秒使用一次ping/pong
  • 单个连接:每个会话一个WebSocket连接,可用于所有命令
  • 原生截图:用途 WKWebView.takeSnapshot 在macOS上实现快速、可靠的捕获

包裹

发展

# Install dependencies
pnpm install

# Build everything
cargo build
pnpm -r build

# Run tests
./scripts/check-all.sh

许可证

麻省理工学院或阿帕奇-2.0