macOS Automation MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_system_infoA | Get macOS system information including hostname, version, user, and uptime. |
| set_volumeA | Set the system volume level. Args: level: Volume level from 0 (mute) to 100 (max) |
| get_volumeA | Get the current system volume level. |
| toggle_muteA | Toggle system audio mute on/off. |
| toggle_dark_modeA | Toggle between dark mode and light mode. |
| set_dark_modeA | Set dark mode to a specific state. Args: enabled: True for dark mode, False for light mode |
| is_dark_modeA | Check if dark mode is currently enabled. |
| sleep_displayA | Put the display to sleep. |
| say_textA | Speak text using text-to-speech. Args: text: Text to speak voice: Optional voice name (e.g., 'Alex', 'Samantha', 'Victoria') rate: Optional speaking rate in words per minute |
| take_screenshotA | Capture a screenshot. Args: path: Optional save path (defaults to Desktop with timestamp) region: If True, allows selecting a region (interactive) to_clipboard: If True, saves to clipboard instead of file |
| get_wifi_networkA | Get the current WiFi network name. |
| toggle_wifiB | Enable or disable WiFi. Args: enabled: True to enable WiFi, False to disable |
| list_running_appsA | List all currently running applications. |
| get_frontmost_appA | Get information about the currently active (frontmost) application. |
| launch_appA | Launch an application. Args: app_name: Name of the application (e.g., 'Safari', 'Finder', 'Terminal') new_instance: If True, opens a new instance of the app |
| quit_appA | Quit an application. Args: app_name: Name of the application to quit force: If True, force quits without saving |
| hide_appA | Hide an application's windows. Args: app_name: Name of the application to hide |
| is_app_runningC | Check if an application is currently running. Args: app_name: Name of the application to check |
| send_notificationA | Send a macOS notification. Args: title: Notification title message: Notification body text subtitle: Optional subtitle sound: Sound name ('default', 'Basso', 'Glass', 'Hero', 'Pop', etc.) or None for silent |
| send_alertA | Show an alert dialog and wait for user response. Args: title: Alert title message: Alert message buttons: List of button names (max 3) default_button: Name of the default button |
| choose_from_listB | Show a list selection dialog. Args: items: List of items to choose from title: Dialog title prompt: Optional prompt message multiple: Allow multiple selections |
| get_clipboardA | Get the current clipboard contents as text. |
| set_clipboardB | Copy text to the clipboard. Args: text: Text to copy to clipboard |
| clear_clipboardA | Clear the clipboard contents. |
| reveal_in_finderA | Reveal a file or folder in Finder. Args: path: Path to the file or folder |
| create_folderA | Create a new folder. Args: path: Full path for the new folder |
| move_to_trashB | Move files or folders to the Trash. Args: paths: List of paths to move to trash |
| empty_trashC | Empty the Trash. |
| get_selected_filesA | Get the currently selected files in Finder. |
| search_filesA | Search for files using Spotlight. Args: query: Search query location: Optional folder path to search in kind: Optional file type filter ('pdf', 'image', 'document', 'audio', 'video') |
| list_calendarsA | List all available calendars. |
| list_calendar_eventsC | List upcoming calendar events. Args: days_ahead: Number of days to look ahead (default: 7) calendar_name: Optional specific calendar name |
| create_calendar_eventA | Create a new calendar event. Args: title: Event title start_date: Start date/time (ISO format: YYYY-MM-DDTHH:MM:SS) end_date: End date/time (ISO format: YYYY-MM-DDTHH:MM:SS) calendar_name: Calendar to add event to (default: "Calendar") location: Optional event location notes: Optional event notes |
| list_reminder_listsA | List all reminder lists. |
| list_remindersB | List reminders. Args: list_name: Optional specific reminder list include_completed: Include completed reminders |
| create_reminderA | Create a new reminder. Args: title: Reminder title list_name: Reminder list to add to (default: "Reminders") due_date: Optional due date (ISO format: YYYY-MM-DDTHH:MM:SS) notes: Optional notes |
| complete_reminderA | Mark a reminder as complete. Args: title: Reminder title to complete list_name: Optional specific list to search in |
| get_overdue_remindersA | Get all overdue reminders. |
| run_applescriptC | Execute arbitrary AppleScript code. Args: script: AppleScript code to execute timeout: Maximum execution time in seconds (default: 30) |
| run_shell_commandB | Execute a shell command (with safety checks). Args: command: Shell command to execute timeout: Maximum execution time in seconds (default: 30) working_dir: Optional working directory |
| open_urlB | Open a URL in the default browser. Args: url: URL to open |
| open_fileC | Open a file with the default or specified application. Args: path: Path to the file app_name: Optional application name to open with |
| create_scheduled_taskA | Create a scheduled task using launchd. Args: name: Unique name for the task command: Command to execute interval_seconds: Run every N seconds (min 60) hour: Hour to run (0-23) for calendar schedule minute: Minute to run (0-59) for calendar schedule run_at_load: Run immediately when loaded |
| list_scheduled_tasksA | List all MCP-managed scheduled tasks. |
| remove_scheduled_taskC | Remove a scheduled task. Args: name: Name of the task to remove |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_system_info_resource | Resource providing system information. |
| get_running_apps_resource | Resource providing list of running applications. |
| get_clipboard_resource | Resource providing current clipboard text content. |
TDQS
Scored across 45 tools
Most tools have clearly distinct purposes, and the descriptions help differentiate them. A few pairs like toggle_mute and set_volume, or set_dark_mode and toggle_dark_mode, have some functional overlap but remain distinguishable. Overall, an agent can reliably select the correct tool.
Tool names consistently follow a verb_noun pattern in snake_case, such as get_volume, set_volume, toggle_mute, and create_calendar_event. Prefixes like get_, set_, toggle_, list_, create_, and is_ are used predictably across domains. This makes the API easy to navigate.
With 45 tools, the server is excessively large for a single coherent MCP server. While the macOS automation scope is broad, many tools (e.g., calendar and reminder management) could be separated into focused servers. This volume overwhelms an agent's ability to efficiently select among them.
The server covers a wide range of macOS automation tasks including system controls, app management, file operations, calendar, reminders, and scripting. Minor gaps exist such as lack of file read/write operations or direct control of display brightness, but the core workflows are well-supported. Overall, the surface is fairly complete for its domain.