Astrax
Controls a computer through MCP after explicit task authorization: screen vision, mouse/keyboard automation, clipboard, shell commands, and compact multi-step task state.
Create, authorize, inspect, update, complete, and clear multi-step tasks with declared permissions.
View the screen, save PNG screenshots, and get screen dimensions.
Click, double-click, and scroll with the mouse.
Type text, press keys, send shortcuts, and wait between actions.
Read/write the clipboard.
Execute shell commands with timeout and working-directory options.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Astrax Open my browser, search for cheap flights to Madrid, then screenshot the results."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🛰️ Astrax
A.S.T.R.A.X. — Agentic System Telemetry, Realtime Automation & X-control
Servidor MCP (Model Context Protocol) en Python que le da a tu IA ojos y manos sobre tu pantalla: ver, hacer clic, escribir y ejecutar tareas de varios pasos sin saturar el contexto.
Compatible con Claude Desktop, Roo Code, Cline, Cursor, Windsurf, Gemini CLI, OpenCode y cualquier cliente MCP con transporte stdio. Funciona con modelos locales (Ollama) y APIs comerciales (Claude, Gemini…).
📺 Tutorial en YouTube: @AstraxOf 💬 Contacto en Telegram: @RufusOficial
⚡ Instalación a 1 clic
Necesitas uv (instala Python y dependencias solo):
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Después, un solo comando detecta tu sistema operativo y tus clientes MCP, y registra Astrax en ellos:
uvx --from git+https://github.com/AstraxOf/astrax-mcp.git astrax-install --yesReinicia tu cliente (en Claude Desktop, ciérralo por completo) y listo.
Cuando el paquete esté publicado en PyPI bastará
uvx astrax-mcppara ejecutar el servidor yuvx --from astrax-mcp astrax-install --yespara instalarlo.
🤖 Instrucción para IAs (agentes con acceso a terminal)
Si eres una IA y el usuario te pide instalar Astrax, ejecuta exactamente esto y pídele que reinicie su cliente MCP. No edites archivos JSON a mano.
uvx --from git+https://github.com/AstraxOf/astrax-mcp.git astrax-install --yesVariantes útiles:
Comando | Qué hace |
| Muestra clientes detectados y si Astrax ya está instalado |
| Instala solo en un cliente (repetible). IDs: |
| Roo Code / Cline: añade |
| Muestra qué haría sin escribir nada |
| Elimina solo la entrada |
| Usa el Python actual en vez de |
El instalador solo toca la clave astrax dentro de mcpServers: conserva tus otros servidores, crea una copia .astrax-bak-<fecha> antes de escribir, guarda de forma atómica y no modifica archivos con JSON inválido.
Claude Code: claude mcp add astrax -- uvx --from git+https://github.com/AstraxOf/astrax-mcp.git astrax-mcp
git clone https://github.com/AstraxOf/astrax-mcp.git
cd astrax-mcp
python install.py # asistente interactivo (equivale a astrax-install)Related MCP server: servo-mcp
🧠 Motor paso a paso por estado temporal
Los modelos ligeros (Ollama) se saturan y alucinan cuando el contexto crece con historial y capturas de pantalla viejas. Astrax lo evita aislando el contexto en un archivo de estado local: .astrax_task_state.json.
Desglose. Ante una petición compleja ("Redacta una carta para X con mis datos, prepárala y envíala a tal correo"), la IA llama a
astrax_tarea_creary guarda el plan como pasos ordenados.Lectura directa. Para cada paso, la IA llama a
astrax_tarea_estado: recibe solo el paso actual, el siguiente y los datos guardados (un JSON de unas pocas líneas) en lugar de releer toda la conversación, el prompt inicial o capturas pasadas.Caché de salidas. Al cerrar un paso con
astrax_tarea_completar_paso, la IA guarda lo relevante, por ejemplo{"pdf_generado": "/rutas/carta.pdf"}. El paso siguiente (adjuntar al correo) consulta solo ese dato y usa la ruta exacta, sin adivinarla.Cierre. Al terminar el último paso la tarea queda
completada, los permisos se revocan y se borran las capturas temporales.astrax_tarea_limpiarelimina el archivo.
Detalles que protegen al modelo:
Guarda rutas, no contenidos: cada dato admite hasta 4000 caracteres; si es más, la herramienta pide guardarlo en un archivo y almacenar la ruta.
Anti-bucles: un paso que falla 3 veces pasa a
bloqueaday la IA debe parar y explicar al usuario qué ocurrió.Una imagen por lote, no por acción:
astrax_accionesejecuta varias acciones y devuelve una sola captura final (reducida automáticamente para gastar menos tokens).Ubicación: carpeta privada del usuario (
~/.cache/astrax,~/Library/Caches/astraxo%LOCALAPPDATA%\astrax), con permisos restringidos. Cámbiala conASTRAX_HOME.
🔐 Permisos: una sola autorización por tarea
Antes de ejecutar nada, la IA declara todo lo que necesitará la tarea completa en astrax_tarea_crear:
Permiso | Habilita |
|
|
| todas las acciones de ratón y teclado de |
|
|
|
|
Después muestra el plan y los permisos, pide tu confirmación una sola vez y llama a astrax_tarea_autorizar. Desde ese momento puede trabajar de forma desatendida durante la sesión (60 min por defecto, ASTRAX_SESSION_MINUTES). Las herramientas de acción rechazan cualquier uso fuera de una tarea autorizada o de un permiso no solicitado. Con astrax_acciones los permisos se comprueban para el lote completo antes de empezar: o se puede todo, o no se mueve nada.
Cómo evitar las confirmaciones por paso en tu cliente: el servidor no puede saltarse las confirmaciones que muestra el cliente. Por eso astrax-install --auto-approve (Roo Code / Cline) marca como "permitir siempre" todas las herramientas excepto astrax_tarea_autorizar: tu cliente te pregunta una vez, justo en la autorización, y no durante la ejecución. En otros clientes (p. ej. Claude Desktop) elige "Permitir siempre" en esa herramienta o en el resto cuando te lo pida.
Para volver al comportamiento anterior sin tareas ni sesiones: ASTRAX_REQUIRE_SESSION=0.
✨ ¿Qué puede hacer?
Herramienta | Descripción |
| Guarda el plan por pasos y los permisos que necesita la tarea completa |
| Concede los permisos tras la confirmación del usuario |
| Lee el paso actual, el siguiente y los datos guardados |
| Guarda un dato clave (rutas, ids…) |
| Cierra el paso, guarda salidas y devuelve el siguiente |
| Borra el estado y las capturas temporales |
| Multi-acción: ejecuta N acciones de ratón/teclado en una sola llamada y devuelve una captura final (ver Multi-acción) |
| La IA ve la pantalla (marca roja en el cursor). Admite |
| Guarda un PNG y devuelve la ruta |
| Tamaño real de la pantalla y escala de imagen por defecto |
| Lee o escribe el portapapeles |
| Ejecuta un comando de shell con timeout y salida recortada |
Ejemplo de prompt:
"Usa Astrax: redacta una carta para Ana con mis datos, guárdala como PDF y envíala a ana@ejemplo.com con el asunto 'Propuesta'."
⚡ Multi-acción: una mirada, muchas acciones
Antes, cada acción era un turno: mirar → mover el ratón → mirar → clic → mirar → escribir… Cada turno costaba una ida y vuelta al modelo (latencia) y una imagen (tokens).
Ahora la IA mira una vez, planifica y manda varias acciones juntas con astrax_acciones, y recibe una sola captura al final:
{"acciones": [
{"a": "atajo", "teclas": ["ctrl", "l"]},
{"a": "escribir", "texto": "youtube.com", "enter": true},
{"a": "esperar", "seg": 2},
{"a": "clic", "x": 640, "y": 90},
{"a": "escribir", "texto": "lofi", "enter": true}
]}Cinco acciones = 1 llamada y 1 imagen (antes: 5 y 5).
Migración (v0.3.0):
astrax_clic,astrax_doble_clic,astrax_escribir,astrax_tecla,astrax_atajo,astrax_scrollyastrax_esperarse sustituyen porastrax_acciones(menos herramientas = menos tokens de definición en cada turno). Si usasalwaysAllow, vuelve a ejecutarastrax-install --auto-approve.
Acciones disponibles
Acción | Campos | Para qué |
|
| Posicionar el cursor (hover, mirar con el ratón) |
|
| Clic; sin |
|
| Abrir archivos, seleccionar palabra |
|
| Arrastrar y soltar, seleccionar, mover ventanas |
|
| Pulsar/soltar el botón por separado |
|
| Teclea texto (ñ, tildes y emojis vía portapapeles) |
|
| Una tecla, o atajo con |
|
| 2-4 teclas a la vez |
|
| Mantener/soltar teclas manualmente |
|
| Mantener pulsado mientras pasa algo (correr, apuntar, cargar un disparo) |
|
| Rueda del ratón |
|
| Esperar a que cargue |
|
| Fotograma intermedio barato (hasta 5 por lote) |
|
| Leer/escribir el portapapeles |
|
| Shell (requiere permiso |
|
| Bucle (máx. 2 niveles; máx. 80 acciones por lote tras expandir) |
Opciones de la llamada: captura_final (por defecto true), escala (0.2-1.0) y espera_final (segundos que se deja asentar la interfaz antes de la foto).
Garantías
Validación previa de todo el lote. Antes de mover nada se hace una pasada en seco con los mismos manejadores que la ejecución real: teclas inexistentes, coordenadas fuera de pantalla, campos que faltan, comandos peligrosos, límite de tiempo y permisos. Si algo falla, no se ejecuta ninguna acción y se indica cuál es.
Si falla una acción durante la ejecución, el lote se detiene, se informa cuántas se hicieron y se envía la captura del estado real.
Nada queda pulsado. Teclas y botones mantenidos se sueltan siempre al terminar, incluso con error o fail-safe.
Fail-safe intacto: ratón a una esquina = aborto inmediato.
Menos tokens sin perder precisión
Las imágenes se reducen automáticamente (lado mayor ASTRAX_MAX_LADO, por defecto 1280 px). La IA da siempre coordenadas en píxeles de la última imagen que recibió y el servidor las convierte a la pantalla real; no hay cuentas que hacer. Para leer texto pequeño: astrax_ver_pantalla con region (zoom 1:1) o una acción captura con region.
🎮 Modo juego y tareas "como un humano"
Con ratón, teclado, arrastre, teclas mantenidas, bucles y fotogramas intermedios, la IA puede usar casi cualquier programa o juego como lo haría una persona. Ejemplo (plataformas):
{"acciones": [
{"a": "mantener", "teclas": ["right"], "mientras": [
{"a": "esperar", "seg": 0.4}, {"a": "tecla", "tecla": "space"},
{"a": "esperar", "seg": 0.6}, {"a": "tecla", "tecla": "space"}
]},
{"a": "captura"},
{"a": "tecla", "tecla": "x"}
]}Para jugar: pide "Usa Astrax para jugar a X", autoriza la tarea con pantalla + raton_teclado y (si quieres sesiones largas) sube ASTRAX_SESSION_MINUTES.
Limitación real: la IA decide por turnos y cada llamada tiene la latencia del modelo. Funcionan muy bien los juegos por turnos, de puzles, estrategia, cartas, navegador, idle/clicker y plataformas pausados o tolerantes. Los juegos que exigen reflejos de milisegundos (shooters, ritmo rápido) solo se pueden jugar de forma limitada: mantener, repetir y los fotogramas del lote reducen el problema, pero no lo eliminan. Respeta además los términos de servicio del juego (muchos online prohíben automatizar el input).
Variables de entorno de velocidad
Variable | Defecto | Efecto |
|
| Lado mayor de la imagen enviada (menos = menos tokens) |
|
| Calidad JPEG (30-95) |
|
| Pausa entre acciones de un lote (s) |
|
| Duración del movimiento del ratón antes de clicar (s) |
|
| Pausa entre caracteres al escribir (s) |
|
| Espera antes de la captura final (s) |
|
| Máximo de acciones por lote |
|
| Máximo de esperas + mantenidos por lote (s) |
Si una app ignora clics muy rápidos, sube ASTRAX_MOVE_SEG (p. ej. 0.15) y ASTRAX_PAUSA.
⚙️ Configuración manual
Si prefieres no usar el instalador, añade esto a tu mcp_settings.json (o al archivo equivalente de tu cliente):
{
"mcpServers": {
"astrax": {
"command": "uvx",
"args": ["--from", "git+https://github.com/AstraxOf/astrax-mcp.git", "astrax-mcp"]
}
}
}En clientes de escritorio que no heredan tu
PATH, usa la ruta absoluta deuvx(which uvx/where uvx). El instalador ya lo hace por ti.
🛡️ Seguridad
Astrax controla tu ratón, teclado y (si lo autorizas) tu terminal reales. Úsalo con cabeza:
Fail-safe activo: mueve el ratón a una esquina de la pantalla para abortar cualquier automatización.
Permisos mínimos: la IA solo recibe los permisos que declara y que tú confirmas; se revocan al terminar o al bloquearse la tarea.
Los clics fuera de los límites de la pantalla se rechazan.
astrax_ejecutar_comandobloquea patrones destructivos obvios (rm -rf /,mkfs,format C:,shutdown…). Es una red de seguridad contra accidentes, no un sandbox. Concedeterminalsolo si confías en la tarea y la supervisas.Evita ejecutarlo mientras tengas abiertos datos sensibles (contraseñas, banca, etc.).
🖥️ Notas por sistema operativo
Windows: funciona sin configuración extra.
macOS: concede permisos de Grabación de pantalla y Accesibilidad a tu terminal o editor.
Linux: funciona en X11 (Wayland suele bloquear captura y control). Puede hacer falta
sudo apt install python3-tk python3-dev scrot xclip.
🧩 Arquitectura
astrax-mcp/
├── pyproject.toml # entry points: astrax-mcp, astrax-install
├── install.py # atajo para quien clona el repo
├── mcp_settings.json # ejemplo (Roo Code / Cline)
├── tests/
└── src/astrax_mcp/
├── server.py # construye el servidor y registra los módulos
├── config.py # constantes, rutas y variables ASTRAX_*
├── state.py # motor del archivo de estado de tareas (sin dependencias de MCP)
├── tasks.py # herramientas MCP del gestor de tareas
├── permissions.py # verificación de permisos de sesión
├── vision.py # captura y visión de pantalla
├── acciones.py # motor multi-acción: validación en seco, ejecución, bucles, mantener
├── control.py # herramienta MCP astrax_acciones
├── system.py # terminal y portapapeles
├── gui.py # acceso perezoso a pyautogui + validaciones
├── utils.py # log a stderr, errores uniformes, truncado
├── compat.py # SDK MCP v1 (FastMCP) / v2 (MCPServer)
└── installer.py # wizard de instalación multiplataformaBasado en el SDK oficial de MCP para Python.
compat.pyusaMCPServer(v2) y recurre aFastMCP(v1.x);pyproject.tomlfijamcp<2como en la configuración original: quita el tope cuando pruebes el SDK v2.Transporte
stdio; todos los logs van astderrpara no corromper el flujo JSON-RPC.Las capturas se normalizan al tamaño lógico de pantalla (HiDPI/Retina) y se reducen según
ASTRAX_MAX_LADO; el servidor recuerda la escala de la última imagen y convierte las coordenadas. La calidad JPEG se ajusta conASTRAX_JPEG_QUALITY(30-95, por defecto 65).Tests:
pip install -e ".[dev]" && pytest
🤝 Contribuciones / Community
Astrax es Open Source y crece con la comunidad. Si quieres sumarte, eres bienvenido: puedes abrir issues, enviar pull requests, proponer ideas, probar Astrax en otros sistemas o clientes MCP y reportar errores.
📧 Correo de contacto: avpn497@gmail.com
📢 Canal oficial de Telegram: https://t.me/AstraxMCP — únete al canal para aportar, hacer preguntas o reportar problemas.
📺 YouTube: @AstraxOf — tutoriales y novedades
💬 Creador en Telegram: @RufusOficial
Si te sirvió el proyecto, deja una ⭐ en el repositorio y suscríbete al canal.
Available Tools
18 toolsastrax_atajoA
Atajo de 2-4 teclas simultáneas, p. ej. ["ctrl","t"], ["ctrl","l"], ["alt","tab"].
Inputs: teclas (required). Returns: result
astrax_capturar_pantallaA
Guarda la pantalla como PNG y devuelve su ruta (la IA no la abre; para VER usa astrax_ver_pantalla).
Inputs: nombre_archivo. Returns: result
astrax_clicC
Clic en (x, y), apuntando al CENTRO del elemento. boton: left|right|middle.
Inputs: x (required), y (required), boton. Returns: result
astrax_doble_clicB
Doble clic izquierdo en (x, y) (abrir archivos/iconos, seleccionar palabra).
Inputs: x (required), y (required). Returns: result
astrax_ejecutar_comandoC
Ejecuta un comando de shell (sin entrada interactiva). Devuelve código de salida, stdout y stderr recortados.
Inputs: comando (required), directorio, timeout_seg. Returns: result
astrax_escribirA
Teclea texto en el foco actual (clic antes en el campo). No-ASCII (ñ, tildes, emojis) usa el portapapeles.
Inputs: texto (required). Returns: result
astrax_esperarA
Espera 0.1-15 s (carga de apps o páginas) antes de verificar.
Inputs: segundos. Returns: result
astrax_info_pantallaA
Tamaño de la pantalla en píxeles (origen arriba-izquierda). Llámala una vez.
Inputs: no named parameters. Returns: result
astrax_portapapelesA
Portapapeles: operacion="leer" devuelve su contenido; operacion="escribir" lo reemplaza por texto.
Inputs: operacion (required), texto. Returns: result
astrax_scrollB
Scroll vertical: positivo = arriba, negativo = abajo (-30..30). x,y opcionales (juntos).
Inputs: cantidad (required), x, y. Returns: result
astrax_tarea_autorizarA
Concede los permisos de la tarea durante la sesión. Llamar SOLO tras mostrar el plan y recibir un 'sí' explícito del usuario. Nunca sin preguntarle.
Inputs: confirmacion_usuario (required), permisos_extra. Returns: result
astrax_tarea_completar_pasoB
Cierra el paso actual (exito=true) y devuelve el siguiente, o registra un fallo (exito=false). datos = salidas del paso para los siguientes. Al cerrar el último paso se revocan los permisos.
Inputs: resumen (required), datos, exito. Returns: result
astrax_tarea_crearA
PASO 1 de toda petición multi-paso. Guarda el plan (pasos ordenados, cortos y concretos) en el archivo de estado.
permisos_requeridos: TODO lo que necesitará la tarea completa, de entre pantalla, raton_teclado, portapapeles, terminal. Después muestra plan y permisos al usuario y pide UNA confirmación.
Inputs: pasos (required), objetivo (required), permisos_requeridos (required). Returns: result
astrax_tarea_estadoA
Lee el estado compacto: paso actual, siguiente y datos guardados. Úsalo al empezar cada paso EN LUGAR de releer el historial o capturas viejas.
Inputs: completo. Returns: result
astrax_tarea_guardarA
Guarda un dato clave de la tarea (p. ej. pdf_generado=/ruta/carta.pdf). Guarda RUTAS o valores cortos, no contenidos largos.
Inputs: clave (required), valor (required). Returns: result
astrax_tarea_limpiarA
Borra el archivo de estado y las capturas temporales (descartar o cerrar una tarea).
Inputs: no named parameters. Returns: result
astrax_teclaC
Pulsa una tecla (enter, esc, tab, win, backspace, f5, down...) 1-20 veces.
Inputs: tecla (required), repeticiones. Returns: result
astrax_ver_pantallaA
VE la pantalla (imagen JPEG). Coordenadas 1:1 con astrax_clic; círculo rojo = cursor.
Úsala para verificar el resultado de una acción, no a ciegas tras cada paso trivial.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Tools target distinct actions (key vs shortcut vs click vs double-click vs scroll), and the two screen tools are explicitly differentiated (capturar_pantalla saves PNG, ver_pantalla returns a viewable image). Minor potential confusion between astrax_tecla and astrax_atajo for single-vs-combo keys, and between astrax_clic and astrax_doble_clic, but the descriptions resolve these.
Every tool uses the same astrax_ prefix plus lowercase snake_case Spanish names, with a coherent sub-namespace (astrax_tarea_*) for the task lifecycle. The pattern is fully predictable across all 18 tools.
18 tools is slightly on the heavy side but each earns its place: input (key, shortcut, click, double-click, scroll, type), screen (capture, view, info), clipboard, shell, wait, and a six-tool task lifecycle. Scope is coherent for a desktop-automation server.
Strong coverage: keyboard, mouse, typing, clipboard, screen viewing/capture, shell execution, waiting, plus a full task create/authorize/state/save/complete/clean lifecycle. A few operations like mouse move/hover, key hold, or drag-and-drop are absent, but core RPA workflows are supported.
Maintenance
Related MCP Connectors
Connect AI assistants to your approved computer for files, commands, browser and desktop tasks.
Give your AI hands on every computer you own. Remote control of your Windows, Mac and Linux machines from one ChatGPT, Claude or Cursor chat — even from your phone. Ask it to find out why the office server is crawling, update every PC in the house, sort out your mom's laptop from another city, or ship the site from your work machine while you're on a train. It runs commands, reads files and takes a screenshot when it needs to see the screen. You decide what each computer allows, and you can cut any of them off in a second.
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA local autonomous AI agent that watches your screen, understands the visual layout, and executes native OS commands (clicking, typing) without cloud APIs.39MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to see and control your desktop with tools for screenshots, clicks, typing, and more, all locally on macOS and Windows.210 npmMIT
- AlicenseNot gradedqualityAmaintenanceRealtime PC eyes and hands for any AI agent — provides desktop, browser, file, registry, and OS control via batched execution and lease-based safety gates.MIT
- AlicenseNot gradedqualityBmaintenanceLets AI agents see and control desktop applications through the accessibility layer, enabling clicking, typing, scrolling, dragging, and window/app management across macOS, Windows, and Linux entirely on the local machine.20MIT