Servidor MCP de macOS Automator
Descripción general
Este proyecto proporciona un servidor de Protocolo de Contexto de Modelo (MCP), macos_automator
, que permite la ejecución de scripts de AppleScript y JavaScript para Automatización (JXA) en macOS. Incluye una base de conocimiento de scripts predefinidos accesibles por ID y admite scripts en línea, archivos de script y paso de argumentos. La base de conocimiento se carga de forma diferida al primer uso para un inicio rápido del servidor.
Beneficios
- Ejecute scripts AppleScript/JXA de forma remota a través de MCP.
- Utilice una base de conocimiento rica y extensible de tareas comunes de automatización de macOS.
- Controle las aplicaciones macOS y las funciones del sistema mediante programación.
- Integre la automatización de macOS en flujos de trabajo más amplios impulsados por IA.
Prerrequisitos
- Node.js (versión >=18.0.0 recomendada, ver motores
package.json
). - macOS.
- CONFIGURACIÓN DE PERMISOS CRÍTICOS:
- La aplicación que ejecuta ESTE servidor MCP (por ejemplo, Terminal, su aplicación Node.js) requiere permisos de usuario explícitos en la máquina macOS donde se ejecuta el servidor.
- Permisos de automatización: Para controlar otras aplicaciones (Finder, Safari, Mail, etc.).
- Vaya a: Configuración del sistema > Privacidad y seguridad > Automatización.
- Busque la aplicación que ejecuta el servidor (por ejemplo, Terminal) en la lista.
- Asegúrese de que tenga casillas de verificación marcadas para todas las aplicaciones que necesita controlar.
- Ver ejemplo:
docs/automation-permissions-example.png
(imagen de marcador de posición).
- Permisos de accesibilidad: para scripts de UI a través de "Eventos del sistema" (por ejemplo, simulación de clics, pulsaciones de teclas).
- Vaya a: Configuración del sistema > Privacidad y seguridad > Accesibilidad.
- Agregue la aplicación que ejecuta el servidor (por ejemplo, Terminal) a la lista y asegúrese de que su casilla de verificación esté marcada.
- Los primeros intentos de controlar una nueva aplicación o usar funciones de accesibilidad podrían generar un mensaje de confirmación de macOS, incluso con autorización previa. El servidor no puede otorgar estos permisos.
Instalación y uso
La forma principal de ejecutar este servidor es mediante npx
. Esto garantiza que se use la última versión sin necesidad de una instalación global.
Agregue la siguiente configuración al mcp.json
de su cliente MCP (o configuración equivalente):
Ejecución local (para desarrollo o uso directo)
Como alternativa, para desarrollo o si prefiere ejecutar el servidor directamente desde un repositorio clonado, puede usar el script start.sh
proporcionado. Esto resulta útil si desea realizar modificaciones locales o ejecutar una versión específica.
- Clonar el repositorio:
- Configure su cliente MCP: actualice la configuración de su cliente MCP para que apunte a la ruta absoluta del script
start.sh
dentro de su repositorio clonado.Ejemplo de fragmento de configuraciónmcp.json
:Importante: reemplace/absolute/path/to/your/cloned/macos-automator-mcp/start.sh
con la ruta absoluta correcta en su sistema.El scriptstart.sh
usará automáticamentetsx
para ejecutar el código fuente de TypeScript directamente si no se encuentra una versión compilada, o bien, ejecutará la versión compilada desdedist/
si está disponible. Respeta la variable de entornoLOG_LEVEL
.Nota para desarrolladores: El scriptstart.sh
, especialmente si se modifica para eliminar cualquierdist/server.js
compilado previamente antes de la ejecución (p. ej., añadiendorm -f dist/server.js
), está diseñado para garantizar que siempre se ejecute el código TypeScript más reciente desde el directoriosrc/
mediantetsx
. Esto es ideal para el desarrollo, ya que evita problemas con compilaciones obsoletas. Para la implementación en producción (p. ej., al publicar en npm), un proceso de compilación normalmente crearía undist/server.js
definitivo, que sería el punto de entrada para el paquete publicado.
Herramientas proporcionadas
1. execute_script
Ejecuta un script de AppleScript o JavaScript para Automatización (JXA) en macOS. Los scripts pueden proporcionarse como contenido en línea ( script_content
), una ruta de archivo absoluta ( script_path
) o haciendo referencia a un script de la base de conocimiento integrada mediante su kb_script_id
único.
Fuentes de script (mutuamente excluyentes):
script_content
(cadena): código de script sin procesar.script_path
(cadena): ruta POSIX absoluta a un archivo de script (por ejemplo,.applescript
,.scpt
,.js
).kb_script_id
(cadena): El ID de un script predefinido de la base de conocimientos del servidor. Utilice la herramientaget_scripting_tips
para descubrir los ID de script disponibles y sus funcionalidades.
Especificación del idioma:
language
(enum: 'applescript' | 'javascript', opcional): especifica el idioma.- Si se utiliza
kb_script_id
, el idioma se infiere del script de la base de conocimiento. - Si se utiliza
script_content
oscript_path
y se omitelanguage
, el valor predeterminado es 'applescript'.
- Si se utiliza
Pasando entradas a scripts:
arguments
(matriz de cadenas, opcional):- Para
script_path
: se pasan como argumentos estándar al controladoron run argv
(AppleScript) orun(argv)
(JXA) del script durante su ejecución. - Para
kb_script_id
: Se usa si el script predefinido está diseñado para aceptar argumentos de cadena posicionales (p. ej., reemplaza marcadores de posición como--MCP_ARG_1
o--MCP_ARG_2
). Consulte elargumentsPrompt
del script enget_scripting_tips
.
- Para
input_data
(objeto JSON, opcional):- Principalmente para scripts
kb_script_id
diseñados para aceptar entradas estructuradas y con nombre. - Los valores de este objeto reemplazan los marcadores de posición en el script (p. ej.,
--MCP_INPUT:yourKeyName
). ConsulteargumentsPrompt
deget_scripting_tips
. - Los valores (cadenas, números, valores booleanos, matrices/objetos simples) se convierten en sus equivalentes literales de AppleScript.
- Principalmente para scripts
Otras opciones:
timeout_seconds
(entero, opcional, predeterminado: 60): tiempo máximo de ejecución.output_format_mode
(enum, opcional, predeterminado: 'auto'): controla los indicadores de formato de salidaosascript
.'auto'
: (predeterminado) utiliza código legible para AppleScript (-sh
) y salida directa (sin indicadores-s
) para JXA.'human_readable'
: Fuerza-sh
(salida legible por humanos, principalmente para AppleScript).'structured_error'
: Fuerza-ss
(informe de error estructurado, principalmente para AppleScript).'structured_output_and_error'
: Fuerza-s ss
(salida estructurada para el resultado principal y los errores, principalmente para AppleScript).'direct'
: no se utilizan indicadores-s
(recomendado para JXA, también el comportamiento para JXA en modoauto
).
include_executed_script_in_output
(booleano, opcional, valor predeterminado: false): Si es true, la salida incluirá el contenido completo del script (después de cualquier sustitución de marcadores de posición para scripts de la base de conocimiento) o la ruta del script ejecutado. Esto se añade como texto adicional en la matriz de contenido de salida.include_substitution_logs
(booleano, opcional, valor predeterminado: false): Si es true, se incluyen en la salida registros detallados de las sustituciones de marcadores de posición realizadas en scripts de la base de conocimiento. Esto resulta útil para depurar el procesamiento e inserción deinput_data
yarguments
en el script. Los registros se añaden al inicio de la salida del script en caso de éxito o al mensaje de error en caso de error.report_execution_time
(booleano, opcional, predeterminado: falso): si estrue
, se incluirá un mensaje adicional con el tiempo de ejecución del script formateado en la matriz de contenido de respuesta.
ADVERTENCIA DE SEGURIDAD Y PERMISOS DE MACOS: (Las mismas advertencias críticas que antes sobre la ejecución de scripts arbitrarios y los permisos de Automatización/Accesibilidad de macOS).
Ejemplos:
- (Los ejemplos existentes de rutas en línea/archivo siguen siendo relevantes)
- Uso del script de base de conocimientos por ID:
- Uso del script de base de conocimientos por ID con
input_data
:
Formato de respuesta:
La herramienta execute_script
devuelve una respuesta en el siguiente formato:
content
: una matriz de elementos de contenido de texto que contienen la salida del scriptisError
: (booleano, opcional) Se establece comotrue
cuando la ejecución del script produjo un error. Este indicador se establece cuando:- La salida del script (stdout) comienza con "Error" (sin distinguir entre mayúsculas y minúsculas)
- Esto ayuda a los clientes a determinar fácilmente si la ejecución falló sin analizar el texto de salida.
Ejemplo de respuesta (éxito):
Ejemplo de respuesta (error):
2. get_scripting_tips
Recupera consejos, ejemplos y detalles de scripts ejecutables de AppleScript/JXA de la base de conocimientos del servidor. Resulta útil para descubrir los scripts disponibles, sus funcionalidades y cómo usarlos con execute_script
(especialmente kb_script_id
).
Argumentos:
list_categories
(booleano, opcional, valor predeterminado: false): Si es true, devuelve solo la lista de categorías disponibles de la base de conocimiento y sus descripciones. Anula otros parámetros.category
(cadena, opcional): filtra las sugerencias por un ID de categoría específico (por ejemplo, "buscador", "safari").search_term
(cadena, opcional): busca una palabra clave dentro de títulos de sugerencias, descripciones, contenido de scripts, palabras clave o ID.refresh_database
(booleano, opcional, valor predeterminado: false): Si es true, fuerza la recarga de toda la base de conocimiento desde el disco antes de procesar la solicitud. Esto es útil durante el desarrollo si se modifican activamente los archivos de la base de conocimiento y se desea garantizar que se utilicen las versiones más recientes sin reiniciar el servidor.limit
(entero, opcional, predeterminado: 10): número máximo de resultados a devolver.
Producción:
- Devuelve una cadena con formato Markdown que contiene los consejos solicitados, incluido su título, descripción, contenido del script, idioma, ID ejecutable (si corresponde), indicaciones de argumentos y notas.
Ejemplo de uso:
- Listar todas las categorías:
{ "toolName": "get_scripting_tips", "input": { "list_categories": true } }
- Obtén consejos para la categoría "safari":
{ "toolName": "get_scripting_tips", "input": { "category": "safari" } }
- Buscar consejos relacionados con "clipboard":
{ "toolName": "get_scripting_tips", "input": { "search_term": "clipboard" } }
Casos de uso y ejemplos clave
- Control de aplicaciones:
- Obtener la URL actual de Safari:
{ "input": { "script_content": "tell application \"Safari\" to get URL of front document" } }
- Obtener los asuntos de los correos electrónicos no leídos en Mail:
{ "input": { "script_content": "tell application \"Mail\" to get subject of messages of inbox whose read status is false" } }
- Obtener la URL actual de Safari:
- Operaciones del sistema de archivos:
- Lista de archivos en el escritorio:
{ "input": { "script_content": "tell application \"Finder\" to get name of every item of desktop" } }
- Crear nueva carpeta:
{ "input": { "script_content": "tell application \"Finder\" to make new folder at desktop with properties {name:\"My New Folder\"}" } }
- Lista de archivos en el escritorio:
- Interacciones del sistema:
- Mostrar una notificación del sistema:
{ "input": { "script_content": "display notification \"Important Update!\" with title \"System Alert\"" } }
- Establecer el volumen del sistema:
{ "input": { "script_content": "set volume output volume 50" } }
(0-100) - Obtener el contenido actual del portapapeles:
{ "input": { "script_content": "the clipboard" } }
- Mostrar una notificación del sistema:
Solución de problemas
- Errores de permisos: si los scripts no pueden controlar las aplicaciones o realizar acciones de la interfaz de usuario, verifique nuevamente los permisos de Automatización y Accesibilidad en la Configuración del sistema para la aplicación que ejecuta el servidor MCP (por ejemplo, Terminal).
- Errores de sintaxis de script: Los errores
osascript
se devolverán en elstderr
o en un mensaje de error. Pruebe primero los scripts complejos localmente con el Editor de Scripts (para AppleScript) o un ejecutor JXA. - Tiempos de espera: Si un script tarda más de
timeout_seconds
(predeterminado: 60 s), se finalizará. Aumente el tiempo de espera para scripts de larga duración. - Archivo no encontrado: asegúrese de que
script_path
sea una ruta POSIX absoluta accesible para el usuario que ejecuta el servidor MCP. - Problemas de salida incorrecta/JXA: Para scripts JXA, especialmente aquellos que usan puentes Objective-C, asegúrese de que
output_format_mode
esté configurado en'direct'
o'auto'
(predeterminado). El uso de indicadores de formato específicos de AppleScript, comohuman_readable
, con JXA puede causar errores. Si la salida de AppleScript no se analiza correctamente, pruebe constructured_output_and_error
ostructured_error
.
Configuración mediante variables de entorno
LOG_LEVEL
: establece el nivel de registro para el servidor.- Valores:
DEBUG
,INFO
,WARN
,ERROR
- Ejemplo:
LOG_LEVEL=DEBUG npx @steipete/macos-automator-mcp@latest
- Valores:
KB_PARSING
: controla cuándo se analiza la base de conocimientos (sugerencias de script).- Valores:
lazy
(predeterminado): La base de conocimientos se analiza en la primera solicitud aget_scripting_tips
o cuando se utiliza unkb_script_id
enexecute_script
. Esto permite un inicio más rápido del servidor.eager
: La base de conocimientos se analiza al iniciar el servidor. Esto puede aumentar ligeramente el tiempo de inicio, pero garantiza que la base de conocimientos esté disponible de inmediato y que cualquier error de análisis se detecte a tiempo.
- Ejemplo (cuando se ejecuta a través de
start.sh
o similar): - Ejemplo (al configurar a través de un ejecutor MCP que admite
env
, comomcp-agentify
):
- Valores:
Para desarrolladores
Para obtener instrucciones detalladas sobre el desarrollo local, la estructura del proyecto (incluida la knowledge_base
) y las pautas de contribución, consulte DEVELOPMENT.md .
Desarrollo
Consulte DEVELOPMENT.md para obtener detalles sobre la estructura, la construcción y las pruebas del proyecto.
Base de conocimientos locales
Puedes complementar la base de conocimientos integrada con tus propias sugerencias locales y controladores compartidos. Crea una estructura de directorios idéntica a la de knowledge_base
en este repositorio (o un subconjunto de ella).
De forma predeterminada, la aplicación buscará esta base de conocimiento local en ~/.macos-automator/knowledge_base
. Puede personalizar esta ruta configurando la variable de entorno LOCAL_KB_PATH
.
Ejemplo:
Supongamos que tiene una base de conocimiento local en /Users/yourname/my-custom-kb
. Establezca la variable de entorno: export LOCAL_KB_PATH=/Users/yourname/my-custom-kb
O bien, si está ejecutando el script de validación, puede usar el argumento --local-kb-path
: npm run validate:kb -- --local-kb-path /Users/yourname/my-custom-kb
Estructura y anulaciones:
- Su base de conocimiento local debe reflejar la estructura de categorías de la
knowledge_base
principal (por ejemplo,01_applescript_core
,05_web_browsers/safari
, etc.). - Puede agregar nuevos archivos de sugerencias
.md
o_shared_handlers
(por ejemplo, archivos.applescript
o.js
). - Si un ID de sugerencia (ya sea del
id:
de frontmatter o generado a partir de nombre de archivo/ruta) en su base de conocimiento local coincide con un ID en la base de conocimiento incorporada, su versión local anulará la incorporada. - De manera similar, los controladores compartidos con el mismo nombre e idioma (por ejemplo,
my_utility.applescript
) en su directorio local_shared_handlers
anularán cualquier controlador integrado con el mismo nombre e idioma dentro de la misma categoría (o globalmente si los coloca en la raíz de_shared_handlers
de su base de conocimientos local). - Las descripciones de categorías de
_category_info.md
en su base de conocimientos local también pueden anular aquellas de la base de conocimientos incorporada para la misma categoría.
Esto permite la personalización y ampliación de los scripts de automatización y sugerencias disponibles sin modificar los archivos principales de la aplicación.
Contribuyendo
¡Agradecemos sus contribuciones! Envíen sus problemas y solicitudes de incorporación de cambios al repositorio de GitHub .
Capacidades de automatización
Este servidor ofrece potentes funciones de automatización de macOS mediante AppleScript y JavaScript para Automatización (JXA). Estos son algunos de los ejemplos más útiles:
Automatización de terminales
- Ejecutar comandos en nuevas pestañas de Terminal:
- Ejecute comandos con sudo y proporcione la contraseña de forma segura
- Capturar la salida del comando para su procesamiento
Control del navegador
- Automatización de Chrome/Safari:
- Ejecutar JavaScript en el contexto del navegador:
- Extraer contenido de páginas, manipular formularios y automatizar flujos de trabajo
- Tomar capturas de pantalla de páginas web
Interacción del sistema
- Alternar la configuración del sistema (modo oscuro, volumen, red):
- Obtener/establecer el contenido del portapapeles:
- Abrir/controlar diálogos y alertas del sistema
- Crear y administrar notificaciones del sistema
Operaciones con archivos
- Crear, mover y manipular archivos/carpetas:
- Leer y escribir archivos de texto:
- Listar y filtrar archivos en directorios
- Obtener metadatos y propiedades del archivo
Integración de aplicaciones
- Gestión de calendario/recordatorios:
- Automatización del correo electrónico con Mail.app:
- Controlar la reproducción de música:
- Trabajar con aplicaciones creativas (Keynote, Pages, Numbers)
Utilice la herramienta get_scripting_tips
para explorar todas las capacidades de automatización disponibles organizadas por categoría.
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulte el archivo de LICENCIA para más detalles.
local-only server
The server can only run on the client's local machine because it depends on local resources.
Proporciona un servidor de protocolo de contexto de modelo para ejecutar scripts de AppleScript y JavaScript para automatización en macOS, con una base de conocimiento de scripts predefinidos y compatible con la automatización de aplicaciones macOS y funciones del sistema.
- Descripción general
- Beneficios
- Prerrequisitos
- Instalación y uso
- Herramientas proporcionadas
- Casos de uso y ejemplos clave
- Solución de problemas
- Configuración mediante variables de entorno
- Para desarrolladores
- Desarrollo
- Base de conocimientos locales
- Contribuyendo
- Capacidades de automatización
- Licencia
Related Resources
Related MCP Servers
- -securityFlicense-qualityA Model Context Protocol server that enables AI assistants to build and test Xcode projects directly through a standardized interface, with capabilities for running tests, monitoring progress, and accessing logs in real-time.Last updated -29TypeScript
Appwrite MCP Serverofficial
AsecurityAlicenseAqualityA Model Context Protocol server that allows AI assistants to interact with Appwrite's API, providing tools to manage databases, users, functions, teams, and other resources within Appwrite projects.Last updated -8440PythonMIT License- AsecurityAlicenseAqualityA Model Context Protocol server that provides tools for Xcode-related operations, making it easier to work with iOS project management, building, testing, archiving, and deploying apps to both simulators and physical devices.Last updated -943JavaScriptMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables running AppleScript code to interact with Mac applications and system features including Notes, Calendar, Contacts, Messages, file management, and more.Last updated -1448171JavaScriptMIT License