Skip to main content
Glama
johnexzy

macos-computer-use

by johnexzy

🍏 Uso de Computadora en macOS (Servidor MCP)

License: MIT Platform Model Context Protocol

Un servidor Model Context Protocol (MCP) nativo y ultrarrápido que brinda a los LLM y agentes autónomos inspección visual y automatización de escritorio con cierre seguro en macOS.

Construido con un núcleo Swift compilado que aprovecha las CoreGraphics nativas de Apple, Vision OCR (VNRecognizeTextRequest) y API de Accesibilidad para acciones de fondo semánticas. La entrada no dirigida sigue siendo un respaldo explícito de CoreGraphics global.


⚡ Aspectos Destacados

  • 🎯 OCR nativo de Apple Vision (find_text / click_text): Encuentra texto visible con coincidencia explícita exact, word, prefix o substring y rechaza clics ambiguos a menos que se seleccione una ocurrencia.

  • 🛡️ Segmentación con cierre seguro: windowId es autoritativo. Los ID no válidos y las discrepancias entre aplicación y ventana devuelven errores en lugar de recurrir a otra ventana o a la pantalla completa.

  • 🔐 Seguro por defecto: La entrada global de puntero/teclado, la activación de la aplicación en primer plano y el AppleScript personalizado están deshabilitados a menos que el proceso MCP se inicie con MACOS_COMPUTER_USE_UNSAFE=1.

  • 🩺 Verificación previa de permisos: get_capabilities informa sobre la preparación de Accesibilidad, Grabación de Pantalla y síntesis de eventos sin llamar a las API de solicitud de permisos de macOS.

  • ♿ Acciones de Accesibilidad en segundo plano: Inspecciona controles, establece valores, ejecuta acciones semánticas y apunta a controles editables sin activar su aplicación.

  • ⏱️ Espera semántica en segundo plano: Espera a que aparezcan controles de Accesibilidad sin tomar una captura de pantalla ni requerir Grabación de Pantalla.

  • 🖱️ Cursor de agente en vivo: Los clics y el desplazamiento deslizan un cursor superpuesto distintivo y transparente hacia el objetivo, muestran comentarios de éxito o fracaso y se desvanecen cuando están inactivos sin mover el puntero físico.

  • 👁️ Cursor coincidente en capturas de pantalla (mark_cursor): Las capturas de pantalla de acciones devueltas representan el mismo cursor de agente en la coordenada objetivo.

  • ⚡ Sincronización reactiva de la interfaz (wait_for_text): Reemplaza los tiempos de espera ciegos sleep() con un bucle de sondeo OCR de alta velocidad que se resuelve en el instante en que aparecen menús desplegables de autocompletado dinámicos, modales o cambios de estado.

  • 🖼️ Captura de pantalla aislada por ventana: Captura los búferes de la aplicación objetivo limpiamente en segundo plano (screencapture -l <wid> -o -x) sin traer la ventana al frente ni capturar ventanas superpuestas.


Related MCP server: ScreenHand

🛠️ Herramientas Expuestas

Herramienta

Descripción

Parámetros Clave

click_text

Encuentra texto OCR, desliza el cursor en vivo hacia él, resuelve la ambigüedad e invoca el control de Accesibilidad coincidente.

text, matchMode, occurrence, appName, windowId, returnScreenshot

find_text

Inspecciona texto en pantalla o específico de una ventana y devuelve cuadros delimitadores exactos y coordenadas lógicas.

text, appName (opcional), windowId (opcional)

wait_for_text

Sondea reactivamente la ventana/pantalla objetivo hasta que aparece el texto esperado (menús desplegables de autocompletado, notificaciones, hojas).

text, appName (opcional), timeoutSeconds (predeterminado: 5.0)

screenshot

Captura la pantalla completa o una ventana de aplicación específica en segundo plano con renderizado opcional de cursor virtual.

appName, windowId, maxWidth, format (jpeg | png), cursor ({x, y})

get_capabilities

Informa sobre la preparación de permisos, detalles de la plataforma y la política segura/insegura activa sin solicitar acceso.

Ninguno

list_windows

Lista las ventanas de aplicaciones abiertas, ID de proceso (pid), títulos y límites de coordenadas en orden Z de adelante hacia atrás.

appName (filtro opcional)

inspect_accessibility

Lee controles semánticos de una ventana exacta en segundo plano. Los valores son privados por defecto y requieren includeValues: true.

appName o windowId, selector, roles, maxResults

wait_for_accessibility

Espera uno o más controles semánticos en una ventana exacta en segundo plano.

appName o windowId, selector, minCount, timeoutMs

set_accessibility_value

Establece un valor de control semántico mientras verifica que el objetivo permaneció en segundo plano.

appName o windowId, selector, value

perform_accessibility_action

Ejecuta acciones press, focus, confirm, cancel, incrementar/decrementar o de menú sin activar la aplicación objetivo.

appName o windowId, selector, action

mouse_click

Desliza el cursor en vivo a (x, y) y luego invoca el control AX dirigido. Los clics globales no dirigidos requieren modo inseguro.

x, y, appName, windowId, relativeCoords, button, clickCount

type_text

Usa entrega dirigida a la aplicación verificada cuando se proporcionan un objetivo y un selector semántico. foreground_allowed requiere modo inseguro.

text, appName o windowId, selector, executionMode

press_key

Envía teclas compatibles a un control editable semántico en modo background_required. foreground_allowed requiere modo inseguro.

key, appName o windowId, selector, executionMode, modifiers

scroll

Desliza el cursor en vivo al objetivo y ajusta una barra de desplazamiento AX. El desplazamiento global no dirigido requiere modo inseguro.

x, y, deltaY, deltaX, appName, windowId

launch_app

Se inicia en segundo plano por defecto. activate: true también requiere modo inseguro.

appName, activate

get_active_app

Devuelve la aplicación en primer plano desde NSWorkspace sin acceso a System Events/Automation.

Ninguno

run_applescript

Ejecuta AppleScript personalizado solo cuando el modo inseguro está habilitado; se omite de la lista de herramientas predeterminada.

script


🚀 Instalación y Configuración

Ejecutar con npx

Configura un cliente MCP para descargar, compilar e iniciar el último paquete público:

{
  "mcpServers": {
    "macos-computer-use": {
      "command": "npx",
      "args": ["-y", "macos-computer-use-mcp"]
    }
  }
}

El paquete incluye un helper Swift universal firmado ad-hoc para Macs con Apple Silicon e Intel, por lo que npx no requiere un compilador Swift local ni aprobación de script de instalación.

La configuración predeterminada expone automatización semántica en segundo plano e inspección de solo lectura. Para flujos de trabajo que necesitan intencionalmente entrada global de puntero/teclado, activación en primer plano o AppleScript arbitrario, opta explícitamente:

{
  "mcpServers": {
    "macos-computer-use": {
      "command": "npx",
      "args": ["-y", "macos-computer-use-mcp"],
      "env": {
        "MACOS_COMPUTER_USE_UNSAFE": "1"
      }
    }
  }
}

1. Requisitos previos

  • macOS 13.0+ (Apple Silicon o Intel)

  • Node.js 20+

  • Xcode Command Line Tools solo al compilar desde el código fuente:

    xcode-select --install

2. Clonar y compilar

git clone https://github.com/johnexzy/macos-computer-use.git
cd macos-computer-use
npm install
npm run build

🔒 Permisos de macOS basados en capacidades

Solo otorga el permiso necesario para las herramientas que uses. macOS atribuye el permiso a la aplicación anfitriona que ejecuta el servidor MCP (Terminal, OpenCode, Cursor, VS Code, etc.):

  1. Accesibilidad: Requerido para inspección y acciones semánticas. No requiere Grabación de Pantalla.

  2. Grabación de Pantalla y Audio del Sistema: Requerido solo para capturas de pantalla y herramientas de OCR de Vision como screenshot, find_text, click_text y wait_for_text.

  3. Síntesis de eventos: Los clics globales de CoreGraphics, escritura, pulsaciones de teclas y desplazamiento en modo inseguro requieren acceso de publicación de eventos. Las acciones semánticas de Accesibilidad no usan este respaldo global.

  4. Automatización: macOS puede solicitarla solo cuando el modo inseguro está habilitado y run_applescript envía un evento a otra aplicación. Las herramientas de entrada y fondo principales usan el helper nativo en lugar de System Events.

Llama a get_capabilities antes de operaciones protegidas. La inspección de permisos usa las API de verificación previa de Apple y no abre un aviso de permiso. Si falta el acceso, las rutas de captura de pantalla/OCR y entrada global devuelven SCREEN_RECORDING_PERMISSION_REQUIRED o INPUT_POSTING_PERMISSION_REQUIRED antes del envío. Otorga acceso manualmente en Configuración del Sistema y luego reconecta el MCP si el anfitrión aún mantiene un estado de privacidad obsoleto.

macOS aún puede requerir que la aplicación anfitriona se reinicie después de un permiso de privacidad recién otorgado. Esto lo impone macOS; el servidor no solicita repetidamente ni pide permisos no relacionados.

La automatización de la interfaz en segundo plano es cooperativa: macOS puede dirigirse a elementos de Accesibilidad en otro proceso, pero una aplicación puede ignorar eventos de teclado dirigidos o cambiar sus identificadores en una versión posterior. Estas herramientas devuelven errores explícitos de no admitido/no confirmado en esos casos en lugar de activar la aplicación o informar un éxito falso.


🔌 Configuración de MCP

Agrega este servidor a la configuración de tu cliente MCP:

Antigravity / Claude Desktop / Cursor / Windsurf

Agrega a tu mcp_config.json / claude_desktop_config.json:

{
  "mcpServers": {
    "macos-computer-use": {
      "command": "node",
      "args": ["/absolute/path/to/macos-computer-use/server.mjs"]
    }
  }
}

🧪 Probando el Helper Swift Nativo Directamente

Puedes probar el binario nativo directamente desde tu terminal:

# Display resolution and scaling
./native_helper size

# List active Chrome windows in Z-order
./native_helper list_windows "Google Chrome"

# Find a button or text on screen with Apple Vision OCR in ~30ms
./native_helper find_text "Search" "Google Chrome"

# Reactively wait for dynamic text to appear
./native_helper wait_for_text "quantum" "Google Chrome" nil 5.0

Ejecuta las regresiones automatizadas de cierre seguro y coincidencia:

npm test

Verifica la inspección semántica contra una ventana de Calculadora en segundo plano:

npm run test:background -- Calculator

Con Calculadora y Configuración del Sistema abiertas, ejecuta la suite de humo de la aplicación nativa en vivo. La prueba opta por el modo inseguro porque usa AppleScript para crear y limpiar archivos de TextEdit:

npm run test:live

Los resultados de herramientas mutantes incluyen un objeto execution con un contrato versionado, método de entrega, nivel de verificación, estado de preservación del primer plano y objetivo. Las acciones basadas en coordenadas conservan status: "delivered_unverified"; verifica el estado posterior consecuente con inspección semántica, OCR o una captura de pantalla.

El servidor MCP inicia un proceso de superposición de cursor perezosamente en el primer clic o desplazamiento y lo detiene cuando se cierra la conexión MCP. La superposición nunca intercepta la entrada del mouse, se une a todos los Spaces y ventanas de pantalla completa, e informa cursorOverlay.status: "unavailable" sin bloquear la acción solicitada si AppKit no puede mostrarla.


📦 Publicación

Los envíos a main ejecutan el flujo de trabajo de publicación npm. Para lanzar una nueva versión, actualiza la versión en package.json y package-lock.json antes de fusionar. Las versiones que ya existen en npm se prueban y se omiten.


📄 Licencia

MIT © John Oba

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    An experimental MCP server providing full control over the macOS user interface through mouse, keyboard, and window management tools. It enables AI assistants to automate desktop tasks by utilizing native accessibility APIs and OCR for real-time screen comprehension.
    7
    Creative Commons Zero v1.0 Universal
  • A
    license
    Not graded
    quality
    F
    maintenance
    An open-source MCP server for macOS and Windows that provides native desktop control via Accessibility APIs, OCR, and Chrome CDP. It enables AI agents to interact with applications, manage browser sessions, and automate workflows with high-speed native UI actions.
    91 npm
    15
    AGPL 3.0