macOS Companion 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 | {} |
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