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
- -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