macOS Companion MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_calendarsA | Lists all available calendar names in the Apple Calendar app |
| get_calendar_eventsB | Fetches calendar events for a given time range (using accli) |
| create_calendar_eventA | Creates a new event in Apple Calendar (using accli) |
| get_remindersA | Fetches active reminders from Apple Reminders |
| create_reminderB | Creates a new reminder in Apple Reminders |
| complete_reminderB | Marks a reminder as completed |
| list_notesA | Lists titles, IDs, and folders of notes in Apple Notes |
| get_noteC | Retrieves the body text of a note by title or ID |
| create_noteA | Creates a new note in Apple Notes |
| update_noteA | Appends content to an existing note in Apple Notes |
| get_music_stateA | Returns the current playback state and active track metadata in Apple Music |
| play_playlistA | Plays a specific Apple Music playlist by name |
| play_pause_musicA | Toggles playback state of Apple Music |
| skip_music_trackA | Skips to the next or previous track in Apple Music |
| set_music_volumeA | Sets Apple Music volume (0 to 100) |
| send_emailB | Composes and sends an email via Apple Mail |
| get_unread_emailsA | Fetches recent unread email details from Apple Mail |
| send_imessageB | Sends an iMessage/SMS via Messages app |
| open_urlA | Opens a URL in the default browser |
| get_safari_tabsA | Lists all open tab URLs and titles in Safari |
| list_shortcutsA | Lists all Siri/Apple Shortcuts configured on the system |
| run_shortcutB | Runs an Apple/Siri Shortcut by name |
| get_disk_usageB | Returns local disk usage statistics |
| get_storage_scanB | Deep storage scan: home directory sizes, caches, and local snapshots |
| get_battery_healthA | Detailed battery status: cycle count, max capacity, condition |
| get_startup_itemsA | Lists macOS login items and LaunchAgents |
| run_health_auditA | Comprehensive health audit: compute, memory, storage, battery, SSD wear, startup items |
| run_disk_cleanupC | Safely prunes cache folders and empties trash to free up space |
| get_system_statsA | Gets current CPU load, memory pressure, battery metrics, thermal level, and hung processes |
| get_process_listA | Lists active running processes with resource usage |
| kill_processB | Kills a process by PID or name |
| restart_serviceB | Restarts a macOS launchd service using launchctl |
| get_recent_podcast_episodesA | Lists podcast episodes from MTLibrary.sqlite, optionally filtered by release date range and/or title query. Returns pubDate, podcastTitle, title, playhead, duration, playState, transcriptId (path fragment), episodeId (Apple store track id). Pass a title to open_podcast_episode, and transcriptId to get_podcast_transcript once cached. |
| get_podcast_transcriptA | Retrieves the full transcript for an episode from the local Apple Podcasts TTML cache. Returns speaker-attributed text with timestamps. Requires the episode to have been opened/played at least once so the transcript file was cached locally. |
| open_podcast_episodeA | Searches Apple Podcasts for an episode title (from get_recent_podcast_episodes) and opens its episode page. Verified UI flow: Cmd+F, clipboard-paste the title (keystroke typing corrupts punctuation), open the top search result. Use before play_podcast_episode. The title should be fairly exact — the top search result is what gets opened. |
| play_podcast_episodeA | Plays the currently open episode page in Apple Podcasts (AX-discovers the play pill — position varies per page, so it is never hardcoded — and clicks it), then polls the TTML cache for up to ~15s for the transcript download. Returns the cached transcript path and transcriptId for get_podcast_transcript. Requires open_podcast_episode to have been called first. |
| pause_podcast_episodeA | Pauses Apple Podcasts playback via the Controls menu bar item. Note: the MTLibrary play_state column is unreliable (stays 1 while paused) — use the playhead field of get_recent_podcast_episodes to verify pause. |
| capture_camera_snapshotA | Takes a photo using the built-in camera via imagesnap. Returns JPEG as base64 data URL. Use: ambient light sensing, health PPG read, presence detection. |
| get_ambient_noiseA | Records a short audio sample via microphone and measures ambient noise level in decibels. Returns average dB, peak dB, and classification (quiet/moderate/loud). |
| capture_audioA | Records an audio clip via microphone and saves to a temp WAV file. Returns file path, duration, and sample rate. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/surendranb/macos-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server