Skip to main content
Glama

desktop-mcp

Visión y control de escritorio para LLMs en Linux, incluido Wayland — el modelo toma una captura de pantalla de toda la pantalla y hace clic, escribe y desplaza sobre lo que ve. MCP simple sobre stdio, por lo que funciona en Claude Code, Claude Desktop, Cursor o cualquier otro cliente MCP.

Léelo primero: puede que no lo necesites

Anthropic incluye el uso de computadora de forma nativa, y donde eso funcione deberías usarlo en su lugar: está mejor integrado y realmente se mantiene:

  • macOS y Windows: Claude Desktop tiene el uso de computadora integrado, en Cowork y Claude Code. Controla tu escritorio real. (docs)

  • Construyendo tu propio agente: la API de Claude tiene una herramienta computer de primera parte (GA como el conjunto de herramientas computer_toolset_20260801). (docs)

El vacío que esto llena es Linux. A partir de agosto de 2026, el uso de computadora no está disponible en la aplicación de escritorio de Linux, y la automatización de escritorio en Wayland es genuinamente incómoda de una manera que X11 nunca lo fue:

  • El compositor de COSMIC no implementa wlr-screencopy, por lo que grim falla por completo y cada herramienta de captura de pantalla necesita una ruta por compositor.

  • No hay protocolo para consultar la posición del cursor, ni para enumerar las ventanas de otro cliente.

  • La entrada debe ir por debajo del compositor a través de /dev/uinput, porque el ydotool comúnmente empaquetado expone un puntero relativo cuyos saltos largos se estropean con la aceleración del puntero.

Si estás en macOS o Windows, este repositorio es en su mayoría redundante. Si estás en Linux — particularmente Wayland — es la opción que funciona.

Los servidores MCP de automatización de escritorio no son una categoría nueva; hay miles de servidores MCP. Lo específico aquí es la ruta de entrada absoluta-uinput nativa de Wayland, medida con precisión de píxel en COSMIC.

Related MCP server: mcp-linux-desktop

Estado

Escrito para ser multiplataforma, pero solo una configuración se ha ejercitado realmente. El resto son rutas de código, no evidencia: trátalo en consecuencia.

Plataforma

Captura de pantalla

Entrada

Probado

Linux / Wayland

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

/dev/uinput

— solo COSMIC

Linux / X11

maim, ImageMagick import, mss

/dev/uinput, xdotool

No

macOS

screencapture

pyautogui

No

Windows

mss, PowerShell

pyautogui

No

Qué se probó y cómo

Verificado de extremo a extremo en:

  • Pop!_OS 24.04 LTS, kernel 7.0.11, COSMIC (cosmic-comp 1.0.0), Wayland, pantalla única 2560x1440, Python 3.13.

Resultados:

Comprobación

Método

Resultado

Captura de pantalla

cosmic-screenshot backend

2560x1440 capturado, reducido a 1400x788

Precisión del puntero

5 puntos objetivo, leídos a través de XWayland

5/5 exacto, error de 0px

Botones y desplazamiento

Registro de eventos xev

ButtonPress/Release para botones 1, 3, 4

Arrastre

Conteo de movimiento xev

26 eventos MotionNotify entre pulsación y liberación

Escritura

Tanto wtype como códigos de tecla uinput crudos

El texto llegó a un editor enfocado

Acordes

ctrl+a en un editor

Aplicado

Clic vía MCP

Viaje de ida y vuelta completo por stdio contra una app nativa de Wayland

Se abrió una nueva pestaña

No probado y vale la pena saberlo: diseños de múltiples monitores, escalado HiDPI, diseños de teclado no estadounidenses en la ruta de códigos de tecla crudos (wtype los maneja correctamente; los códigos de tecla uinput asumen US), y cada compositor que no sea COSMIC.

Se agradecen informes de otras plataformas: desktop_info vuelca todo lo necesario para diagnosticar un problema de backend.

Instalación

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

macOS, Windows y Linux/X11 también necesitan las dependencias de entrada:

uv pip install -e ".[gui]"

Linux: configuración de permisos única

Inyectar entrada en Wayland significa escribir en /dev/uinput, que es propiedad de root por defecto:

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

macOS: configuración de permisos única

Concede Grabación de pantalla y Accesibilidad a la aplicación que inicie el servidor (Terminal, iTerm, Claude Desktop) en Configuración del sistema → Privacidad y seguridad.

Conéctalos

Claude Code:

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

Claude Desktop (claude_desktop_config.json) y Cursor (.cursor/mcp.json) usan la misma forma:

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

Herramientas

Herramienta

Propósito

screenshot

Capturar el escritorio

click

Clic izquierdo/derecho/medio, simple o doble

move

Mover el puntero sin hacer clic (hover)

drag

Pulsar, mover, soltar: selecciones, deslizadores, movimientos de ventana

scroll

Desplazamiento de rueda bajo un punto

type_text

Escribir en el elemento enfocado

key

Acordes como ctrl+s, alt+tab, cmd+space

cursor_position

Dónde está el puntero

list_windows

Ventanas abiertas, donde el sistema operativo lo permita

wait

Pausar y luego mirar de nuevo

desktop_info

Entorno, backends activos, ajustes de seguridad

Coordenadas

Las capturas de pantalla se reducen (borde largo de 1400px por defecto) antes de enviarse, por lo que el modelo trabaja en píxeles de imagen; el servidor los mapea de vuelta a píxeles de pantalla en cada llamada. Pasa exactamente las coordenadas que lees de la captura.

Este es el detalle que la mayoría de las herramientas caseras de uso de computadora fallan. Si lo omites, cada clic aterriza en una fracción consistente de donde se apuntaba.

Por qué /dev/uinput en lugar de ydotool en Linux

Las compilaciones de ydotool comúnmente empaquetadas exponen un puntero relativo, por lo que un salto a (1280, 720) se entrega como un gran movimiento relativo, que el compositor pasa por la aceleración del puntero. El cursor aterriza cerca del objetivo en lugar de sobre él, y el error crece con la distancia. Un dispositivo uinput absoluto evita la aceleración: medido 5/5 exacto en una pantalla de 2560x1440. ydotool sigue siendo un respaldo cuando /dev/uinput no es escribible.

Tiempo de clic

Los compositores despachan el movimiento del puntero de forma asíncrona, y los toolkits ignoran una pulsación de botón que llega antes de que hayan procesado el movimiento que puso el cursor sobre el widget. Medido en COSMIC: un intervalo de 30ms entre mover y pulsar resalta de manera confiable un botón pero nunca lo activa: el estado de hover es prueba de que las coordenadas son correctas, lo que hace que este fallo sea fácil de malinterpretar como un error de apuntado. 250ms lo activa. Una pulsación también debe mantenerse (~90ms) para registrarse como un clic real en lugar de un evento suelto.

Ambos retrasos son ajustables; bájalos solo si tu escritorio lo tolera.

Seguridad

Esto le da a un modelo el mismo alcance sobre la máquina que la persona sentada frente a ella. Puede leer cualquier cosa en pantalla — administradores de contraseñas abiertos, mensajes privados, tokens — y hacer clic en cualquier cosa, incluidos botones destructivos. Trata una sesión como si le hubieras entregado tu teclado a alguien.

Variables de entorno:

Variable

Por defecto

Efecto

DESKTOP_MCP_READ_ONLY

off

Capturas de pantalla permitidas, toda entrada rechazada

DESKTOP_MCP_RATE_LIMIT

240

Máximo de acciones de entrada por minuto

DESKTOP_MCP_BLOCK_KEYS

Acordes adicionales separados por comas a rechazar

DESKTOP_MCP_AUDIT_LOG

Añade cada acción a este archivo

DESKTOP_MCP_MAX_EDGE

1400

Borde largo de la captura en píxeles

DESKTOP_MCP_MOVE_SETTLE

0.25

Segundos entre mover el puntero y pulsar

DESKTOP_MCP_PRESS_HOLD

0.09

Segundos que se mantiene presionado un botón del ratón

ctrl+alt+F1F12 siempre están bloqueados; el cambio de VT puede sacar la sesión gráfica de debajo de ti.

Una configuración de revisor de solo lectura:

DESKTOP_MCP_READ_ONLY=1 python -m desktop_mcp.server

Verificar

.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