Skip to content
Agentmart
Submit a tool

macOS MCP Server

Control macOS system settings, apps, windows, audio, displays, screenshots, and Focus mode.

Connector by cyanheads · GitHub account verified by the MCP Registry

IndexedApache-2.0Local (stdio)Remote (HTTP)★ 4
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/cyanheads-macos-mcp-server

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Control macOS system settings, apps, windows, audio, displays, screenshots, and Focus mode via MCP.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
2 read · 10 write · 1 delete
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Node.js package

Tools by what they do 13

Read from the source code; the running server may list different tools.

Read 2 · Look things up without changing anything.

  • macos_check_permissions
  • macos_get_info

Write 10 · Create, change, send or run things.

  • macos_control_appearance
  • macos_control_audio
  • macos_control_volume
  • macos_manage_apps
  • macos_manage_displays
  • macos_manage_finder
  • macos_manage_focus
  • macos_manage_windows
  • macos_send_notification
  • macos_take_screenshot

Delete 1 · Delete, drop, revoke or wipe things.

  • macos_control_system

Secrets and settings it asks for

Other settings (environment variables or headers).

  • MACOS_DISPLAY_LAYOUTS
  • MACOS_SCREENSHOT_DIR
  • MCP_LOG_LEVEL

Tools (13)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • macos_check_permissionsCheck macOS Permissionsread-only

    Reports which macOS permissions this server relies on are granted to the calling process, read from Apple's prompt-free checks: Accessibility (every macos_manage_windows action, list included; macos_manage_apps hide and show, and the window_title frontmost reads; the ⌃⌘Q keystroke macos_control_system lock sends before it falls back to the screen saver), Screen Recording (window screenshots), and Automation > Finder (macos_manage_finder frontmost_path, get_selection, and trash). No check sends an Apple event to another app, captures the screen, or can show a permission prompt. Each field is tr…

  • macos_control_appearanceControl macOS Appearance

    Get or set the system appearance (dark mode or light mode). The get action returns the current mode. The set action requires mode="dark", "light", or "toggle". Setting "dark" or "light" is idempotent — calling twice produces the same state. "toggle" flips the current mode on each call.

  • macos_control_audioControl macOS Audio Routing

    Manage audio device routing: list all input and output devices, get the current default input and output devices, or switch the default input or output device. Device names support case-insensitive partial matching — "MacBook" matches "MacBook Pro Microphone". Volume level control is separate (use macos_control_volume). Requires SwitchAudioSource CLI (brew install switchaudio-osx).

  • macos_control_systemControl macOS System

    System-level power controls: lock the screen (⌃⌘Q shortcut via Accessibility; falls back to ScreenSaverEngine binary if Accessibility is not granted) or put the display to sleep immediately. Both operations are immediate and user-reversible (wake/unlock with any input).

  • macos_control_volumeControl macOS Volume

    Get or set the system output volume level (0–100) and mute state of the default output. The get action returns the current level and mute state; on an output with no software volume control, such as many HDMI or DisplayPort displays, both read null and output_device names the device. The set action requires level (0–100), muted (true/false), or both, and fails with volume_unsupported on an output that has no software control for the requested value. Setting level=0 does not mute — use muted=true for explicit muting.

  • macos_get_infoGet macOS System Inforead-only

    Returns a snapshot of the current macOS system state: battery level, charging state, and power source (AC/Battery/UPS), Wi-Fi association and network name, hostname, macOS version, uptime in seconds, and connected display count. All fields reflect live system state at the time of the call. A field whose probe fails is null and named in `unavailable`, never filled with a guess. macOS withholds the Wi-Fi network name from an app without Location Services access; a connected Mac then reports `connected: true` with `ssid: null`.

  • macos_manage_appsManage macOS Apps

    Manage application lifecycle: list all running user-facing apps, get the frontmost app, launch or activate an app, gracefully quit or force-quit a process, or hide/show an app. Launch activates the app if already running; use hidden=true to start in the background without bringing it forward. Force-quit terminates immediately (SIGKILL) without saving. Hide and show require Accessibility permission.

  • macos_manage_displaysManage macOS Displays

    List connected displays with their current layout (resolution, position, rotation, scaling) and each display's index, the display_index macos_take_screenshot and macos_manage_windows use, or apply a pre-configured display layout by name. Requires displayplacer CLI (brew install displayplacer). Layouts are pre-configured in the MACOS_DISPLAY_LAYOUTS environment variable as a JSON object mapping names to displayplacer argument strings; action=list returns their names as layouts. Layout application only accepts named presets — raw displayplacer args are never accepted from the user.

  • macos_manage_finderManage macOS Finder

    Finder integration: get the path of the frontmost Finder window, get the current Finder selection, reveal a file or folder in Finder, open a path with a specific app, or move a path to the Trash (recoverable — goes to Trash, not rm). reveal and open_with need no special permissions; frontmost_path, get_selection, and trash script Finder and require Automation > Finder permission. trash moves files to Trash and never falls back to permanent deletion.

  • macos_manage_focusManage macOS Focus Mode

    Get or set Do Not Disturb / Focus mode. The get action is best-effort: it reads the Focus state file in ~/Library/DoNotDisturb, which may be unreadable to the server process, and returns status "unknown" when that file cannot be read or parsed. The set action runs a shortcut named "Set Focus" from the Shortcuts library and passes {"mode": <mode>, "enabled": <enabled>} to it as JSON input. That shortcut is not built in: create it so it reads this input (e.g. with Get Dictionary from Input) and applies mode and enabled with the Set Focus action. Mode names must exactly match configured Focus nam…

  • macos_manage_windowsManage macOS Windows

    Window operations across all visible apps: list all windows with their bounds and state, focus a window, move or resize a window, minimize/restore, enter or exit fullscreen, or close. Every action, list included, scripts System Events and requires Accessibility. Every action except list targets one window: the one titled window_title, or app_name's frontmost window (window_title takes precedence when both are given). Focus raises the window and brings its app forward, as fullscreen does before it changes a window; no action launches an app.

  • macos_send_notificationSend macOS Notification

    Post a notification to macOS Notification Center via osascript. The notification is delivered immediately and follows the calling process's notification settings, and an active Focus such as Do Not Disturb silences it unless that Focus allows the posting app. Title is required; body, subtitle, and sound are optional. Each call creates a new notification (not idempotent).

  • macos_take_screenshotTake macOS Screenshot

    Capture a screenshot of the main display (the one with the menu bar), one connected display chosen by display_index, a named app window, or a pixel region. display_index is the 0-based index macos_manage_displays action=list reports for each display. Always saves a full-resolution PNG to disk, by default as a new timestamped file in MACOS_SCREENSHOT_DIR (~/Desktop when unset), and never replaces an existing file unless overwrite is true. With include_data, also returns a JPEG preview (longer side at most 1024 px) as an image content block for visual analysis and as base64 in preview. Window ca…

Signals

Stars
4
Forks
0
Open issues
3
Weekly downloads
333
Last commit
Oct 22, 2026 (7 days ago)
Last release
Oct 22, 2026 (7 days ago)
Last package publish
Oct 22, 2026 (7 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.cyanheads/macos-mcp-server
Version
0.3.0
Auth
No auth
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from cyanheads

Cite this page

macOS MCP Server. Agent Mart. https://agentmart.dev/connectors/cyanheads-macos-mcp-server (last updated 2026-10-24)