Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
KDE Plasma 6 Wayland GUI automation for AI agents: 30 tools (EIS input, screenshots, AT-SPI2).
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
作者はレジストリにインストール情報を載せていません。下にある作者のREADMEをご覧ください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント VibeProgramm で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.9.0)がレジストリに届いたのは2 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Parano1d node
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Local Parano1d node over MCP. Read-only by default; sending needs the opt-in, capped wallet mode.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Model Context Protocol server for Linux desktop GUI automation on KDE Plasma 6 Wayland
Actively maintained fork of isac322/kwin-mcp. This fork ships the fixes users were waiting for: MCP Python SDK 2.x support, text input in virtual sessions (host keymap isolation), reliable window focus, bounded startup waits, silent input-drop fix, honest error contracts — see the changelog and releases. Install:
uv tool install git+https://github.com/VibeProgramm/kwin-mcp
A Model Context Protocol (MCP) server that enables AI agents (Claude Code, Cursor, and other MCP clients) to launch, interact with, and observe any Wayland application in a fully isolated virtual KWin session -- without affecting the user's desktop. It also supports live desktop automation by connecting to an existing KWin session (real desktop or container) for collaborative workflows. With 30 MCP tools covering mouse, keyboard, touch, clipboard, accessibility tree inspection, screenshot capture, and window management, kwin-mcp provides everything needed for end-to-end GUI testing and desktop automation on Linux.
dbus-run-session + kwin_wayland --virtual sandbox. Your host desktop is never affected.systemd-nspawn) for collaborative "share my screen" workflows.libei protocol.Run end-to-end GUI tests for KDE/Qt/GTK applications in headless isolated sessions. kwin-mcp launches each app in its own virtual KWin compositor, interacts via mouse, keyboard, and touch input, then verifies results through screenshots and the accessibility tree -- all without a physical display.
Let AI agents like Claude Code autonomously operate desktop applications. The agent reads the accessibility tree to understand the UI, performs actions through 30 MCP tools, and observes the results via screenshots -- creating a complete feedback loop for any Wayland application.
Connect to your real desktop session and let Claude observe and interact with what you see. Use session_connect or pass --default-live-session to make live mode the default. Also supports attaching to KWin running inside containers (e.g. systemd-nspawn) for isolated agent desktops.
Integrate Linux desktop GUI testing into CI/CD pipelines. kwin-mcp's virtual sessions require no X11 or physical display server, making it suitable for headless environments like GitHub Actions or GitLab CI runners on Linux.
Automate kiosk interfaces and embedded Linux desktops running KDE Plasma or a bare KWin Wayland compositor. Use session_start for isolated virtual testing of kiosk UIs, or session_connect to attach directly to a live kiosk or embedded device session for real-time automation and diagnostics.
Requires KDE Plasma 6 on Wayland. See System Requirements for details.
1. Install
# Using uv (recommended)
uv tool install git+https://github.com/VibeProgramm/kwin-mcp
git clone https://github.com/VibeProgramm/kwin-mcp.git cd kwin-mcp uv tool install .
2. Configure Claude Code
Add to your project's .mcp.json:
{
"mcpServers": { "kwin-mcp": { "command": "uvx", "args": ["kwin-mcp"] } } }
3. Use it
Ask Claude Code to launch and interact with any GUI application:
Start a KWin session, launch kcalc, and press the buttons to calculate 2 + 3.
Claude Code will autonomously start an isolated session, launch the app, read the accessibility tree to find buttons, click them, and take a screenshot to verify the result.
The fastest way to wire kwin-mcp into your editor is to install one of the bundled plugins. Each plugin auto-registers the MCP server and ships the kwin-desktop-automation skill, which teaches the agent which tool to call when (session-mode selection, the observe → act → verify loop, US-QWERTY vs Unicode typing, AT-SPI2 coordinate translation, and other platform pitfalls).
Claude Code — install the plugin from the marketplace:
/plugin marketplace add VibeProgramm/kwin-mcp
/plugin install kwin-mcp@kwin-mcp
OpenCode — add the npm plugin to your opencode.json:
{
"$schema": "https://opencode.ai/config.json", "plugin": ["@isac322/kwin-mcp-opencode"] }
For the full integration guide (manual fallback, customising the skill, troubleshooting), see docs/ai-agent-integration.md.
Add to your project's .mcp.json:
{
"mcpServers": { "kwin-mcp": { "command": "uvx", "args": ["kwin-mcp"] } } }
Or if installed globally:
{
"mcpServers": { "kwin-mcp": { "command": "kwin-mcp" } } }
Add to your claude_desktop_config.json:
{
"mcpServers": { "kwin-mcp": { "command": "uvx", "args": ["kwin-mcp"] } } }
# As an installed script
kwin-mcp
python -m kwin_mcp
kwin-mcp-cli
kwin-mcp --default-live-session kwin-mcp-cli --default-live-session
| Tool | Parameters | Description |
|---|---|---|
session_start | app_command? str, screen_width? int (0 = auto-detect), screen_height? int (0 = auto-detect), enable_clipboard? bool (false), keep_screenshots? bool (false), isolate_home? bool (false), keep_home? bool (false), env? dict | Start an isolated KWin Wayland session, optionally launching an app. A screen size of 0 auto-detects the bounding box of the logical desktop (all enabled outputs / connected monitors). Set enable_clipboard=true to enable clipboard tools (requires wl-clipboard). Set keep_screenshots=true to preserve screenshot files after session_stop. Set isolate_home=true to create a temporary HOME with isolated XDG directories (config, data, cache, state), preventing apps from reading/writing host user settings. Set keep_home=true to preserve the isolated home directory after session_stop. Pass extra environment variables via env. |
session_connect | dbus_address? str, wayland_display? str, keep_screenshots? bool (false) | Connect to an existing KWin session (real desktop or container). Defaults to $DBUS_SESSION_BUS_ADDRESS and $WAYLAND_DISPLAY. Clipboard is always enabled. session_stop only disconnects without killing KWin or pre-existing apps. |
session_stop | _(none)_ | Stop the session and clean up. For virtual sessions: terminates KWin and all apps. For live sessions: disconnects without killing KWin or pre-existing apps. |
| Tool | Parameters | Description |
|---|---|---|
screenshot | include_cursor? bool (false) | Capture a screenshot of the virtual display (saved as PNG, returns file path) |
accessibility_tree | app_name? str, max_depth? int (15), role? str | Get the AT-SPI2 widget tree with roles, names, states, and screen coordinates (translated from window-local coordinates via compositor-side window geometry). Use role to filter to specific element types (e.g. "button", "check box"). Non-matching elements are hidden but their children are still traversed. |
find_ui_elements | query str, app_name? str, states? list[str] | Search for UI elements by name, role, or description (case-insensitive). Returns screen coordinates suitable for mouse_click and friends. Optionally filter by AT-SPI2 states (e.g. ["focused"], ["active", "visible"]). query can be empty when filtering by states only. |
| Tool | Parameters | Description |
|---|---|---|
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] | Click at coordinates. Supports left/right/middle, single/double/triple click, modifier keys (e.g. ["ctrl", "shift"]), and long-press via hold_ms. |
mouse_move | x int, y int, screenshot_after_ms? list[int] | Move the cursor (hover) to coordinates without clicking |
mouse_scroll | x int, y int, delta int, horizontal? bool, discrete? bool, steps? int (1) | Scroll at coordinates. delta positive = down/right, negative = up/left. Use discrete=true for wheel ticks, steps to split into smooth increments. |
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] | Drag from one point to another with smooth interpolation. Supports custom waypoints for complex drag paths. |
mouse_button_down | x int, y int, button? str ("left") | Press a mouse button at coordinates without releasing. Use with mouse_button_up for manual drag control. |
mouse_button_up | x int, y int, button? str ("left") | Release a previously pressed mouse button at coordinates |
| Tool | Parameters | Description |
|---|---|---|
keyboard_type | text str, screenshot_after_ms? list[int] | Type a string of text character by character (US QWERTY layout) |
keyboard_type_unicode | text str, screenshot_after_ms? list[int] | Type arbitrary Unicode text (Korean, CJK, etc.) via wtype or clipboard fallback (wl-copy + Ctrl+V). Requires wtype or wl-clipboard installed. |
keyboard_key | key str, screenshot_after_ms? list[int] | Press a key or key combination (e.g., Return, ctrl+c, alt+F4, shift+Tab) |
| keyboard_key_down | key str | Press and hold a key without releasing. Useful for hold
冒頭だけを表示しています。続きはリポジトリで読めます