Skip to main content

MCP Server for interacting with macOS Desktop.

Project description

🍎 macOS-MCP

License Python Platform: macOS 12+ Last Commit

Overview

macOS-MCP is a lightweight, open-source Model Context Protocol server that bridges AI agents and the macOS operating system. It enables seamless automation of macOS through LLMs via tasks such as file navigation, application control, UI interaction, browser automation, and system operations.

Supported Operating Systems

  • macOS 12 (Monterey)
  • macOS 13 (Ventura)
  • macOS 14 (Sonoma)
  • macOS 15 (Sequoia)

Key Features

  • Works with Any LLM (Vision Optional)
    Unlike traditional automation tools, macOS-MCP doesn't require computer vision, fine-tuned models, or specialized setup. Works seamlessly with any LLM—Claude, GPT, Gemini, or others.

  • Native macOS Integration
    Interacts natively with macOS UI elements using the Accessibility API. Opens apps, controls windows, simulates user input, and captures desktop state without workarounds.

  • Rich Toolset for Automation
    Complete toolkit for keyboard/mouse operations, window management, UI state capture, interactive element extraction from the accessibility tree, and AppleScript execution.

  • Lightweight and Open-Source
    Minimal dependencies with full source code available under MIT license. Easy setup and deployment.

  • Smart Context Awareness
    Automatically detects application state (Launchpad, Control Center, Spotlight). Scans menu bar, dock, desktop, and system UI elements intelligently.

  • Customizable and Extensible
    Easily extend with custom tools or modify behavior to suit your specific automation needs.

Installation

Prerequisites

  • Python: 3.11 or later
  • UV Package Manager: Install with pip install uv or curl -LsSf https://astral.sh/uv/install.sh | sh
  • macOS: 12 (Monterey) or later
  • Accessibility Permissions: Required for UI element interaction

Quick Start

Run the server directly:

uvx macos-mcp

Grant Required Permissions

macOS-MCP requires Accessibility and Screen Recording permissions to function properly.

Accessibility Permissions

  1. Open System SettingsPrivacy & SecurityAccessibility
  2. Click the lock icon and authenticate
  3. Add the following applications:
    • Your terminal application (Terminal, iTerm2, VS Code, etc.)
    • Python (typically /usr/bin/python3 or the Python version managed by UV)
    • UV (~/.local/bin/uv if installed locally, or the Python environment UV manages)
  4. Restart the terminal after granting permissions

For uvx users: Grant permissions to your terminal application and Python, as uvx runs Python packages from UV's cache.

Screen Recording Permissions

The Snapshot tool requires Screen Recording permissions to capture screenshots:

  1. Open System SettingsPrivacy & SecurityScreen Recording
  2. Click the lock icon and authenticate
  3. Add the same applications as above (terminal, Python, UV)
  4. Restart the terminal after granting permissions

Note: If the Snapshot tool fails, verify both permissions are granted in System Settings.

Integration Options

Claude Desktop
  1. Install Claude Desktop

  2. Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "macos-mcp": {
      "command": "uvx",
      "args": ["macos-mcp"]
    }
  }
}
  1. Restart Claude Desktop
Gemini CLI
  1. Install Gemini CLI:
npm install -g @google/gemini-cli
  1. Navigate to ~/.gemini and open settings.json

  2. Add the server config:

{
  "theme": "Default",
  "mcpServers": {
    "macos-mcp": {
      "command": "uvx",
      "args": ["macos-mcp"]
    }
  }
}
  1. Restart Gemini CLI
Claude Code
  1. Install Claude Code

  2. Add to your project configuration or use the MCP marketplace integration

Other Integrations

Any client supporting the Model Context Protocol can integrate macOS-MCP by configuring the uvx macos-mcp command in their MCP server settings.


MCP Tools

macOS-MCP provides a comprehensive toolset for desktop automation:

Tool Purpose
Click Click at coordinates with support for left, right, and double-click
Type Type text at cursor position, optionally clearing existing text
Scroll Scroll vertically or horizontally in focused window or regions
Move Move mouse pointer or drag to coordinates
Shortcut Press keyboard shortcuts (Cmd+C, Cmd+Tab, etc.)
Snapshot Capture desktop state with interactive elements and coordinates. Set use_vision=True for annotated screenshots
App Launch applications, manage windows (resize/move), switch between apps. Supports app names and bundle IDs
Shell Execute shell commands or AppleScript. Use mode='osascript' for AppleScript
Scrape Extract and convert webpage content to Markdown format
Wait Pause execution for a defined duration

Limitations

  • Accessibility Requirements: Manual permission grant required in System Preferences
  • App Compatibility: Some applications have limited or no Accessibility API support
  • Performance Variance: Complex UIs with many elements may have slower traversal
  • Text Input: Some specialized input fields may not properly receive keystrokes
  • Authentication: Cannot interact with system authentication dialogs

Security

⚠️ Important Security Notice: macOS-MCP operates with full Accessibility API permissions and executes real system operations without sandboxing. It can perform permanent, irreversible actions.

Before using macOS-MCP:

  • ✅ Grant Accessibility permissions only to trusted applications
  • ✅ Understand that Shell commands execute with full user privileges
  • ✅ Review AI-generated action plans before execution
  • ✅ Use only in virtual machines or isolated environments with valueless data
  • ✅ Create backups before testing in production-like scenarios

⛔ Do NOT use on:

  • Systems with irreplaceable data
  • Production machines or shared systems
  • Compliance-regulated environments (HIPAA, PCI, etc.)

For detailed security guidance, see SECURITY.md.

Contributing

We welcome contributions! Please see CONTRIBUTING.md for:

  • Development setup and code standards
  • Testing requirements
  • Pull request process
  • Coding conventions (Ruff formatting, 100 char line length)

License

macOS-MCP is licensed under the MIT License - see LICENSE for details.

Acknowledgements

macOS-MCP is built with excellent open-source projects:

  • PyObjC - Python to Objective-C bridge
  • Pillow - Python Imaging Library
  • FastMCP - MCP framework
  • macOS Accessibility API (ApplicationServices)

Citation

If you use macOS-MCP in your research or project, please cite:

@software{macos-mcp,
  author       = {Jeomon George},
  title        = {macOS-MCP: Lightweight MCP Server for macOS Automation},
  year         = {2025},
  publisher    = {GitHub},
  url          = {https://github.com/Jeomon/macos-mcp}
}

Questions or Issues? Open an issue or check SECURITY.md for security concerns.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

macos_mcp-0.2.3.tar.gz (235.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

macos_mcp-0.2.3-py3-none-any.whl (73.9 kB view details)

Uploaded Python 3

File details

Details for the file macos_mcp-0.2.3.tar.gz.

File metadata

  • Download URL: macos_mcp-0.2.3.tar.gz
  • Upload date:
  • Size: 235.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macos_mcp-0.2.3.tar.gz
Algorithm Hash digest
SHA256 71f178ededf26c64faea35101348c8e2f7381bb196e287c8cab912eb9f034415
MD5 b0c59a7b116e4aab584ca3e5b99a4499
BLAKE2b-256 8d27cfe0c59079c3a4a43974ff31192c06ab080211dbcfb2710abaf67a05ddf4

See more details on using hashes here.

Provenance

The following attestation bundles were made for macos_mcp-0.2.3.tar.gz:

Publisher: publish.yml on CursorTouch/MacOS-MCP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file macos_mcp-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: macos_mcp-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 73.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macos_mcp-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b843a003cac49dd17d7a46f02c1f42630e2ce9133610069e78cb96a55be84538
MD5 612e111ecbad5adbbc3d974849242210
BLAKE2b-256 254a4bbe6a2f3fc5cb777521a58629f08ba1c3aa70c4bc2f47b559d139b6a436

See more details on using hashes here.

Provenance

The following attestation bundles were made for macos_mcp-0.2.3-py3-none-any.whl:

Publisher: publish.yml on CursorTouch/MacOS-MCP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page