Apple System

io.github.JonathanRReedPublished by GitHub account JonathanRReedv1.1.6Updated Nov 7, 2026

Read and manage macOS system settings and perform scoped desktop actions.

Overview

AI-generated overview

Local macOS MCP server that lets an assistant read system context, change scoped settings, and send bounded GUI input to allow-listed apps.

What you can do
  • Read system context: battery, frontmost app, running apps, clipboard, Focus metadata and combined snapshots
  • Read macOS settings: appearance, accessibility, Dock, Finder and preference domains
  • Change settings: appearance mode, hidden files and extensions, Finder bars, Dock autohide and recents, reduce motion, contrast and transparency
  • Use the clipboard, show local notifications and open applications
  • GUI fallback: list menu bar items, click menu paths, press keys, type text, click buttons and choose pop-up values
  • Discover tools and prompts through search_tools, get_tool_info and fallback prompt tools
When to use it
Useful when the assistant's answers or actions depend on the current Mac desktop state, or when you want it to adjust common macOS settings and drive a specific app's menus and controls without a native integration.
Requirements
macOS only, run locally over stdio with uvx (Python 3.11+ for the clone route) or the provided bundle. Optional environment variables: APPLE_SYSTEM_MCP_SAFETY_MODE (safe_readonly, safe_manage or full_access) and APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS, which must list bundle ids before any GUI input works. macOS accessibility permissions may be needed.
Before you install
Write tools change real system settings, and GUI tools type, click and press keys in real apps, so keep the safety mode and allowlist narrow. GUI input is refused for terminals, editors and automation apps because typed text can run code. Clipboard reads expose whatever text is copied, and notifications and app launches are visible actions.

Installation

In SourceWeft

  1. Open Apple System in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Apple System MCP

Local MCP server for macOS system context, truthful Focus support metadata, assistant-relevant settings reads, explicit settings writes, and bounded GUI fallback automation.

Capabilities

  • battery status
  • frontmost app
  • running applications
  • clipboard read and write
  • local notifications
  • open an application
  • appearance settings
  • accessibility settings
  • Dock settings
  • Finder settings
  • truthful Focus support metadata
  • combined system context snapshots
  • appearance mode write
  • Finder visibility and bar writes
  • Dock write controls for autohide and recent apps
  • accessibility writes for reduce motion, increase contrast, and reduce transparency
  • GUI fallback tools for menu clicks, key presses, text entry, button clicks, and pop-up selection
  • preference-domain inspection via defaults export
  • resources: system://status, system://applications, system://settings, system://context
  • prompt: system_capture_context
  • tool discovery helpers search_tools and get_tool_info for context-constrained clients

Install On This Mac

Quick start (uvx, from PyPI)

With uv installed:

bash
uvx apple-system-mcp

No clone, no venv management.

From a clone
bash
git clone https://github.com/JonathanRReed/Apple-MCPs.gitcd Apple-MCPsuv sync --all-packages

This builds one workspace environment with every server's entry point in .venv/bin (for example .venv/bin/apple-system-mcp). You can also point an MCP client at AppleSystem-MCP/start.sh, which prefers uv run and falls back to a plain venv bootstrap (Python 3.11+ required).

Install In AI Agents

json
{  "mcpServers": {    "apple-system": {      "command": "uvx",      "args": ["apple-system-mcp"],      "env": {        "APPLE_SYSTEM_MCP_SAFETY_MODE": "safe_manage"      }    }  }}

Running from a clone instead? Use /path/to/Apple-MCPs/AppleSystem-MCP/start.sh as the command with empty args.

Claude Code:

bash
claude mcp add --transport stdio --scope user apple-system -- uvx apple-system-mcp

--scope user makes the server available in every project. To share it with one repository through its .mcp.json instead, use --scope project.

Transport

stdio is the default and recommended transport. Set APPLE_SYSTEM_MCP_TRANSPORT=streamable-http (with optional APPLE_SYSTEM_MCP_HOST and APPLE_SYSTEM_MCP_PORT) to serve Streamable HTTP instead.

Prompting Notes

  • tools/list returns the full System tool surface. Context-constrained clients can use search_tools first, then get_tool_info for the System tool they need.
  • Use this server when the user’s current desktop context matters.
  • Read battery state and the frontmost app before interruptive actions.
  • Use the settings tools before falling back to raw defaults read in prompts or E2E checks.
  • Use APPLE_SYSTEM_MCP_SAFETY_MODE=safe_manage for assistant-grade operation.
  • Keep safe_readonly only for audit-only or context-only deployments.
  • Keep GUI fallback narrow. Prefer native app-domain MCPs first, then explicit System tools, then GUI tools only when native support is missing. GUI input needs the target app in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS (see GUI Input Allowlist).
  • Focus reporting is best-effort and truthful. This server does not claim Notification Center history support when macOS does not expose it cleanly on an unsigned local install.

Health And Recovery

  • system_health
  • system_permission_guide
  • system_get_settings_snapshot
  • system_get_focus_status
  • system_get_context_snapshot
  • system_read_preference_domain

Assistant-Grade Control Surface

The launch System write surface is explicit, not generic:

  • system_set_appearance_mode
  • system_set_show_all_extensions
  • system_set_show_hidden_files
  • system_set_finder_path_bar
  • system_set_finder_status_bar
  • system_set_dock_autohide
  • system_set_dock_show_recents
  • system_set_reduce_motion
  • system_set_increase_contrast
  • system_set_reduce_transparency

The bounded GUI fallback surface is:

  • system_gui_list_menu_bar_items
  • system_gui_click_menu_path
  • system_gui_press_keys
  • system_gui_type_text
  • system_gui_click_button
  • system_gui_choose_popup_value

GUI Input Allowlist

The GUI input tools (system_gui_click_menu_path, system_gui_press_keys, system_gui_type_text, system_gui_click_button and system_gui_choose_popup_value) send input only to apps you list in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS. It is empty by default, so GUI input is off until you set it. system_gui_list_menu_bar_items only reads and needs no allowlist.

  • Format: comma-separated bundle ids, for example com.apple.TextEdit,com.apple.Safari. Case and spaces around commas are ignored. To find an app's bundle id, run osascript -e 'id of app "TextEdit"'.
  • Where to set it: the env block of this server in your MCP client config, for example "APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS": "com.apple.TextEdit,com.apple.Safari". In Claude Desktop, open Settings > Extensions, configure Apple System and fill in "Apps that accept GUI input". Restart the client afterwards.
  • Every GUI input call must name its target with application or bundle_id. Input is never sent to whatever app happens to be frontmost; the target is brought to the front first and the call fails with GUI_TARGET_NOT_FRONTMOST if it does not get there.
  • Terminals, script editors and automation apps are always refused with TERMINAL_TARGET_REFUSED, even if allow-listed, because text typed there can run code. This covers Terminal, iTerm2, Ghostty, Warp, kitty, WezTerm and similar terminals, Script Editor, Automator, Shortcuts, Xcode, VS Code, Cursor, Windsurf, Zed, JetBrains IDEs, BBEdit, Raycast and Alfred.
  • A call to an app outside the list returns GUI_TARGET_NOT_ALLOWED, and its suggestion gives the exact value to add.

Launch Checklist

  • Add uvx apple-system-mcp (or a clone's AppleSystem-MCP/start.sh) to your MCP client
  • Reload or reconnect the client so the System tool surface is loaded into context
  • Call system_health first
  • If a scoped system action is blocked, call system_permission_guide
  • Call system_status to verify the full context surface is available

Preference-domain reads accept named domains such as com.apple.finder and NSGlobalDomain, rather than filesystem paths or command options. The -g and -globalDomain aliases select NSGlobalDomain.

Source: AppleSystem-MCP/README.md at commit 9aeaa81

Tools

39

system_health

System Health

Report the active Apple System MCP configuration.

Takes no parameters.

system_permission_guide

System Permission Guide

Explain what system access this MCP may need on macOS.

Takes no parameters.

system_status

System Status

Return current battery, frontmost app, and running app count.

Takes no parameters.

system_get_battery

Get Battery

Get the current battery state from macOS.

Takes no parameters.

system_get_frontmost_app

Get Frontmost App

Get the name of the current frontmost application.

Takes no parameters.

system_list_running_apps

List Running Apps

List currently running foreground applications.

Takes no parameters.

system_get_clipboard

Get Clipboard

Read the current text clipboard contents.

Takes no parameters.

system_list_settings_domains

List Settings Domains

List the common macOS preference domains exposed by Apple System MCP.

Takes no parameters.

system_get_appearance_settings

Get Appearance Settings

Read current macOS appearance settings such as light or dark mode and accent color.

Takes no parameters.

system_get_accessibility_settings

Get Accessibility Settings

Read common macOS accessibility settings such as reduce motion and increase contrast.

Takes no parameters.

system_get_dock_settings

Get Dock Settings

Read common macOS Dock settings such as autohide, magnification, and orientation.

Takes no parameters.

system_get_finder_settings

Get Finder Settings

Read common macOS Finder settings such as path bar, status bar, and preferred view style.

Takes no parameters.

system_get_settings_snapshot

Get Settings Snapshot

Return a combined read-only snapshot of appearance, accessibility, Dock, and Finder settings.

Takes no parameters.

system_get_focus_status

Get Focus Status

Return truthful Focus support metadata and the best available current Focus state.

Takes no parameters.

system_get_context_snapshot

Get System Context Snapshot

Return a richer macOS context snapshot, including battery, frontmost app, and Focus metadata.

Takes no parameters.

system_read_preference_domain

Read Preference Domain

Read a macOS preference domain through defaults export for a production-safe, structured settings view.

Parametersdomainrequiredcurrent_host

system_set_appearance_mode

Set Appearance Mode

Set macOS appearance mode to light or dark.

Parametersmoderequired

system_set_show_all_extensions

Set Show All Extensions

Show or hide filename extensions in macOS.

Parametersenabledrequired

system_set_show_hidden_files

Set Show Hidden Files

Show or hide hidden files in Finder.

Parametersenabledrequired

system_set_finder_path_bar

Set Finder Path Bar

Show or hide the Finder path bar.

Parametersenabledrequired

system_set_finder_status_bar

Set Finder Status Bar

Show or hide the Finder status bar.

Parametersenabledrequired

system_set_dock_autohide

Set Dock Autohide

Enable or disable Dock autohide.

Parametersenabledrequired

system_set_dock_show_recents

Set Dock Show Recents

Enable or disable recent applications in the Dock.

Parametersenabledrequired

system_set_reduce_motion

Set Reduce Motion

Enable or disable macOS reduce motion accessibility mode.

Parametersenabledrequired

system_set_increase_contrast

Set Increase Contrast

Enable or disable macOS increase contrast accessibility mode.

Parametersenabledrequired

system_set_reduce_transparency

Set Reduce Transparency

Enable or disable macOS reduce transparency accessibility mode.

Parametersenabledrequired

system_gui_list_menu_bar_items

List Menu Bar Items

List the top-level menu bar items for an application. This is a GUI fallback tool.

Parametersbundle_idapplication

system_gui_click_menu_path

Click Menu Path

Click a menu path in a named application, for example ['File', 'New Window']. This is a GUI fallback tool. Requires application or bundle_id naming a running app whose bundle id is listed in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS (comma-separated bundle ids; GUI input is off while it is empty). Input is never sent to the frontmost app implicitly. Terminals, script editors and automation apps are always refused, even if allow-listed.

Parametersbundle_idmenu_pathrequiredapplication

system_gui_press_keys

Press Keys

Press a key or key chord in a named application. This is a GUI fallback tool. Requires application or bundle_id naming a running app whose bundle id is listed in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS (comma-separated bundle ids; GUI input is off while it is empty). Input is never sent to the frontmost app implicitly. Terminals, script editors and automation apps are always refused, even if allow-listed.

Parameterskeyrequiredbundle_idmodifiersapplication

system_gui_type_text

Type Text

Type text into the focused control of a named application. This is a GUI fallback tool. Requires application or bundle_id naming a running app whose bundle id is listed in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS (comma-separated bundle ids; GUI input is off while it is empty). Input is never sent to the frontmost app implicitly. Terminals, script editors and automation apps are always refused, even if allow-listed.

Parameterstextrequiredbundle_idapplication

system_gui_click_button

Click Button

Click a named button in the front window of a named application. This is a GUI fallback tool. Requires application or bundle_id naming a running app whose bundle id is listed in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS (comma-separated bundle ids; GUI input is off while it is empty). Input is never sent to the frontmost app implicitly. Terminals, script editors and automation apps are always refused, even if allow-listed.

Parametersindexlabelbundle_idapplicationdescription

system_gui_choose_popup_value

Choose Pop-Up Value

Choose a value from a named pop-up button in the front window of a named application. This is a GUI fallback tool. Requires application or bundle_id naming a running app whose bundle id is listed in APPLE_SYSTEM_MCP_GUI_ALLOWED_APPS (comma-separated bundle ids; GUI input is off while it is empty). Input is never sent to the frontmost app implicitly. Terminals, script editors and automation apps are always refused, even if allow-listed.

Parameterslabelrequiredvaluerequiredbundle_idapplicationdescription

system_set_clipboard

Set Clipboard

Write text into the macOS clipboard.

Parameterstextrequired

system_show_notification

Show Notification

Display a local macOS notification.

Parametersbodyrequiredtitlerequiredsubtitle

system_open_application

Open Application

Open an application by name using macOS.

Parametersbundle_idapplication

system_list_prompts

System List Prompts

Fallback prompt discovery tool for tool-only MCP clients.

Takes no parameters.

system_get_prompt

System Get Prompt

Fallback prompt rendering tool for tool-only MCP clients.

Parametersnamerequiredarguments_json

search_tools

Search Tools

Search this server's tool catalog by keyword, alias, or domain tag.

Parametersmodelimitqueryrequireddomain_tags

get_tool_info

Get Tool Info

Load the full schema, examples, and metadata for one tool from this server.

Parametersnamerequiredinclude_schemainclude_examples

Version history

8
  1. v1.1.6LatestNov 6, 2026
  2. v1.1.4Oct 29, 2026
  3. v1.1.3Oct 22, 2026
  4. v1.1.2Oct 14, 2026
  5. v1.1.1Oct 13, 2026
  6. v1.1.0Oct 10, 2026
  7. v1.0.5Sep 26, 2026
  8. v1.0.4Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts