Skip to main content
Glama

macOS Automator MCP Server

by steipete

macOS Automator MCP-сервер

macOS Automator MCP-сервер

Обзор

Этот проект предоставляет сервер Model Context Protocol (MCP), macos_automator , который позволяет выполнять скрипты AppleScript и JavaScript for Automation (JXA) на macOS. Он содержит базу знаний предопределенных скриптов, доступных по идентификатору, и поддерживает встроенные скрипты, файлы скриптов и передачу аргументов. База знаний загружается лениво при первом использовании для быстрого запуска сервера.

Преимущества

  • Удаленное выполнение скриптов AppleScript/JXA через MCP.
  • Используйте обширную, расширяемую базу знаний по распространенным задачам автоматизации macOS.
  • Управляйте приложениями и системными функциями macOS программным способом.
  • Интегрируйте автоматизацию macOS в более крупные рабочие процессы на базе ИИ.

Предпосылки

  • Node.js (рекомендуется версия >=18.0.0, см. движки package.json ).
  • macOS.
  • НАСТРОЙКА КРИТИЧЕСКИХ РАЗРЕШЕНИЙ:
    • Приложение, запускающее ЭТОТ сервер MCP (например, Терминал, ваше приложение Node.js), требует явных разрешений пользователя на компьютере macOS, где запущен сервер.
    • Разрешения автоматизации: для управления другими приложениями (Finder, Safari, Mail и т. д.).
      • Перейдите в: Настройки системы > Конфиденциальность и безопасность > Автоматизация.
      • Найдите в списке приложение, запускающее сервер (например, Терминал).
      • Убедитесь, что установлены флажки для всех приложений, которые необходимо контролировать.
      • См. пример: docs/automation-permissions-example.png (изображение-заполнитель).
    • Разрешения на доступ: для сценариев пользовательского интерфейса через «системные события» (например, имитация щелчков, нажатий клавиш).
      • Перейдите в раздел: Системные настройки > Конфиденциальность и безопасность > Специальные возможности.
      • Добавьте в список приложение, запускающее сервер (например, Терминал), и убедитесь, что его флажок отмечен.
    • Первые попытки управлять новым приложением или использовать функции доступности могут по-прежнему вызывать запрос подтверждения macOS, даже если они предварительно авторизованы. Сам сервер не может предоставить эти разрешения.

Установка и использование

Основной способ запустить этот сервер — через npx . Это гарантирует, что вы используете последнюю версию без необходимости глобальной установки.

Добавьте следующую конфигурацию в mcp.json вашего клиента MCP (или эквивалентную конфигурацию):

{ "mcpServers": { "macos_automator": { "command": "npx", "args": [ "-y", "@steipete/macos-automator-mcp@latest" ] } } }

Запуск локально (для разработки или прямого использования)

В качестве альтернативы, для разработки или если вы предпочитаете запускать сервер напрямую из клонированного репозитория, вы можете использовать предоставленный скрипт start.sh . Это полезно, если вы хотите сделать локальные изменения или запустить определенную версию.

  1. Клонируйте репозиторий:
    git clone https://github.com/steipete/macos-automator-mcp.git cd macos-automator-mcp npm install # Ensure dependencies are installed
  2. Настройте клиент MCP: обновите конфигурацию клиента MCP, чтобы она указывала на абсолютный путь к скрипту start.sh в клонированном репозитории.Пример фрагмента конфигурации mcp.json :
    { "mcpServers": { "macos_automator_local": { "command": "/absolute/path/to/your/cloned/macos-automator-mcp/start.sh", "env": { "LOG_LEVEL": "DEBUG" } } } }
    Важно: замените /absolute/path/to/your/cloned/macos-automator-mcp/start.sh на правильный абсолютный путь в вашей системе.Скрипт start.sh автоматически использует tsx для прямого запуска исходного кода TypeScript, если скомпилированная версия не найдена, или запускает скомпилированную версию из dist/ если она доступна. Он учитывает переменную окружения LOG_LEVEL .Примечание для разработчиков: скрипт start.sh , особенно если он изменен для удаления любого ранее существующего скомпилированного dist/server.js перед выполнением (например, путем добавления rm -f dist/server.js ), предназначен для того, чтобы гарантировать, что вы всегда запускаете последний код TypeScript из каталога src/ через tsx . Это идеально подходит для разработки, чтобы предотвратить проблемы с устаревшими сборками. Для развертывания в продакшне (например, при публикации в npm) процесс сборки обычно создает окончательный dist/server.js , который затем становится точкой входа для опубликованного пакета.

Предоставляемые инструменты

1. execute_script

Выполняет скрипт AppleScript или JavaScript for Automation (JXA) на macOS. Скрипты могут быть предоставлены как встроенное содержимое ( script_content ), абсолютный путь к файлу ( script_path ) или путем ссылки на скрипт из встроенной базы знаний с использованием его уникального kb_script_id .

Источники скрипта (взаимоисключающие):

  • script_content (строка): Необработанный код скрипта.
  • script_path (строка): Абсолютный путь POSIX к файлу скрипта (например, .applescript , .scpt , .js ).
  • kb_script_id (string): Идентификатор предопределенного скрипта из базы знаний сервера. Используйте инструмент get_scripting_tips для обнаружения доступных идентификаторов скриптов и их функций.

Спецификация языка:

  • language (enum: 'applescript' | 'javascript', необязательно): укажите язык.
    • При использовании kb_script_id язык определяется из скрипта базы знаний.
    • Если используется script_content или script_path и language не указан, по умолчанию используется «applescript».

Передача входных данных в скрипты:

  • arguments (массив строк, необязательно):
    • Для script_path : Передаются как стандартные аргументы on run argv (AppleScript) или run(argv) (JXA) скрипта при запуске.
    • Для kb_script_id : используется, если предопределенный скрипт предназначен для приема позиционных строковых аргументов (например, заменяет заполнители, такие как --MCP_ARG_1 , --MCP_ARG_2 ). Проверьте argumentsPrompt скрипта из get_scripting_tips .
  • input_data (объект JSON, необязательно):
    • В первую очередь для скриптов kb_script_id , предназначенных для приема именованных структурированных входных данных.
    • Значения из этого объекта заменяют заполнители в скрипте (например, --MCP_INPUT:yourKeyName ). См. argumentsPrompt из get_scripting_tips .
    • Значения (строки, числа, логические значения, простые массивы/объекты) преобразуются в их литеральные эквиваленты AppleScript.

Другие варианты:

  • timeout_seconds (целое число, необязательное, по умолчанию: 60): Максимальное время выполнения.
  • output_format_mode (enum, необязательно, по умолчанию: 'auto'): управляет флагами форматирования вывода osascript .
    • 'auto' : (по умолчанию) использует понятный человеку формат для AppleScript ( -sh ) и прямой вывод (без флагов -s ) для JXA.
    • 'human_readable' : принудительно включает -sh (вывод, понятный человеку, в основном для AppleScript).
    • 'structured_error' : принудительно включает -ss (структурированные отчеты об ошибках, в основном для AppleScript).
    • 'structured_output_and_error' : принудительно устанавливает -s ss (структурированный вывод для основного результата и ошибок, в основном для AppleScript).
    • 'direct' : флаги -s не используются (рекомендуется для JXA, также поведение JXA в auto режиме).
  • include_executed_script_in_output (boolean, необязательный, по умолчанию: false): Если true, вывод будет включать полное содержимое скрипта (после любых подстановок заполнителей для скриптов базы знаний) или путь к скрипту, который был выполнен. Это добавляется как дополнительная текстовая часть в массив выходного содержимого.
  • include_substitution_logs (boolean, необязательно, по умолчанию: false): Если true, подробные журналы замен заполнителей, выполненных в скриптах базы знаний, включаются в вывод. Это полезно для отладки того, как input_data и arguments обрабатываются и вставляются в скрипт. Журналы добавляются в начало вывода скрипта при успешном выполнении или в конец сообщения об ошибке при неудаче.
  • report_execution_time (boolean, необязательный, по умолчанию: false): Если true , в массив содержимого ответа будет включено дополнительное сообщение с отформатированным временем выполнения скрипта.

ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ И РАЗРЕШЕНИЯХ MACOS: (Те же критические предупреждения, что и раньше, о произвольном выполнении скриптов и разрешениях автоматизации/доступности macOS).

Примеры:

  • (Существующие примеры для inline/file path остаются актуальными)
  • Использование скрипта базы знаний по идентификатору:
    { "toolName": "execute_script", "input": { "kb_script_id": "safari_get_active_tab_url", "timeout_seconds": 10 } }
  • Использование скрипта базы знаний по идентификатору с input_data :
    { "toolName": "execute_script", "input": { "kb_script_id": "finder_create_folder_at_path", "input_data": { "folder_name": "New MCP Folder", "parent_path": "~/Desktop" } } }

Формат ответа:

Инструмент execute_script возвращает ответ в следующем формате:

{ content: Array<{ type: 'text'; text: string; }>; isError?: boolean; }
  • content : Массив текстовых элементов содержимого, содержащий вывод скрипта.
  • isError : (boolean, необязательно) Устанавливается в true , если выполнение скрипта привело к ошибке. Этот флаг устанавливается, когда:
    • Вывод скрипта (stdout) начинается с «Error» (без учета регистра)
    • Это помогает клиентам легко определить, произошло ли сбой выполнения, без анализа выходного текста.

Пример ответа (успех):

{ "content": [{ "type": "text", "text": "Script executed successfully" }] }

Пример ответа (ошибка):

{ "content": [{ "type": "text", "text": "Error: Cannot find application 'Safari'" }], "isError": true }

2. get_scripting_tips

Извлекает советы, примеры и подробности запускаемого скрипта AppleScript/JXA из базы знаний сервера. Полезно для обнаружения доступных скриптов, их функций и того, как их использовать с execute_script (особенно kb_script_id ).

Аргументы:

  • list_categories (boolean, Optional, default: false): Если true, возвращает только список доступных категорий базы знаний и их описания. Переопределяет другие параметры.
  • category (строка, необязательно): Фильтрует советы по определенному идентификатору категории (например, «finder», «safari»).
  • search_term (строка, необязательно): Поиск ключевого слова в заголовках советов, описаниях, содержимом сценария, ключевых словах или идентификаторах.
  • refresh_database (boolean, Optional, Default: false): Если true, принудительно перезагрузит всю базу знаний с диска перед обработкой запроса. Это полезно во время разработки, если вы активно изменяете файлы базы знаний и хотите убедиться, что используются последние версии без перезапуска сервера.
  • limit (целое число, необязательное, по умолчанию: 10): максимальное количество возвращаемых результатов.

Выход:

  • Возвращает строку в формате Markdown, содержащую запрошенные подсказки, включая их заголовок, описание, содержимое скрипта, язык, идентификатор запуска (если применимо), подсказки аргументов и примечания.

Пример использования:

  • Список всех категорий: { "toolName": "get_scripting_tips", "input": { "list_categories": true } }
  • Получить советы для категории "safari": { "toolName": "get_scripting_tips", "input": { "category": "safari" } }
  • Поиск советов, связанных с "clipboard": { "toolName": "get_scripting_tips", "input": { "search_term": "clipboard" } }

Основные варианты использования и примеры

  • Контроль приложений:
    • Получить текущий URL из Safari: { "input": { "script_content": "tell application \"Safari\" to get URL of front document" } }
    • Получить темы непрочитанных писем в Mail: { "input": { "script_content": "tell application \"Mail\" to get subject of messages of inbox whose read status is false" } }
  • Операции файловой системы:
    • Список файлов на рабочем столе: { "input": { "script_content": "tell application \"Finder\" to get name of every item of desktop" } }
    • Создать новую папку: { "input": { "script_content": "tell application \"Finder\" to make new folder at desktop with properties {name:\"My New Folder\"}" } }
  • Системные взаимодействия:
    • Отобразить системное уведомление: { "input": { "script_content": "display notification \"Important Update!\" with title \"System Alert\"" } }
    • Установить громкость системы: { "input": { "script_content": "set volume output volume 50" } } (0-100)
    • Получить текущее содержимое буфера обмена: { "input": { "script_content": "the clipboard" } }

Поиск неисправностей

  • Ошибки разрешений: если скрипты не могут управлять приложениями или выполнять действия пользовательского интерфейса, дважды проверьте разрешения автоматизации и специальных возможностей в системных настройках для приложения, запускающего сервер MCP (например, терминал).
  • Ошибки синтаксиса скрипта: ошибки osascript будут возвращены в stderr или сообщение об ошибке. Сначала тестируйте сложные скрипты локально с помощью редактора скриптов (для AppleScript) или JXA runner.
  • Тайм-ауты: Если выполнение скрипта занимает больше времени, чем timeout_seconds (по умолчанию 60 с), он будет завершен. Увеличьте тайм-аут для долго выполняющихся скриптов.
  • Файл не найден: убедитесь, что script_path — это абсолютный путь POSIX, доступный пользователю, запустившему сервер MCP.
  • Неправильные проблемы с выводом/JXA: для скриптов JXA, особенно использующих мост Objective-C, убедитесь, что output_format_mode установлен на 'direct' или 'auto' (по умолчанию). Использование флагов форматирования, специфичных для AppleScript, таких как human_readable с JXA, может привести к ошибкам. Если вывод AppleScript не обрабатывается правильно, попробуйте structured_output_and_error или structured_error .

Конфигурация через переменные среды

  • LOG_LEVEL : Установите уровень ведения журнала для сервера.
    • Значения: DEBUG , INFO , WARN , ERROR
    • Пример: LOG_LEVEL=DEBUG npx @steipete/macos-automator-mcp@latest
  • KB_PARSING : управляет тем, когда анализируется база знаний (подсказки скрипта).
    • Ценности:
      • lazy (по умолчанию): База знаний анализируется при первом запросе к get_scripting_tips или при использовании kb_script_id в execute_script . Это позволяет ускорить запуск сервера.
      • eager : База знаний анализируется при запуске сервера. Это может немного увеличить время запуска, но гарантирует немедленную доступность KB и раннее обнаружение любых ошибок анализа.
    • Пример (при запуске через start.sh или аналогичный):
      KB_PARSING=eager ./start.sh
    • Пример (при настройке через MCP Runner, поддерживающий env , например mcp-agentify ):
      { "env": { "LOG_LEVEL": "INFO", "KB_PARSING": "eager" } }

Для разработчиков

Подробные инструкции по локальному развитию, структуре проекта (включая базу knowledge_base ) и правила внесения вкладов см. на сайте DEVELOPMENT.md .

Разработка

Подробную информацию о структуре проекта, его создании и тестировании см. на сайте DEVELOPMENT.md.

Местная база знаний

Вы можете дополнить встроенную базу знаний собственными локальными советами и общими обработчиками. Создайте структуру каталогов, идентичную knowledge_base в этом репозитории (или его подмножестве).

По умолчанию приложение будет искать эту локальную базу знаний в ~/.macos-automator/knowledge_base . Вы можете настроить этот путь, установив переменную среды LOCAL_KB_PATH .

Пример:

Предположим, у вас есть локальная база знаний в /Users/yourname/my-custom-kb . Установите переменную среды: export LOCAL_KB_PATH=/Users/yourname/my-custom-kb

Или, если вы запускаете скрипт валидатора, вы можете использовать аргумент --local-kb-path : npm run validate:kb -- --local-kb-path /Users/yourname/my-custom-kb

Структура и переопределения:

  • Ваша локальная база знаний должна отражать структуру категорий основной knowledge_base (например, 01_applescript_core , 05_web_browsers/safari и т. д.).
  • Вы можете добавить новые файлы советов .md или _shared_handlers (например, файлы .applescript или .js ).
  • Если идентификатор подсказки (либо из id: либо сгенерированный из имени файла/пути) в вашей локальной базе знаний совпадает с идентификатором во встроенной базе знаний, ваша локальная версия перезапишет встроенную.
  • Аналогично общие обработчики с тем же именем и языком (например, my_utility.applescript ) в локальном каталоге _shared_handlers переопределят любые встроенные обработчики с тем же именем и языком в той же категории (или глобально, если вы поместите их в корень локального каталога _shared_handlers базы знаний).
  • Описания категорий из _category_info.md в вашей локальной базе знаний также могут переопределять описания из встроенной базы знаний для той же категории.

Это позволяет персонализировать и расширять доступные сценарии автоматизации и советы без изменения основных файлов приложения.

Внося вклад

Вклады приветствуются! Пожалуйста, отправляйте проблемы и запросы на извлечение в репозиторий GitHub .

Возможности автоматизации

Этот сервер предоставляет мощные возможности автоматизации macOS через AppleScript и JavaScript для автоматизации (JXA). Вот некоторые из наиболее полезных примеров:

Автоматизация терминала

  • Запуск команд на новых вкладках терминала:
    { "input": { "kb_script_id": "terminal_app_run_command_new_tab", "input_data": { "command": "ls -la" } } }
  • Выполняйте команды с помощью sudo и безопасно указывайте пароль
  • Захват вывода команды для обработки

Управление браузером

  • Автоматизация Chrome/Safari:
    { "input": { "kb_script_id": "chrome_open_url_new_tab_profile", "input_data": { "url": "https://example.com", "profile_name": "Default" } } }
    { "input": { "kb_script_id": "safari_get_front_tab_url" } }
  • Выполнить JavaScript в контексте браузера:
    { "input": { "kb_script_id": "chrome_execute_javascript", "input_data": { "javascript_code": "document.title" } } }
  • Извлекайте содержимое страниц, манипулируйте формами и автоматизируйте рабочие процессы
  • Делайте снимки экрана веб-страниц

Взаимодействие системы

  • Переключение настроек системы (темный режим, громкость, сеть):
    { "input": { "kb_script_id": "systemsettings_toggle_dark_mode_ui" } }
  • Получить/установить содержимое буфера обмена:
    { "input": { "kb_script_id": "system_clipboard_get_file_paths" } }
  • Открытие/управление системными диалогами и оповещениями
  • Создание и управление системными уведомлениями

Операции с файлами

  • Создание, перемещение и управление файлами/папками:
    { "input": { "kb_script_id": "finder_create_new_folder_desktop", "input_data": { "folder_name": "My Project" } } }
  • Чтение и запись текстовых файлов:
    { "input": { "kb_script_id": "fileops_read_text_file", "input_data": { "file_path": "~/Documents/notes.txt" } } }
  • Список и фильтрация файлов в каталогах
  • Получить метаданные и свойства файла

Интеграция приложений

  • Управление календарем/напоминаниями:
    { "input": { "kb_script_id": "calendar_create_event", "input_data": { "title": "Meeting", "start_date": "2023-06-01 10:00", "end_date": "2023-06-01 11:00" } } }
  • Автоматизация электронной почты с помощью Mail.app:
    { "input": { "kb_script_id": "mail_send_email_direct", "input_data": { "recipient": "user@example.com", "subject": "Hello", "body_content": "Message content" } } }
  • Управление воспроизведением музыки:
    { "input": { "kb_script_id": "music_playback_controls", "input_data": { "action": "play" } } }
  • Работа с креативными приложениями (Keynote, Pages, Numbers)

Используйте инструмент get_scripting_tips , чтобы изучить все доступные возможности автоматизации, упорядоченные по категориям.

Лицензия

Этот проект лицензирован по лицензии MIT. Подробности см. в файле LICENSE .

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

local-only server

The server can only run on the client's local machine because it depends on local resources.

Предоставляет сервер Model Context Protocol для выполнения сценариев AppleScript и JavaScript для автоматизации на macOS, включающий базу знаний предопределенных сценариев и поддерживающий автоматизацию приложений и системных функций macOS.

  1. Обзор
    1. Преимущества
      1. Предпосылки
        1. Установка и использование
          1. Запуск локально (для разработки или прямого использования)
        2. Предоставляемые инструменты
          1. execute_script
          2. get_scripting_tips
        3. Основные варианты использования и примеры
          1. Поиск неисправностей
            1. Конфигурация через переменные среды
              1. Для разработчиков
                1. Разработка
                  1. Местная база знаний
                    1. Внося вклад
                      1. Возможности автоматизации
                        1. Автоматизация терминала
                        2. Управление браузером
                        3. Взаимодействие системы
                        4. Операции с файлами
                        5. Интеграция приложений
                      2. Лицензия

                        Related MCP Servers

                        • -
                          security
                          F
                          license
                          -
                          quality
                          A 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 -
                          29
                          TypeScript
                        • A
                          security
                          A
                          license
                          A
                          quality
                          A 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 -
                          84
                          40
                          Python
                          MIT License
                          • Linux
                          • Apple
                        • A
                          security
                          A
                          license
                          A
                          quality
                          A 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 -
                          9
                          43
                          JavaScript
                          MIT License
                          • Apple
                        • A
                          security
                          A
                          license
                          A
                          quality
                          A 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 -
                          1
                          448
                          171
                          JavaScript
                          MIT License
                          • Apple

                        View all related MCP servers

                        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/steipete/macos-automator-mcp'

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