关于 kwin-mcp
kwin-mcp 是用于自动化 KDE Plasma 6 Wayland 桌面的 MCP 服务,适合 GUI 测试和 Agent 驱动的桌面工作流。它支持隔离虚拟会话,也可连接现有 KWin 会话,并能检查无障碍树和截屏。
主要功能
- 01隔离的虚拟 KWin 会话
- 02连接实时 KWin 会话
- 03鼠标、键盘、触控和剪贴板输入
- 04检查 AT-SPI2 无障碍树
- 05截屏与窗口管理
适用场景
- 01在无物理显示器环境运行端到端 GUI 测试
- 02使用 AI Agent 自动操作桌面应用
- 03通过实时桌面会话协作
- 04测试信息亭界面和嵌入式 Linux 桌面
MCP 相关
向 MCP 客户端提供 30 种工具,用于会话管理、GUI 输入、无障碍检查、截屏和窗口管理。可在隔离会话中启动应用,也可连接现有 KWin 会话。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
kwin-mcp
适用于 KDE Plasma 6 Wayland 的 Linux 桌面 GUI 自动化 MCP 服务
isac322/kwin-mcp 的积极维护分支。此分支提供了用户期待已久的修复:支持 MCP Python SDK 2.x、在虚拟会话中输入文本(隔离主机键盘映射)、可靠地聚焦窗口、限制启动等待时间、修复输入被静默丢弃的问题,并提供准确的错误契约——详情请参阅更新日志和发布页面。安装:
uv tool install git+https://github.com/VibeProgramm/kwin-mcp
一个模型上下文协议(MCP)服务,让 AI Agent(Claude Code、Cursor 和其他 MCP 客户端)能够在完全隔离的虚拟 KWin 会话中启动、操作和观察任意 Wayland 应用,而不会影响用户的桌面。它还支持实时桌面自动化:连接到现有的 KWin 会话(真实桌面或容器),以实现协作工作流。kwin-mcp 提供 30 个 MCP 工具,涵盖鼠标、键盘、触控、剪贴板、无障碍树检查、屏幕截图和窗口管理,可满足在 Linux 上进行端到端 GUI 测试和桌面自动化所需的一切。
目录
为什么选择 kwin-mcp?
- 隔离会话 —— 每个会话都在独立的
dbus-run-session+kwin_wayland --virtual沙盒中运行,不会影响你的主机桌面。 - 支持实时会话 —— 连接到真实的 KDE Plasma 桌面,或容器内的 KWin 实例(例如
systemd-nspawn),以支持协作式“共享我的屏幕”工作流。 - 交互无需截图 —— AT-SPI2 无障碍树会向 AI Agent 提供结构化的控件数据(角色、名称、坐标、状态和可用操作),因此无需仅依赖视觉识别即可与 UI 元素交互。
- 无需授权提示 —— 直接使用 KWin 的私有 EIS(模拟输入服务)D-Bus 接口,绕过 XDG RemoteDesktop 门户。不会出现用户确认对话框。
- 适用于任何 Wayland 应用 —— 任何能在 KDE Plasma 6 Wayland 上运行的应用都适用:Qt、GTK、Electron 等。输入通过标准
libei协议注入。 - 全面支持输入 —— 鼠标、键盘、多点触控和剪贴板,全部通过隔离会话注入,实现完整的桌面自动化。
使用场景
自动化 GUI 测试
在无头隔离会话中,为 KDE/Qt/GTK 应用运行端到端 GUI 测试。kwin-mcp 会在各自独立的虚拟 KWin 合成器中启动应用,通过鼠标、键盘和触控输入执行操作,然后通过屏幕截图和无障碍树验证结果——整个过程无需物理显示器。
AI 驱动的桌面自动化
让 Claude Code 等 AI Agent 自主操作桌面应用。Agent 读取无障碍树以理解 UI,通过 30 个 MCP 工具执行操作,并通过屏幕截图观察结果,为任何 Wayland 应用构建完整的反馈循环。
实时桌面协作
连接到你的真实桌面会话,让 Claude 观察并操作你看到的内容。使用 session_connect,或传入 --default-live-session 将实时模式设为默认模式。也支持连接到容器(例如 systemd-nspawn)内运行的 KWin,以创建隔离的 Agent 桌面。
CI/CD 中的无头 GUI 测试
将 Linux 桌面 GUI 测试集成到 CI/CD 流水线中。kwin-mcp 的虚拟会话无需 X11 或物理显示服务器,因此适用于 GitHub Actions 或 Linux 上的 GitLab CI 运行器等无头环境。
信息亭和嵌入式设备自动化
自动化运行 KDE Plasma 或纯 KWin Wayland 合成器的设备信息亭界面和嵌入式 Linux 桌面。使用 session_start 对信息亭 UI 进行隔离的虚拟测试,或使用 session_connect 直接连接到实时信息亭或嵌入式设备会话,进行实时自动化和诊断。
快速开始
需要在 Wayland 上运行 KDE Plasma 6。详情请参阅系统要求。
1. 安装
# Using uv (recommended)
uv tool install git+https://github.com/VibeProgramm/kwin-mcp
# Or from a source checkout
git clone https://github.com/VibeProgramm/kwin-mcp.git
cd kwin-mcp
uv tool install .
2. 配置 Claude Code
将以下内容添加到项目的 .mcp.json:
{
"mcpServers": {
"kwin-mcp": {
"command": "uvx",
"args": ["kwin-mcp"]
}
}
}
3. 使用
让 Claude Code 启动并操作任意 GUI 应用:
Start a KWin session, launch kcalc, and press the buttons to calculate 2 + 3.
Claude Code 会自主启动隔离会话、启动应用、读取辅助功能树以查找按钮、点击按钮,并截取屏幕截图来验证结果。
配置
推荐:安装为插件
将 kwin-mcp 接入编辑器的最快方式是安装一个随附插件。每个插件都会自动注册 MCP 服务,并且附带 kwin-desktop-automation 技能,指导 Agent 在何时调用哪个工具(会话模式选择、观察 → 操作 → 验证循环、US-QWERTY 与 Unicode 输入、AT-SPI2 坐标转换,以及其他平台注意事项)。
Claude Code — 从市场安装插件:
/plugin marketplace add VibeProgramm/kwin-mcp
/plugin install kwin-mcp@kwin-mcp
OpenCode — 将 npm 插件添加到 opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@isac322/kwin-mcp-opencode"]
}
完整的集成指南(手动备用方案、自定义技能、故障排除)请参阅 docs/ai-agent-integration.md。
Claude Code
将以下内容添加到项目的 .mcp.json:
{
"mcpServers": {
"kwin-mcp": {
"command": "uvx",
"args": ["kwin-mcp"]
}
}
}
如果是全局安装:
{
"mcpServers": {
"kwin-mcp": {
"command": "kwin-mcp"
}
}
}
Claude Desktop
将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"kwin-mcp": {
"command": "uvx",
"args": ["kwin-mcp"]
}
}
}
直接运行
# As an installed script
kwin-mcp
# As a Python module
python -m kwin_mcp
# Interactive CLI (REPL for rapid testing)
kwin-mcp-cli
# Live session mode (default to real desktop instead of virtual)
kwin-mcp --default-live-session
kwin-mcp-cli --default-live-session
可用工具
会话管理(3 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
session_start | app_command? str,screen_width? int(0 = 自动检测),screen_height? int(0 = 自动检测),enable_clipboard? bool(false),keep_screenshots? bool(false),isolate_home? bool(false),keep_home? bool(false),env? dict | 启动隔离的 KWin Wayland 会话,可选择同时启动应用。屏幕尺寸设为 0 时,会自动检测逻辑桌面的边界框(所有已启用的输出设备/已连接的显示器)。设置 enable_clipboard=true 可启用剪贴板工具(需要 wl-clipboard)。设置 keep_screenshots=true 可在 session_stop 后保留屏幕截图文件。设置 isolate_home=true 可创建临时 HOME,并隔离 XDG 目录(配置、数据、缓存、状态),以防应用读取或写入主机用户设置。设置 keep_home=true 可在 session_stop 后保留隔离的主目录。通过 env 传入额外的环境变量。 |
session_connect | dbus_address? str,wayland_display? str,keep_screenshots? bool(false) | 连接到现有 KWin 会话(真实桌面或容器)。默认使用 $DBUS_SESSION_BUS_ADDRESS 和 $WAYLAND_DISPLAY。剪贴板始终启用。session_stop 只会断开连接,不会终止 KWin 或预先运行的应用。 |
session_stop | (无) | 停止会话并进行清理。对于虚拟会话:终止 KWin 和所有应用。对于实时会话:断开连接,不会终止 KWin 或预先运行的应用。 |
观察(3 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
screenshot | include_cursor? bool (false) | 捕获虚拟显示屏的屏幕截图(保存为 PNG,并返回文件路径) |
accessibility_tree | app_name? str, max_depth? int (15), role? str | 获取包含角色、名称、状态和屏幕坐标的 AT-SPI2 控件树(通过合成器端的窗口几何信息,将窗口局部坐标转换而来)。使用 role 筛选特定元素类型(例如 "button"、"check box")。不匹配的元素会被隐藏,但仍会遍历其子元素。 |
find_ui_elements | query str, app_name? str, states? list[str] | 按名称、角色或描述搜索 UI 元素(不区分大小写)。返回适用于 mouse_click 等工具的屏幕坐标。也可以按 AT-SPI2 状态筛选(例如 ["focused"]、["active", "visible"])。仅按状态筛选时,query 可以为空。 |
鼠标输入(6 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
mouse_click | x int, y int, button? str ("left"), double? bool, triple? bool, modifiers? list[str], hold_ms? int (0), screenshot_after_ms? list[int] | 单击指定坐标。支持左键、右键和中键,单击、双击和三击,修饰键(例如 ["ctrl", "shift"]),以及通过 hold_ms 长按。 |
mouse_move | x int, y int, screenshot_after_ms? list[int] | 将光标(悬停)移动到指定坐标,不执行单击 |
mouse_scroll | x int, y int, delta int, horizontal? bool, discrete? bool, steps? int (1) | 在指定坐标滚动。delta 为正表示向下/向右,为负表示向上/向左。使用 discrete=true 进行滚轮分档滚动,使用 steps 将滚动拆分为平滑的增量。 |
mouse_drag | from_x int, from_y int, to_x int, to_y int, button? str ("left"), modifiers? list[str], waypoints? list[[x,y,dwell_ms]], screenshot_after_ms? list[int] | 使用平滑插值从一个点拖动到另一个点。支持使用自定义 waypoints 设置复杂的拖动路径。 |
mouse_button_down | x int, y int, button? str ("left") | 在指定坐标按下鼠标按钮但不松开。可与 mouse_button_up 配合手动控制拖动。 |
mouse_button_up | x int, y int, button? str ("left") | 在指定坐标松开之前按下的鼠标按钮 |
键盘输入(5 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
keyboard_type | text str, screenshot_after_ms? list[int] | 使用美式 QWERTY 键盘布局逐字符输入文本字符串 |
keyboard_type_unicode | text str, screenshot_after_ms? list[int] | 通过 wtype 或剪贴板回退方式(wl-copy + Ctrl+V)输入任意 Unicode 文本(韩文、中日韩文字等)。需要安装 wtype 或 wl-clipboard。 |
keyboard_key | key str, screenshot_after_ms? list[int] | 按下按键或组合键(例如 Return、ctrl+c、alt+F4、shift+Tab) |
keyboard_key_down | key str | 按住按键但不松开。适用于在多个操作期间按住修饰键(例如,单击项目时按住 Ctrl)。 |
keyboard_key_up | key str | 松开之前按住的按键 |
触摸输入(4 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
touch_tap | x int,y int,hold_ms? int (0),screenshot_after_ms? list[int] | 点击指定坐标。使用 hold_ms 执行长按手势。 |
touch_swipe | from_x int,from_y int,to_x int,to_y int,duration_ms? int (300),screenshot_after_ms? list[int] | 以可配置的持续时间从一个点滑动到另一个点 |
touch_pinch | center_x int,center_y int,start_distance int,end_distance int,duration_ms? int (500),screenshot_after_ms? list[int] | 双指捏合手势。end_distance < start_distance 表示向内捏合,end_distance > start_distance 表示向外捏合。 |
touch_multi_swipe | from_x int,from_y int,to_x int,to_y int,fingers? int (3),duration_ms? int (300),screenshot_after_ms? list[int] | 多指滑动手势(2-5 根手指),可用于切换工作区等系统手势 |
剪贴板(2 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
clipboard_get | (none) | 读取当前剪贴板中的文本内容。需要在 session_start 中设置 enable_clipboard=true,并安装 wl-clipboard。 |
clipboard_set | text str | 设置剪贴板文本内容。要求与 clipboard_get 相同。 |
窗口管理(3 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
launch_app | command str,env? dict | 在运行中的会话内启动应用。返回 PID 和日志路径。 |
list_windows | (none) | 列出所有可访问的应用窗口,并通过 AT-SPI2 显示每个窗口的标题及活动/焦点状态标记 |
focus_window | app_name str | 根据应用名称聚焦窗口(不区分大小写) |
UI 轮询(1 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
wait_for_element | query str,app_name? str,timeout_ms? int (5000),poll_interval_ms? int (200),expected_states? list[str] | 轮询辅助功能树,直到出现与查询和/或状态匹配的元素,或超时。使用 expected_states 等待状态变化(例如 ["active"]、["checked"])。仅等待状态变化时,query 可以为空。 |
高级功能(3 个工具)
| 工具 | 参数 | 描述 |
|---|---|---|
dbus_call | service str,path str,interface str,method str,args? list[str] | 在隔离会话中调用任意 D-Bus 方法。适用于控制 KWin 脚本、特定应用的 D-Bus API 和系统服务。 |
read_app_log | pid int,last_n_lines? int (50) | 按 PID 读取已启动应用的标准输出/标准错误。将 last_n_lines=0 设为读取全部输出。 |
wayland_info | filter_protocol? str | 列出会话中可用的 Wayland 协议。可用于验证协议访问权限(例如 plasma_window_management)。 |
帧捕获: 许多操作工具都接受可选的
screenshot_after_ms参数(例如[0, 50, 100, 200, 500]),用于在操作完成后的指定延迟(毫秒)捕获屏幕截图。这有助于观察悬停效果、点击动画和菜单过渡等短暂的 UI 状态,而无需额外的 MCP 往返调用。帧捕获使用快速的 KWin ScreenShot2 D-Bus 接口(每帧约 30-70 毫秒)。
工作原理
Claude Code / AI Agent
|
| MCP (stdio)
v
kwin-mcp server (30 tools) kwin-mcp-cli (interactive REPL)
| |
+--- both delegate to AutomationEngine (core.py) ---+
|
|-- session_start (virtual) ---> dbus-run-session
| |-- at-spi-bus-launcher
| +-- kwin_wayland --virtual
| +-- [your app]
|
|-- session_connect (live) ----> existing KWin (real desktop / container)
|
|-- screenshot ---------------> KWin ScreenShot2 D-Bus (spectacle fallback)
|
|-- accessibility_tree -------> AT-SPI2 (via PyGObject)
|-- find_ui_elements ---------> AT-SPI2 (via PyGObject)
|-- wait_for_element ----------> AT-SPI2 (polling)
|
|-- mouse_* ------------------> KWin EIS D-Bus --> libei
|-- keyboard_* ---------------> KWin EIS D-Bus --> libei
|-- touch_* ------------------> KWin EIS D-Bus --> libei
| +-- screenshot_after_ms -> KWin ScreenShot2 D-Bus (fast frame capture)
|
|-- keyboard_type_unicode ----> wtype / wl-copy + Ctrl+V
|-- clipboard_* --------------> wl-copy / wl-paste (wl-clipboard)
|
|-- launch_app / list_windows / focus_window
| |-- subprocess spawn
| +-- AT-SPI2 (via PyGObject)
|
|-- dbus_call -----------------> dbus-send (generic D-Bus)
|-- read_app_log --------------> log file read
+-- wayland_info --------------> wayland-info
三重隔离(+ 可选的主目录隔离)
kwin-mcp 提供了与宿主桌面的三层隔离:
- D-Bus 隔离——
dbus-run-session会创建一个私有会话总线。隔离会话的服务(KWin、AT-SPI2、portal)对宿主不可见。 - 显示隔离——
kwin_wayland --virtual会使用虚拟帧缓冲区创建独立的 Wayland 合成器。宿主显示器上不会出现任何窗口。 - 输入隔离——输入事件仅通过 KWin 的 EIS 接口注入隔离的合成器。宿主桌面不会收到来自 kwin-mcp 的输入。
- 主目录隔离(可选)——在
session_start中设置isolate_home=true时,会创建一个临时 HOME 目录,并使用隔离的 XDG 目录(XDG_CONFIG_HOME、XDG_DATA_HOME、XDG_CACHE_HOME、XDG_STATE_HOME)。会话中的应用无法读取或修改宿主用户设置(例如~/.config/kdeglobals),从而提高测试的可复现性和安全性。XDG_RUNTIME_DIR不会被隔离,因为 Wayland 套接字位于此目录中。
输入注入
鼠标、键盘和触摸事件通过 KWin 的私有 org.kde.KWin.EIS.RemoteDesktop D-Bus 接口注入。此接口会返回一个 libei 文件描述符,从而无需使用 XDG RemoteDesktop portal(否则会显示用户授权对话框)即可进行低级别输入模拟。连接使用:
- 绝对指针定位,实现精准的坐标交互
- 用于键盘输入的 evdev 键码,支持完整的 US QWERTY 映射
- 平滑拖动插值(10 个以上中间步骤),实现逼真的拖动操作
- 用于多点触控手势(轻触、滑动、捏合、多指滑动)的 EIS 触摸模拟
屏幕截图
screenshot 工具通过 KWin 的 org.kde.KWin.ScreenShot2 D-Bus 接口捕获屏幕(每帧约 30–70 ms),并以 spectacle CLI 作为回退方案。对于带有 screenshot_after_ms 参数的操作工具,会使用相同的 D-Bus 接口快速连续捕获。原始 ARGB 像素数据会从管道读取,并使用 Pillow 转换为 PNG。
无障碍树
通过 PyGObject(gi.repository.Atspi)查询隔离会话中的 AT-SPI2 无障碍总线。此总线会提供所有 UI 组件的结构化树,包含其角色(按钮、文本框、菜单项等)、名称、状态(已聚焦、已启用、可见等)、屏幕坐标和可用操作(点击、切换等)。
系统要求
| 要求 | 详情 |
|---|---|
| 操作系统 | 使用 KDE Plasma 6 的 Linux(Wayland 会话) |
| Python | 3.12 或更高版本 |
| KWin | 支持 --virtual 标志的 kwin_wayland(KDE Plasma 6.x) |
| libei | 通常与 KWin 6.x 捆绑(EIS 输入模拟) |
| spectacle | KDE 屏幕截图工具(CLI 模式) |
| AT-SPI2 | 用于支持无障碍树的 at-spi2-core |
| PyGObject | GObject 内省 Python 绑定 |
| D-Bus | dbus-python 绑定 |
可选依赖项:
| 软件包 | 用途 |
|---|---|
wl-clipboard(wl-copy、wl-paste) | clipboard_get、clipboard_set,以及 keyboard_type_unicode 的剪贴板回退方案 |
wtype | keyboard_type_unicode(优先于剪贴板回退方案) |
wayland-utils(wayland-info) | wayland_info 工具 |
安装系统依赖项
Arch Linux / Manjaro
sudo pacman -S kwin spectacle at-spi2-core python-gobject dbus-python-common
# Optional: for clipboard and Unicode input
sudo pacman -S wl-clipboard wtype wayland-utils
Fedora (KDE Spin)
sudo dnf install kwin-wayland spectacle at-spi2-core python3-gobject dbus-python
# Optional: for clipboard and Unicode input
sudo dnf install wl-clipboard wtype wayland-utils
openSUSE (KDE)
sudo zypper install kwin6 spectacle at-spi2-core python3-gobject python3-dbus-python
# Optional: for clipboard and Unicode input
sudo zypper install wl-clipboard wtype wayland-utils
Kubuntu / KDE Neon
sudo apt install kwin-wayland spectacle at-spi2-core python3-gi gir1.2-atspi-2.0 python3-dbus
# Optional: for clipboard and Unicode input
sudo apt install wl-clipboard wtype wayland-utils
注意:PyPI 上的
kwin-mcp名称对应上游项目(isac322/kwin-mcp,v0.7.0,MCP SDK 1.x)。本仓库是积极维护的分支(v0.9.0,MCP SDK 2.x);请从 git 或源代码检出安装。配置部分中的uvx kwin-mcp配置示例指向 PyPI 包。
使用 uv(推荐)
uv tool install git+https://github.com/VibeProgramm/kwin-mcp
使用 pip
pip install git+https://github.com/VibeProgramm/kwin-mcp
从源代码安装
git clone https://github.com/VibeProgramm/kwin-mcp.git
cd kwin-mcp
uv sync
uv run kwin-mcp
限制
- 仅支持美式 QWERTY 键盘布局——
keyboard_type仅支持美式 QWERTY。对于非 ASCII 文本(韩文、CJK 等),请使用keyboard_type_unicode,该功能需要安装wtype或wl-clipboard。 - 需要 KDE Plasma 6 或更高版本——不支持较旧的 KDE 版本或其他 Wayland 合成器(GNOME、Sway)。
- AT-SPI2 的可用性因应用而异——某些应用可能无法通过 AT-SPI2 完整公开其控件树。
- 触摸输入由 EIS 模拟——触摸事件通过 KWin 的 EIS 接口模拟,并非来自真实触摸屏设备。大多数应用都能正确处理模拟触摸,但某些应用的行为可能与实际触摸不同。
- 剪贴板需要主动启用——剪贴板工具(
clipboard_get、clipboard_set)默认禁用,因为wl-copy在隔离会话中可能会挂起。请在session_start中设置enable_clipboard=true启用,并确保已安装wl-clipboard。 - QMenu(原生上下文菜单)可能不会显示在 AT-SPI2 中——Qt 的 AT-SPI2 桥接对 Wayland 上的弹出菜单支持不完整。上下文菜单可能无法显示在
accessibility_tree或find_ui_elements中。解决方法:使用screenshot目视定位菜单项,然后按坐标点击。 - 屏幕边缘触发器无法与 EIS 输入配合使用——自动隐藏面板和 layer-shell 触发条依赖 Wayland 表面输入路由,而该路由可能无法响应 EIS 注入的指针事件。解决方法:改用
dbus_call配合 KWin 脚本,或使用键盘快捷键。 - AT-SPI2 坐标转换仅尽力而为——Wayland 客户端报告的是窗口局部坐标(按设计,它们不知道窗口在屏幕上的全局位置)。kwin-mcp 使用每个窗口在合成器端的几何信息(通过 KWin 脚本查询,并按标题匹配)将其转换为真实屏幕坐标。如果无法匹配窗口,坐标将回退为窗口局部坐标——请对照
screenshot进行确认。
故障排除与调试
详细的 libei/EIS 诊断(KWIN_MCP_DEBUG_EI=1)
设置环境变量 KWIN_MCP_DEBUG_EI=1,即可为 EIS 输入注入路径启用详细诊断(kwin-mcp 直接连接到 KWin 的 libei):
KWIN_MCP_DEBUG_EI=1 uv run kwin-mcp
启用后,kwin_mcp.input 日志记录器会提升至 DEBUG 级别,并配置 stderr 处理器,记录 EIS 设备生命周期事件
(ADDED / REMOVED / RESUMED / PAUSED / SEAT_REMOVED)、设备停滞和连接重建情况。当输入注入无声无息地不起作用或行为异常时,可使用此功能:日志会显示 KWin 是否在输入操作期间暂停或移除其 EIS 设备,以及 kwin-mcp 是否成功重建连接。
KWIN_MCP_DEBUG_EI=1 uv run kwin-mcp 2>eis-debug.log
其他症状
session_start输出中显示 No input backend available——KWin 未公开其 EIS RemoteDesktop 接口;会话会降级为仅支持截图和 AT-SPI2 的会话(无法注入输入)。请检查 KWin 版本(需要 Plasma 6)以及服务日志中的降级原因。keyboard_type_unicode在虚拟会话中失败——kwin_wayland --virtual不会公开wtype所需的虚拟键盘协议;剪贴板回退方案(需要wl-clipboard)是此类环境中的主要路径。
贡献
欢迎贡献!有关开发环境设置、代码风格指南和拉取请求流程,请参阅 CONTRIBUTING.md。
git clone https://github.com/VibeProgramm/kwin-mcp.git
cd kwin-mcp
uv sync
uv run ruff check src/
uv run ruff format --check src/
uv run ty check src/
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。