Skip to main content
Glama

desktop-mcp

Desktop-Sicht und -Steuerung für LLMs auf Linux, einschließlich Wayland – das Modell macht einen Screenshot des gesamten Bildschirms und klickt, tippt und scrollt auf dem, was es sieht. Einfaches MCP über stdio, sodass es in Claude Code, Claude Desktop, Cursor oder jedem anderen MCP-Client funktioniert.

Lesen Sie dies zuerst: Sie brauchen das vielleicht nicht

Anthropic liefert Computer Use nativ aus, und wo das funktioniert, sollten Sie es stattdessen verwenden – es ist besser integriert und wird tatsächlich gepflegt:

  • macOS und Windows: Claude Desktop hat Computer Use integriert, in Cowork und Claude Code. Es steuert Ihren echten Desktop. (Dokumentation)

  • Eigene Agenten bauen: Die Claude API hat ein First-Party-computer-Tool (GA als computer_toolset_20260801-Toolset). (Dokumentation)

Die Lücke, die dies füllt, ist Linux. Stand August 2026 ist Computer Use in der Linux-Desktop-App nicht verfügbar, und Desktop-Automatisierung unter Wayland ist wirklich umständlich, wie es X11 nie war:

  • Der Compositor von COSMIC implementiert kein wlr-screencopy, daher schlägt grim komplett fehl und jedes Screenshot-Tool benötigt einen pro-Compositor-Pfad.

  • Es gibt kein Protokoll, um die Cursorposition abzufragen, und keins, um die Fenster eines anderen Clients aufzulisten.

  • Eingaben müssen unterhalb des Compositors über /dev/uinput erfolgen, da das üblicherweise gepackte ydotool einen relativen Zeiger bereitstellt, dessen lange Sprünge durch die Zeigerbeschleunigung verzerrt werden.

Wenn Sie auf macOS oder Windows sind, ist dieses Repo größtenteils redundant. Wenn Sie auf Linux sind – insbesondere Wayland – ist es die funktionierende Option.

Desktop-Automatisierungs-MCP-Server sind keine neue Kategorie; es gibt Tausende von MCP-Servern. Was hier spezifisch ist, ist der Wayland-native absolute-uinput-Eingabepfad, der auf COSMIC pixelgenau gemessen wurde.

Related MCP server: mcp-linux-desktop

Status

Geschrieben, um plattformübergreifend zu sein, aber nur eine Konfiguration wurde tatsächlich getestet. Der Rest sind Codepfade, keine Beweise – behandeln Sie es entsprechend.

Plattform

Screenshot

Eingabe

Getestet

Linux / Wayland

cosmic-screenshot, grim, spectacle, GNOME D-Bus

/dev/uinput

Ja — nur COSMIC

Linux / X11

maim, ImageMagick import, mss

/dev/uinput, xdotool

Nein

macOS

screencapture

pyautogui

Nein

Windows

mss, PowerShell

pyautogui

Nein

Was getestet wurde, und wie

End-to-End verifiziert auf:

  • Pop!_OS 24.04 LTS, Kernel 7.0.11, COSMIC (cosmic-comp 1.0.0), Wayland, einzelnes 2560x1440-Display, Python 3.13.

Ergebnisse:

Prüfung

Methode

Ergebnis

Screenshot

cosmic-screenshot-Backend

2560x1440 erfasst, auf 1400x788 verkleinert

Zeigergenauigkeit

5 Zielpunkte, über XWayland zurückgelesen

5/5 exakt, 0px Fehler

Tasten und Scrollen

xev-Ereignisprotokoll

ButtonPress/Release für Tasten 1, 3, 4

Ziehen

xev-Bewegungszähler

26 MotionNotify-Ereignisse zwischen Drücken und Loslassen

Tippen

Sowohl wtype als auch rohe uinput-Tastencodes

Text landete in einem fokussierten Editor

Tastenkombinationen

ctrl+a in einem Editor

Angewendet

Klick über MCP

Vollständiger stdio-Roundtrip gegen eine native Wayland-App

Neuer Tab geöffnet

Ungetestet und wissenswert: Multi-Monitor-Layouts, HiDPI-Skalierung, Nicht-US-Tastaturlayouts auf dem rohen Tastencode-Pfad (wtype behandelt diese korrekt; uinput-Tastencodes gehen von US aus), und jeder Nicht-COSMIC-Compositor.

Berichte von anderen Plattformen sind willkommen – desktop_info gibt alles aus, was zur Diagnose eines Backend-Problems benötigt wird.

Install

git clone <this repo> && cd desktop-mcp
uv venv && uv pip install -e .

macOS, Windows und Linux/X11 benötigen außerdem die Eingabeabhängigkeiten:

uv pip install -e ".[gui]"

Linux: einmalige Berechtigungseinrichtung

Das Injizieren von Eingaben unter Wayland bedeutet, in /dev/uinput zu schreiben, das standardmäßig root gehört:

bash scripts/setup-linux.sh   # needs sudo once
# then log out and back in

macOS: einmalige Berechtigungseinrichtung

Gewähren Sie Bildschirmaufnahme und Bedienungshilfen der App, die den Server startet (Terminal, iTerm, Claude Desktop), in Systemeinstellungen → Datenschutz & Sicherheit.

Verbinden

Claude Code:

claude mcp add desktop -- /absolute/path/to/desktop-mcp/.venv/bin/python -m desktop_mcp.server

Claude Desktop (claude_desktop_config.json) und Cursor (.cursor/mcp.json) verwenden dieselbe Struktur:

{
  "mcpServers": {
    "desktop": {
      "command": "/absolute/path/to/desktop-mcp/.venv/bin/python",
      "args": ["-m", "desktop_mcp.server"]
    }
  }
}

Werkzeuge

Werkzeug

Zweck

screenshot

Desktop erfassen

click

Links-/Rechts-/Mittelklick, einfach oder doppelt

move

Zeiger bewegen ohne zu klicken (Hover)

drag

Drücken, bewegen, loslassen – Auswahlen, Schieberegler, Fenster verschieben

scroll

Mausrad scrollen unter einem Punkt

type_text

In das fokussierte Element tippen

key

Tastenkombinationen wie ctrl+s, alt+tab, cmd+space

cursor_position

Wo sich der Zeiger befindet

list_windows

Offene Fenster, wo das Betriebssystem es erlaubt

wait

Pause, dann erneut schauen

desktop_info

Umgebung, aktive Backends, Sicherheitseinstellungen

Koordinaten

Screenshots werden vor dem Senden verkleinert (standardmäßig 1400px lange Kante), sodass das Modell in Bild-Pixeln arbeitet; der Server bildet sie bei jedem Aufruf auf Bildschirmpixel zurück. Übergeben Sie genau die Koordinaten, die Sie vom Screenshot ablesen.

Dies ist das Detail, das die meisten selbstgebauten Computer-Use-Tools falsch machen. Wenn Sie es verpassen, landet jeder Klick bei einem konsistenten Bruchteil des Ziels.

Warum /dev/uinput statt ydotool auf Linux

Üblicherweise gepackte ydotool-Builds stellen einen relativen Zeiger bereit, sodass ein Sprung zu (1280, 720) als eine große relative Bewegung geliefert wird – die der Compositor durch die Zeigerbeschleunigung laufen lässt. Der Cursor landet in der Nähe des Ziels statt darauf, und der Fehler wächst mit der Entfernung. Ein absolutes uinput-Gerät umgeht die Beschleunigung: gemessen 5/5 exakt auf einem 2560x1440-Bildschirm. ydotool bleibt ein Fallback, wenn /dev/uinput nicht beschreibbar ist.

Klick-Timing

Compositors verteilen Zeigerbewegungen asynchron, und Toolkits ignorieren einen Tastendruck, der ankommt, bevor sie die Bewegung verarbeitet haben, die den Cursor über das Widget gebracht hat. Auf COSMIC gemessen: Eine Lücke von 30ms zwischen Bewegung und Drücken hebt einen Button zuverlässig hervor, aktiviert ihn aber nie – der Hover-Zustand ist der Beweis, dass die Koordinaten stimmen, was diesen Fehler leicht als Zielproblem fehlinterpretieren lässt. 250ms aktiviert ihn. Ein Druck muss auch gehalten werden (~90ms), um als echter Klick statt als verirrtes Ereignis zu registrieren.

Beide Verzögerungen sind einstellbar; senken Sie sie nur, wenn Ihr Desktop das toleriert.

Sicherheit

Dies gibt einem Modell die gleiche Reichweite über die Maschine wie der Person, die davor sitzt. Es kann alles auf dem Bildschirm lesen – geöffnete Passwortmanager, private Nachrichten, Tokens – und auf alles klicken, einschließlich destruktiver Schaltflächen. Behandeln Sie eine Sitzung so, als hätten Sie jemandem Ihre Tastatur übergeben.

Umgebungsvariablen:

Variable

Standard

Wirkung

DESKTOP_MCP_READ_ONLY

aus

Screenshots erlaubt, alle Eingaben verweigert

DESKTOP_MCP_RATE_LIMIT

240

Maximale Eingabeaktionen pro Minute

DESKTOP_MCP_BLOCK_KEYS

Zusätzliche, durch Kommas getrennte Tastenkombinationen, die abgelehnt werden

DESKTOP_MCP_AUDIT_LOG

Jede Aktion an diese Datei anhängen

DESKTOP_MCP_MAX_EDGE

1400

Lange Kante des Screenshots in Pixeln

DESKTOP_MCP_MOVE_SETTLE

0.25

Sekunden zwischen Bewegen des Zeigers und Drücken

DESKTOP_MCP_PRESS_HOLD

0.09

Sekunden, die eine Maustaste gedrückt gehalten wird

ctrl+alt+F1F12 sind immer blockiert; VT-Umschaltung kann die grafische Sitzung unter Ihnen wegziehen.

Ein schreibgeschütztes Prüf-Setup:

DESKTOP_MCP_READ_ONLY=1 python -m desktop_mcp.server

Verifizieren

.venv/bin/python scripts/mcp_smoke.py   # real stdio MCP round trip
Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Controls a real Linux desktop from any MCP host. Reads accessibility trees, takes screenshots, and drives clicks, scrolls, and keystrokes across GNOME, KDE/KWin, Hyprland, i3, and COSMIC.
    671
    395
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables full Linux desktop control including windows, mouse, keyboard, clipboard, audio, screenshots, OCR, accessibility, and system management through MCP-compatible AI agents.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that gives a model eyes and hands on a Linux Wayland desktop, enabling screenshot capture, mouse/keyboard control, OCR, and icon detection via OmniParser.
    1
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLM agents to capture screenshots, control mouse/keyboard, and manage windows on desktop platforms, primarily Windows, via an MCP server.
    16
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Zetakai/desktop-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server