Token导航 LogoToken导航TokenDH.com
egui MCP logo
AI代理未说明官方级别未说明来源级核验

egui MCP

MCP Server

egui-mcp是一个通过模型上下文协议(MCP)使AI代理能够与egui GUI应用程序交互的服务器,提供UI自动化能力。

工具数

48

提示词数

0

GitHub Stars

4

资源数

0
RustAI代理工作流自动化

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

dijdzv

提供方

dijdzv

最后核验

2026/5/17 20:20

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

egui mcp

MCP(模型上下文协议)服务器,使AI代理能够与egui GUI应用程序交互。

概述

egui mcp为以下对象提供UI自动化功能 egui 通过模型上下文协议的应用程序。它利用Linux的AT-SPI(辅助技术服务提供商接口)访问UI树,并将其暴露给任何兼容MCP的客户端。

特性

工作工具

工具描述方法
get_ui_tree获取完整的UI树AT-SPI
find_by_label按标签搜索元素(子字符串匹配)AT-SPI
find_by_label_exact按标签搜索元素(完全匹配)AT-SPI
find_by_role按角色搜索元素(按钮、文本输入等)AT-SPI
get_element按ID获取特定元素AT-SPI
click_element按ID单击元素AT-SPI操作
get_bounds获取元素边界框AT-SPI组件
focus_element按ID排列的焦点元素AT-SPI组件
scroll_to_element滚动元素进入视图AT-SPI组件
drag_element将元素拖动到目标AT-SPI组件+IPC
get_text获取文本内容AT-SPI文本
get_caret_position获取光标位置AT-SPI文本\*\*
set_caret_position设置光标位置AT-SPI文本\*\*
get_text_selection获取所选文本范围AT-SPI文本\*\*
set_text_selection设置文本选择AT-SPI文本\*\*
get_value获取滑块/进度值AT-SPI值
set_value设置滑块值AT-SPI值
get_selected_count获取所选项目的计数AT-SPI选择\*
click_at点击坐标IPC
double_click双击坐标IPC
hover将鼠标移动到坐标IPC
drag从A点拖动到点BIPC
keyboard_input发送键盘输入IPC
scroll在坐标处滚动IPC
take_screenshot捕获应用程序屏幕截图IPC
ping验证服务器是否正在运行-
check_connection检查与egui应用程序IPC的连接
is_visible检查元件是否可见AT-SPI状态
is_enabled检查元件是否启用AT-SPI状态
is_focused检查元素是否有焦点AT-SPI状态
is_checked检查切换/复选框状态AT-SPI状态
screenshot_element截图特定元素AT-SPI+IPC
screenshot_region特定区域截图IPC
wait_for_element等待元素出现/消失轮询AT-SPI
wait_for_state等待元素状态更改轮询AT-SPI
compare_screenshots比较两个屏幕截图(相似性得分)服务器
diff_screenshots生成视觉差异图像服务器
highlight_element在元素上绘制高亮叠加AT-SPI+IPC
clear_highlights删除所有突出显示IPC
save_snapshot保存当前UI树状态AT-SPI
load_snapshot加载已保存的快照内存
diff_snapshots比较两个保存的快照内存
diff_current将当前状态与快照AT-SPI+内存进行比较
get_frame_stats获取FPS和帧定时IPC\*\*\*
start_perf_recording开始录制性能IPC\*\*\*
get_perf_report获取带有百分位数的绩效报告IPC\*\*\*
get_logs获取最近的日志条目IPC\*\*\*\*
clear_logs清除日志缓冲区IPC\*\*\*\*
\*对于组合框,检查name属性以确定是否选择了某些内容(返回0或1)。 \*\*这些工具要求元素首先具有焦点。使用 focus_element 在打电话之前。如果没有焦点,则返回-1。 \*\*\*需要egui应用程序呼叫 record_frame_auto()。参见 性能指标. \*\*\*\*需要将egui应用程序配置为 McpLogLayer。参见 日志访问.

不工作(限制)

以下工具已实施,但 不要工作 由于各种限制:

工具AT-SPI接口问题解决方法
set_textEditableTextAccessKit不实现EditableText接口使用 keyboard_input
select_item选择egui组合框不向AccessKit公开子项使用 click_at + keyboard_input
deselect_item选择同上同上

不需要的

以下工具已实现,但对egui没有用:

工具原因
select_allegui只有组合框和无线电组(单选)
clear_selection与上述相同
备注:参见 docs/egui-accessibility-investigation.md 对每个限制进行详细分析。

建筑

┌───────────────────────────────────────────────────────────────┐
│                    MCP Client (AI Agent)                      │
└───────────────────────────────────────────────────────────────┘
                              │
                              │ MCP Protocol (stdio)
                              ▼
┌───────────────────────────────────────────────────────────────┐
│                      egui-mcp-server                          │
│                                                               │
│  ┌─────────────────────┐      ┌─────────────────────┐         │
│  │   AT-SPI Client     │      │    IPC Client       │         │
│  │ (UI tree & actions) │      │   (screenshots)     │         │
│  └──────────┬──────────┘      └───────────┬─────────┘         │
└─────────────┼─────────────────────────────┼───────────────────┘
              │ D-Bus                       │ Unix Socket
              ▼                             ▼
┌─────────────────────────┐     ┌───────────────────────────────┐
│      AT-SPI Bus         │     │     egui-mcp-client           │
│  (org.a11y.atspi.*)     │     │  (embedded in egui app)       │
└─────────────────────────┘     └───────────────────────────────┘
              ▲                             ▲
              │ auto-publish                │ embedded
              │                             │
┌───────────────────────────────────────────────────────────────┐
│                      egui Application                         │
│           enable_accesskit() → AccessKit → AT-SPI             │
└───────────────────────────────────────────────────────────────┘

需求

  • Linux (需要AT-SPI)
  • 1.85+(2024年版)

安装

来自crates.io(推荐)

cargo install egui-mcp-server

使用货仓(更快)

如果你有 货仓 安装后,您可以下载预构建的二进制文件:

cargo binstall egui-mcp-server

从源代码构建

git clone https://github.com/dijdzv/egui-mcp.git
cd egui-mcp
cargo build --release

服务器二进制文件将位于 target/release/egui-mcp-server.

用法

1.准备您的egui申请

添加 egui-mcp-client 要启用屏幕截图支持,请执行以下操作:

# Cargo.toml
[dependencies]
egui-mcp-client = { git = "https://github.com/dijdzv/egui-mcp.git" }
use egui_mcp_client::McpClient;

fn main() {
    let mcp_client = McpClient::new();

    // Start IPC server
    let runtime = tokio::runtime::Runtime::new().unwrap();
    let client_clone = mcp_client.clone();
    runtime.spawn(async move {
        egui_mcp_client::IpcServer::run(client_clone).await.ok();
    });

    // Run eframe app
    eframe::run_native("My App", options, Box::new(|cc| {
        // Enable AccessKit (publishes UI tree to AT-SPI)
        cc.egui_ctx.enable_accesskit();
        // ...
    }));
}

备注:呼叫 enable_accesskit() 通过AT-SPI自动发布UI树。无需手动导出。

2.配置MCP客户端

egui-mcp-server guide 有关详细的设置说明,包括:

  • MCP客户端配置(.mcp.json)
  • 所需的环境变量
  • 可用的MCP工具
# Show setup guide
egui-mcp-server guide

3.可用工具

连接后,以下MCP工具可用:

连接信息(&I):

  • ping -检查服务器是否正在运行
  • check_connection -验证与egui应用程序的连接

UI树(AT-SPI):

  • get_ui_tree -以JSON格式获取完整的UI结构
  • find_by_label -查找包含标签子字符串的元素
  • find_by_label_exact -查找标签完全匹配的元素
  • find_by_role -按角色查找元素(按钮、文本输入、复选框等)
  • get_element -按ID获取元素详细信息

元素交互(AT-SPI):

  • click_element -按ID单击元素(AT-SPI操作)
  • set_text -按ID设置文本输入的文本内容(AT-SPI可编辑文本)

基于坐标的输入(IPC):

  • click_at -点击特定坐标
  • double_click -在特定坐标处双击
  • hover -将鼠标移动到特定坐标
  • drag -从点A拖动到点B
  • keyboard_input -发送键盘输入
  • scroll -在特定坐标处滚动

屏幕截图(IPC):

  • take_screenshot -捕获屏幕截图(返回ImageContent或保存到文件)
特性 适用于由于egui限制而无法工作的工具。

性能指标

启用性能指标(get_frame_stats, start_perf_recording, get_perf_report),呼叫 record_frame_auto() 在egui应用程序的更新循环中:

impl eframe::App for MyApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        // ... your UI code ...

        // Record frame for performance metrics (1 line only!)
        self.runtime.block_on(self.mcp_client.record_frame_auto());
    }
}

日志访问

启用日志访问(get_logs, clear_logs),配置 McpLogLayer 追踪:

use egui_mcp_client::{McpClient, McpLogLayer};
use tracing_subscriber::prelude::*;

fn main() {
    // Set up MCP log layer (captures logs for MCP access)
    let (mcp_layer, log_buffer) = McpLogLayer::new(1000); // Keep last 1000 entries

    tracing_subscriber::registry()
        .with(mcp_layer)                           // Capture logs for MCP
        .with(tracing_subscriber::fmt::layer())    // Also log to stdout
        .init();

    // Pass log buffer to MCP client
    let mcp_client = McpClient::new().with_log_buffer_sync(log_buffer);
    // ... run egui app
}

元素高亮显示

启用元素突出显示(highlight_element, clear_highlights),呼叫 draw_highlights() 在更新循环结束时:

impl eframe::App for MyApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        // ... your UI code ...

        // Draw highlights at the end
        let highlights = self.runtime.block_on(self.mcp_client.get_highlights());
        egui_mcp_client::draw_highlights(ctx, &highlights);
    }
}

发展

设置

此项目使用 devenv:

cd egui-mcp
# direnv auto-loads the environment, or:
devenv shell

构建演示应用程序

演示应用程序需要额外的frame/egui(Wayland后端)系统依赖关系:

# Ubuntu/Debian
sudo apt-get install -y libwayland-dev libxkbcommon-dev

备注:这些是构建支持Wayland的egui/frame应用程序所必需的,而不是egui-mcp服务器本身。

命令

just check    # Run clippy and fmt check
just fmt      # Format code
just build    # Build all targets
just test     # Run tests
just demo     # Run demo egui app
just server   # Run MCP server

测试

  1. 1号航站楼: just demo (启动演示应用程序)
  2. 2号航站楼: just server (启动MCP服务器)
  3. 连接任何MCP客户端

项目结构

egui-mcp/
├── crates/
│   ├── egui-mcp-server/    # MCP server binary
│   ├── egui-mcp-client/    # Library for egui apps
│   └── egui-mcp-protocol/  # Shared protocol definitions
├── examples/
│   └── demo-app/           # Demo egui application
├── devenv.nix              # Development environment
└── justfile                # Build commands

贡献

提交消息

此项目使用 约定式提交 用于自动版本控制。

# New feature (bumps minor version)
git commit -m "feat: add new tool"

# Bug fix (bumps patch version)
git commit -m "fix: correct calculation"

# Breaking change (bumps major version)
git commit -m "feat!: change API format"
类型描述
feat新功能
fixBug修复
docs仅文档
refactor代码重构
test添加测试
chore构建、CI、依赖关系

发布过程

通过以下方式自动发布 释放plz:

  1. 推至 main 触发自动发布PR创建
  2. 合并发布PR以发布到crates.io

许可证

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

相关

目录标签

目录标签

RustAI代理工作流自动化UI自动化本地部署egui集成AI代理交互AT-SPIMCP协议

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

48

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP