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 (или эквивалентную конфигурацию):
Запуск локально (для разработки или прямого использования)
В качестве альтернативы, для разработки или если вы предпочитаете запускать сервер напрямую из клонированного репозитория, вы можете использовать предоставленный скрипт start.sh
. Это полезно, если вы хотите сделать локальные изменения или запустить определенную версию.
- Клонируйте репозиторий:
- Настройте клиент MCP: обновите конфигурацию клиента MCP, чтобы она указывала на абсолютный путь к скрипту
start.sh
в клонированном репозитории.Пример фрагмента конфигурацииmcp.json
:Важно: замените/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 остаются актуальными)
- Использование скрипта базы знаний по идентификатору:
- Использование скрипта базы знаний по идентификатору с
input_data
:
Формат ответа:
Инструмент execute_script
возвращает ответ в следующем формате:
content
: Массив текстовых элементов содержимого, содержащий вывод скрипта.isError
: (boolean, необязательно) Устанавливается вtrue
, если выполнение скрипта привело к ошибке. Этот флаг устанавливается, когда:- Вывод скрипта (stdout) начинается с «Error» (без учета регистра)
- Это помогает клиентам легко определить, произошло ли сбой выполнения, без анализа выходного текста.
Пример ответа (успех):
Пример ответа (ошибка):
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" } }
- Получить текущий URL из Safari:
- Операции файловой системы:
- Список файлов на рабочем столе:
{ "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
или аналогичный): - Пример (при настройке через MCP Runner, поддерживающий
env
, напримерmcp-agentify
):
- Ценности:
Для разработчиков
Подробные инструкции по локальному развитию, структуре проекта (включая базу 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). Вот некоторые из наиболее полезных примеров:
Автоматизация терминала
- Запуск команд на новых вкладках терминала:
- Выполняйте команды с помощью sudo и безопасно указывайте пароль
- Захват вывода команды для обработки
Управление браузером
- Автоматизация Chrome/Safari:
- Выполнить JavaScript в контексте браузера:
- Извлекайте содержимое страниц, манипулируйте формами и автоматизируйте рабочие процессы
- Делайте снимки экрана веб-страниц
Взаимодействие системы
- Переключение настроек системы (темный режим, громкость, сеть):
- Получить/установить содержимое буфера обмена:
- Открытие/управление системными диалогами и оповещениями
- Создание и управление системными уведомлениями
Операции с файлами
- Создание, перемещение и управление файлами/папками:
- Чтение и запись текстовых файлов:
- Список и фильтрация файлов в каталогах
- Получить метаданные и свойства файла
Интеграция приложений
- Управление календарем/напоминаниями:
- Автоматизация электронной почты с помощью Mail.app:
- Управление воспроизведением музыки:
- Работа с креативными приложениями (Keynote, Pages, Numbers)
Используйте инструмент get_scripting_tips
, чтобы изучить все доступные возможности автоматизации, упорядоченные по категориям.
Лицензия
Этот проект лицензирован по лицензии MIT. Подробности см. в файле LICENSE .
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.
- Обзор
- Преимущества
- Предпосылки
- Установка и использование
- Предоставляемые инструменты
- Основные варианты использования и примеры
- Поиск неисправностей
- Конфигурация через переменные среды
- Для разработчиков
- Разработка
- Местная база знаний
- Внося вклад
- Возможности автоматизации
- Лицензия
Related Resources
Related MCP Servers
- 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 -96694JavaScriptMIT 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 -11,060329JavaScriptMIT License
- -securityAlicense-qualityA Model Context Protocol server that enables AI assistants to interact with iOS simulators, perform accessibility testing, manage apps, and automate complex iOS workflows.Last updated -12PythonApache 2.0
- AsecurityAlicenseAqualityA Model Context Protocol server that provides AI coding assistants with direct access to Apple's Developer Documentation, enabling seamless lookup of frameworks, symbols, and detailed API references.Last updated -4213JavaScriptMIT License