← Back to search

io.github.cyanheads/macos-mcp-server

cyanheads Scanned 28d ago

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

B
85.3 / 100

Versions

0.1.2latest
first seen Jun 5, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 13

macos_manage_finder
annotations: verified low

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). Frontmost path and reveal work without any special permissions. get_selection requires Automation > Finder permission. trash moves files to Trash, not permanent deletion.

path string input object action string output object app_name string
readOnlyHint false openWorldHint false
macos_control_volume
annotations: verified low

Get or set the system output volume level (0–100) and mute state. The get action returns the current level and mute state. The set action accepts level (0–100), muted (true/false), or both. Setting level=0 does not mute — use muted=true for explicit muting.

input object level number muted boolean output object
readOnlyHint false openWorldHint false
macos_send_notification
annotations: verified low

Post a notification to macOS Notification Center via osascript. The notification appears immediately and uses the calling process's notification settings. Title is required; body, subtitle, and sound are optional. Each call creates a new notification (not idempotent). Do Not Disturb does not suppress notifications sent via osascript.

body string input object output object success boolean subtitle string
readOnlyHint false openWorldHint false idempotentHint false
macos_manage_apps
annotations: verified low

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.

pid number input object action string output object bundle_id string
readOnlyHint false openWorldHint false
macos_control_appearance
annotations: verified low

Get or set the system appearance (dark mode or light mode). The get action returns the current mode. The set action accepts 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.

input object output object dark_mode boolean
readOnlyHint false openWorldHint false
macos_check_permissions
annotations: verified low

Reports which macOS permissions relevant to this server are currently granted for the calling process: Accessibility (required for window manipulation, app hide/show), Screen Recording (required for window screenshots), Automation > Finder (required for Finder selection), and Notifications. Use this tool before attempting operations that require elevated permissions to confirm prerequisites without triggering an OS permission prompt.

input object output object accessibility boolean notifications boolean screen_recording boolean automation_finder boolean
readOnlyHint true openWorldHint false
macos_manage_focus
annotations: verified low

Get or set Do Not Disturb / Focus mode. The get action is best-effort — macOS 13+ protects the Focus state database and the returned status may be "unknown" on some configurations. The set action requires the built-in "Set Focus" shortcut to exist in the Shortcuts app (present on macOS 12+). Mode names must exactly match configured Focus profiles (e.g. "Do Not Disturb", "Work", "Personal").

input object action string output object
readOnlyHint false openWorldHint false
macos_manage_windows
annotations: verified low

Window operations across all visible apps: list all windows with their bounds, focus an app window, move or resize a window, minimize/restore, toggle fullscreen, or close. List and focus do not require Accessibility; all other operations do. When app_name and window_title are both given, window_title takes precedence.

input object width number action string height number output object
readOnlyHint false openWorldHint false
macos_take_screenshot
annotations: verified low

Capture a screenshot of the full screen, a specific display (by 0-based index), a named app window, or a pixel region. Always saves a full-resolution PNG to disk (defaulting to ~/Desktop). Optionally returns a downscaled JPEG preview (max 1024px wide) as base64 for agent visual analysis — keeping response size manageable. Window capture requires Screen Recording permission; all other targets do not.

x number y number path string input object width number height number output object
readOnlyHint false openWorldHint false
macos_get_info
annotations: verified low

Returns a snapshot of the current macOS system state: battery level and charging status, power source (AC/Battery), Wi-Fi SSID, hostname, macOS version, uptime in seconds, and connected display count. All fields reflect live system state at the time of the call.

input object level number output object charging boolean hostname string connected boolean power_source enum display_count number macos_version string uptime_seconds number
readOnlyHint true openWorldHint false
macos_control_audio
annotations: verified low

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

input object action string output object
readOnlyHint false openWorldHint false
macos_control_system
annotations: verified low

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

input object action string output object success boolean
readOnlyHint false openWorldHint false
macos_manage_displays
annotations: verified low

List connected displays with their current layout (resolution, position, rotation, scaling) and optionally apply a pre-configured display layout by name. Requires displayplacer CLI (brew install jakehilborn/jakehilborn/displayplacer). Layouts are pre-configured in the MACOS_DISPLAY_LAYOUTS environment variable as a JSON object mapping names to displayplacer argument strings. Layout application only accepts named presets — raw displayplacer args are never accepted from the user.

input object action string output object
readOnlyHint false openWorldHint false

Permissions 2

shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 37

info
Tool 'macos_manage_finder' annotations are consistent annotation_checker · 80%
info
Tool 'macos_control_volume' annotations are consistent annotation_checker · 80%
info
Tool 'macos_send_notification' annotations are consistent annotation_checker · 80%
info
Tool 'macos_manage_apps' annotations are consistent annotation_checker · 80%
info
Tool 'macos_control_appearance' annotations are consistent annotation_checker · 80%
info
Tool 'macos_check_permissions' annotations are consistent annotation_checker · 80%
info
Tool 'macos_manage_focus' annotations are consistent annotation_checker · 80%
info
Tool 'macos_manage_windows' annotations are consistent annotation_checker · 80%
info
Tool 'macos_take_screenshot' annotations are consistent annotation_checker · 80%
info
Tool 'macos_get_info' annotations are consistent annotation_checker · 80%
info
Tool 'macos_control_audio' annotations are consistent annotation_checker · 80%
info
Tool 'macos_control_system' annotations are consistent annotation_checker · 80%
info
Tool 'macos_manage_displays' annotations are consistent annotation_checker · 80%
high
Remote transport without authentication auth_checker · 70%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: macos_manage_finder manifest_parser · 75%
info
Tool: macos_control_volume manifest_parser · 75%
info
Tool: macos_send_notification manifest_parser · 75%
info
Tool: macos_manage_apps manifest_parser · 75%
info
Tool: macos_control_appearance manifest_parser · 75%
info
Tool: macos_check_permissions manifest_parser · 75%
info
Tool: macos_manage_focus manifest_parser · 75%
info
Tool: macos_manage_windows manifest_parser · 75%
info
Tool: macos_take_screenshot manifest_parser · 75%
info
Tool: macos_get_info manifest_parser · 75%
info
Tool: macos_control_audio manifest_parser · 75%
info
Tool: macos_control_system manifest_parser · 75%
info
Tool: macos_manage_displays manifest_parser · 75%
info
Transport: streamable-http manifest_parser · 80%
info
Required env vars (4) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 11 components sbom_generator · 100%
high
Hardcoded Password found in cyanheads-macos-mcp-server-81565ed/skills/api-utils/references/security.md secret_scanner · 65%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%