macos-mcp-server
macOS system controls, window management, and hardware state for MCP clients
- 4 estrellas
- 0 forks
- 3 issues abiertos
- Lenguaje: TypeScript
- Licencia: Apache-2.0
- actualizado
Instalación
git clone https://github.com/cyanheads/macos-mcp-server{
"mcpServers": {
"macos": {
"command": "node",
"args": ["/path/to/macos-mcp-server/dist/index.js"]
}
}
}{
"mcpServers": {
"macos": {
"command": "node",
"args": ["/path/to/macos-mcp-server/dist/index.js"]
}
}
}- Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
- Replace any <placeholder> values with your API keys or paths.
- Restart Claude. The MCP server and its tools appear automatically.
Clone https://github.com/cyanheads/macos-mcp-server and follow its README for install instructions.
Resumen de MCP Servers
@cyanheads/macos-mcp-server Control macOS system settings, apps, windows, audio, displays, screenshots, and Focus mode via MCP. STDIO or Streamable HTTP. 13 Tools • 3 Resources
macOS-only. This server controls the local macOS system — it requires the host machine to be running macOS. HTTP transport is supported for completeness, but the practical use case is stdio: run it locally and point your MCP client at it.
Overview
Control your Mac from an agent: launch, quit, and arrange apps and windows, switch audio and display devices, capture screenshots, work with Finder, send notifications, and toggle Focus mode.
Tools
| Tool | Description |
|---|---|
macos_get_info | System snapshot: battery level and charging status, power source, Wi-Fi association and network name, hostname, macOS version, uptime, and display count; a failed probe leaves its field null and named in unavailable |
macos_check_permissions | Reports Accessibility, Screen Recording, and Automation > Finder status for the calling process from Apple's prompt-free checks — null with a reason when a check can't tell |
macos_manage_apps | List running apps, get the frontmost app, launch, quit, force-quit, hide, or show applications |
macos_manage_windows | List, focus, move, resize, move_resize, minimize, fullscreen, or close windows across all visible apps |
macos_control_volume | Get or set system output volume (0–100) and mute state |
macos_control_audio | List audio devices, get current defaults, or switch the default input/output device |
macos_control_appearance | Get or set dark/light mode |
macos_control_system | Lock the screen or put the display to sleep |
macos_take_screenshot | Capture the main display, one display by display_index, a named app window, or a pixel region; saves a PNG without replacing existing files unless overwrite is true, optional JPEG preview |
macos_manage_displays | List connected displays (with each one's index) and the configured layout names, and apply a named display layout preset |
macos_send_notification | Post a notification to macOS Notification Center |
macos_manage_focus | Get or set Do Not Disturb / Focus mode |
macos_manage_finder | Frontmost path, current selection, reveal, open with app, or move to Trash |
Resources
| Resource | Description |
|---|---|
macos://system/info | Current macOS system snapshot: battery, power source, Wi-Fi association and network name, hostname, version, uptime, display count; a failed probe leaves its field null and named in unavailable |
macos://audio/devices | All audio input and output devices, including which is the current default. Requires SwitchAudioSource CLI. |
macos://displays | Connected display inventory including persistent IDs, index (the display_index macos_take_screenshot and macos_manage_windows use), type, resolution, origin, rotation, scaling, and enabled state. Requires displayplacer CLI. |
Resource data is also accessible via macos_get_info, macos_control_audio (action=list), and macos_manage_displays (action=list).
Capability reference
macos_get_info tool
Battery level (0–100), charging state, and power source (
AC,Battery,UPS);nullon desktops with no battery.chargingis false when the battery is held at a charge limit (AC attached; not charging) and true whilefinishing chargeWi-Fi association from the Wi-Fi device's link state; the network name is
nullwhile connected when macOS withholds it (reading it requires Location Services access for the host app). The name renders incontent[]as a code span, so markdown characters in it read back as the nameHostname and uptime (from Node's
osmodule), macOS version string (e.g."15.1")Connected display count (
0on a headless Mac)A probe that fails leaves its field
nulland names it inunavailable; nothing is filled in.battery: nullwithbatteryabsent fromunavailablemeans the Mac has no batteryNo permissions required
macos_check_permissions tool
Reports Accessibility (every
macos_manage_windowsaction,listincluded;macos_manage_appshideandshow, and thewindow_titlefrontmostreads; the ⌃⌘Q keystrokemacos_control_systemlocksends before it falls back to the screen saver), Screen Recording (window screenshots), and Automation > Finder (macos_manage_finderfrontmost_path,get_selection, andtrash) from Apple's prompt-free checks:AXIsProcessTrusted,CGPreflightScreenCaptureAccess, andAEDeterminePermissionToAutomateTargetwith prompting offEach field is
true,false, ornullwhen the check can't tell;unknown_reasonsnames why eachnullis unknown. Automation > Finder readsnulluntil macOS has asked for consent and while Finder isn't running. Notifications is alwaysnull: macOS has no prompt-free check for itReturns the calling process name (e.g.
"ghostty","node") so you know which process to grant permissions forRead-only — no check sends an Apple event to another app, captures the screen, or can show a permission prompt
Run this first when debugging why another tool is failing
macos_manage_apps tool
list— running user-facing apps with name, bundle ID, PID, visible, and frontmost flagsfrontmost— name, bundle ID, PID, and frontmost window title of the active applaunch— open or activate byapp_nameorbundle_id;hidden=truestarts in the backgroundquit(graceful AppleScript quit) vs.force_quit(SIGKILL, no save prompt)hide/show— toggle visibility; requires Accessibilityquit,force_quit,hide, andshowfirst check that the app is running — resolved by application name the waytell applicationdoes ("Visual Studio Code"finds theCodeprocess), without launching it — and returnnot_runningwhen it isn'tTyped errors:
app_not_found(launchof an app that isn't installed),no_frontmost_app(System Events reports no frontmost process),not_running,accessibility_required
macos_manage_windows tool
list— all visible windows across apps, with position, size,minimizedandfullscreenstate (each read from the window'sAXMinimized/AXFullScreenattribute,nullwhen it can't be read), anddisplay_index: the display the window overlaps most (the indexmacos_manage_displays action=listreports), ornullwhen the display frames can't be read or the window overlaps none. Two windows that share a title, and the windows of two processes that share a name, are each listedfocus,move,resize,move_resize,minimize,fullscreen,close— target bywindow_title(exact, ignoring case, in any app; when two windows of one app share the title, the frontmost of them) orapp_name(that app's frontmost window);window_titletakes precedence andapp_nameis then ignoredapp_namematches a running app by its application name ("Visual Studio Code"), localized name ("Code"), or process name ("firefox"), ignoring case; it is resolved from the running-application list, so no app is launched or sent an Apple event to find itmoveneedsx/y,resizeneedswidth/height(both greater than 0),move_resizeneeds all fourminimize—minimized: true(the default) minimizes,falserestores; it writes the window'sAXMinimizedattribute only when the window is not already in that state, and succeeds only when the window reads back in the requested statefullscreen—fullscreen: trueenters,falseexits, omitted toggles the window's current state. When the state differs it raises the target window, asfocusdoes, and sets itsAXFullScreenattribute (no keystroke, so the window that had keyboard focus is never toggled); it waits up to 4 s for the window to read back in the requested state
Lo que la gente pregunta sobre macos-mcp-server
¿Qué es cyanheads/macos-mcp-server?
cyanheads/macos-mcp-server es mcp servers para el ecosistema de Claude AI. macOS system controls, window management, and hardware state for MCP clients Tiene 4 estrellas en GitHub y su última actualización registrada es del 2026-10-22.
¿Cómo se instala macos-mcp-server?
Puedes instalar macos-mcp-server clonando el repositorio (https://github.com/cyanheads/macos-mcp-server) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar cyanheads/macos-mcp-server?
Nuestro agente de seguridad ha analizado cyanheads/macos-mcp-server y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene cyanheads/macos-mcp-server?
cyanheads/macos-mcp-server es mantenido por cyanheads. La última actividad registrada en GitHub es del 2026-10-22, con 3 issues abiertos.
¿Hay alternativas a macos-mcp-server?
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.