Tauri插件MCP桥
Tauri 2.0插件,支持桌面应用程序自动化的模型上下文协议(MCP)集成。允许像Claude这样的人工智能助手检查您的Tauri应用程序并与之交互。
特性
- ✅ 窗口管理(列表、信息、显示/隐藏、移动、调整大小)
- ✅ 浏览器控件(导航、状态、执行JS、选项卡)
- ✅ DevTools集成(仅限macOS)
- ✅ DOM交互(点击、键入、等待、快照)
- ✅ 事件订阅
- ✅ 性能指标
- ✅ 测试记录/回放
- 🚧 截图(需要tauri插件截图)
安装
添加到您的 Cargo.toml:
[dependencies]
tauri-plugin-mcp-bridge = { path = "../path/to/tauri-plugin-mcp-bridge" }或者通过git:
[dependencies]
tauri-plugin-mcp-bridge = { git = "https://github.com/yourusername/tauri-mcp-bridge" }用法
基本设置
在Tauri应用程序中初始化插件:
// src-tauri/src/main.rs
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_mcp_bridge::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}就是这样!该插件将:
- 在以下位置创建Unix套接字
~/.tauri/mcp.sock(仅调试版本) - 启动JSON-RPC 2.0服务器
- 处理传入的MCP命令
- 执行Tauri API调用
使用DevTools功能
要在生产构建中启用DevTools:
[dependencies]
tauri-plugin-mcp-bridge = { path = "../path/to/tauri-plugin-mcp-bridge", features = ["devtools"] }建筑
该插件实现了一个在Unix套接字上监听的JSON-RPC 2.0服务器:
MCP Server (TypeScript)
↓ Unix socket (~/.tauri/mcp.sock)
Plugin (JSON-RPC server)
↓ Routes to command handlers
Command Handlers (Rust modules)
↓ Execute Tauri APIs
Your Tauri App组件
1.套接字服务器(src/server.rs)
- 在以下位置创建Unix套接字
~/.tauri/mcp.sock - 接受传入连接
- 解析JSON-RPC 2.0请求
- 命令处理程序的路由
- 返回JSON-RPC 2.0响应
2.国家管理(src/state.rs)
全局插件状态:
pub struct MCPState {
pub event_subscriptions: Arc>>,
pub js_callbacks: Arc>>,
pub recordings: Arc>>>,
}3.命令处理程序(src/commands/)
模块化命令处理程序:
window.rs-窗口管理(6个命令)webview.rs-浏览器控件(4个命令)devtools.rs-DevTools(2个命令,仅限macOS)script.rs-JS与回调模式的交互(4个命令)events.rs-事件订阅(3个命令)performance.rs-性能指标(1个命令)testing.rs-测试记录/回放(2个命令)screenshot.rs-屏幕截图(1个命令,存根)
JavaScript回调模式
自从Tauri的 eval() 不返回值,插件使用回调模式:
// 1. Generate callback ID
let callback_id = uuid::Uuid::new_v4().to_string();
// 2. Create oneshot channel
let (tx, rx) = oneshot::channel();
// 3. Store in state
app.state::()
.js_callbacks
.lock()
.unwrap()
.insert(callback_id.clone(), tx);
// 4. Inject JS that invokes callback
let js = format!(r#"
window.__TAURI__.invoke('js_callback', {{
id: '{}',
data: {{ result: 'value' }}
}});
"#, callback_id);
window.eval(&js)?;
// 5. Await result with timeout
tokio::time::timeout(Duration::from_secs(30), rx).await??API 参考
窗口管理
所有窗口命令都接受 label 参数。如果没有提供,则使用第一个窗口。
window_list
返回窗口标签数组。
window_info
参数:
label(字符串):窗口标签
返回窗口位置、大小和状态标志。
window_show / window_hide
参数:
label(字符串):窗口标签
window_move
参数:
label(字符串):窗口标签x(数字):X坐标y(数字):Y坐标
window_resize
参数:
label(字符串):窗口标签width(数字):宽度(像素)height(数字):高度(像素)
浏览器控件
browser_navigate
参数:
url(字符串):要导航到的URLlabel(字符串,可选):窗口标签
browser_state
参数:
label(字符串,可选):窗口标签
返回当前URL和窗口状态。
browser_execute
参数:
code(string):JavaScript代码label(字符串,可选):窗口标签
即发即弃JavaScript执行。
browser_tabs
参数:
action(string):“列表”、“创建”、“关闭”、“切换”label(字符串,可选):窗口标签index(数字,可选):窗口索引url(字符串,可选):新窗口的URL
交互
browser_click
参数:
element(string):CSS选择器button(字符串,可选):鼠标按钮modifiers(数组,可选):键盘修饰符label(字符串,可选):窗口标签
browser_type
参数:
text(string):要键入的文本clear(boolean,可选):键入前清除submit(布尔值,可选):提交表单label(字符串,可选):窗口标签
browser_wait
参数:
condition(string):“选择器”、“url”、“标题”value(string):等待的值timeout(数字,可选):超时(毫秒)label(字符串,可选):窗口标签
browser_snapshot
参数:
includeText(布尔值,可选):包含文本maxDepth(数字,可选):最大深度label(字符串,可选):窗口标签
返回DOM HTML快照。
DevTools(仅限macOS)
需要macOS 10.15+以及调试版本或 devtools 功能。
devtools_open / devtools_close
参数:
label(字符串,可选):窗口标签
事件
events_subscribe
参数:
types(数组):事件类型字符串
将EventId存储在状态中,以便以后取消订阅。
events_unsubscribe
参数:
types(数组):事件类型字符串
events_list
返回所有可用Tauri事件类型的列表。
演出
performance_metrics
参数:
label(字符串,可选):窗口标签
通过JavaScript回调返回性能API数据。
测试
test_record / test_replay
尚未实现-返回存根响应。
截图
browser_screenshot
参数:
label(字符串,可选):窗口标签fullPage(布尔值,可选):整页format(字符串,可选):图像格式
需要 tauri-plugin-screenshots 待安装。
发展
建筑
cargo build运行测试
cargo test使用Tauri应用程序进行测试
- 将插件添加到您的Tauri应用程序
- 运行应用程序:
npm exec tauri dev - 检查插座是否存在:
ls -la ~/.tauri/mcp.sock - 使用MCP服务器进行测试:
node ../tauri-mcp-server/test-connection.js
平台支持
- ✅ macOS 10.15+
- ✅ Linux(Ubuntu 20.04+,Fedora 36+)
- 🚧 窗户(计划中)
平台特定功能
macOS
- 完全支持DevTools
- 所有可用功能
Linux
- DevTools不可用
- 所有其他功能均正常工作
视窗
- 尚未测试/支持
- 欢迎捐款
配置
调试与发布
调试版本和发布版本之间的插件行为不同:
调试版本:
- Socket服务器始终启动
- 插座在
~/.tauri/mcp.sock - 所有可用命令
发布版本:
- 默认情况下禁用套接字服务器
- 启用
TAURI_MCP_ENABLE=1环境变量 - 或使用插件配置(未来功能)
特性
[features]
default = []
devtools = [] # Enable DevTools in release builds安全考虑
⚠️ 重要安全注意事项:
- 默认情况下仅调试构建 -套接字服务器仅在调试版本中运行,以防止在生产中进行未经授权的访问。
- 仅限本地插座 -使用Unix域套接字,而不是网络套接字,限制对本地计算机的访问。
- 无身份验证 -目前没有身份验证机制。任何具有套接字访问权限的人都可以控制该应用程序。
- 生产使用 -如果在生产中启用,请实施额外的安全措施:
- 身份验证令牌 - 许可制度 - 命令分配列表 - 审核日志记录
故障排除
套接字未创建
- 检查您是否正在运行调试版本
- 验证
~/.tauri目录存在并且可写 - 检查应用程序日志是否有错误
命令不起作用
- 确保窗户标签正确
- 检查DevTools中的JavaScript错误
- 验证Tauri版本兼容性(2.0+)
编译过程中的借用错误
常见模式-始终存储 app.webview_windows() 打电话之前 .get():
// ❌ Wrong - temporary value
let window = app.webview_windows().get(label)?;
// ✅ Correct - stored first
let windows = app.webview_windows();
let window = windows.get(label)?;贡献
欢迎投稿!需要工作的领域:
- \[\]Windows平台支持
- \[\]身份验证/授权
- \[\]截图插件集成
- \[\]测试记录实施
- \[\]事件通知转发
- \[\]性能优化
- \[\]更全面的测试
许可证
麻省理工学院或阿帕奇-2.0
鸣谢
内置:
