Skip to main content
Glama
computer-use-mac-mcp

computer-use-mac-mcp

computer-use-mac-mcp

中文文档 | English

MCP server for macOS desktop automation — screenshot, click, type, scroll and more.

Gives Claude (or any MCP-compatible agent) the ability to see and control your Mac. Implements the standard mcp__computer-use__* tool interface so it works with Claude Desktop, Claude Code, Cursor, and any other MCP client — no API key required at the tool level.

Pure JS, no native addons. Uses screencapture, osascript (JXA/AppKit), and CoreGraphics CGEvent.

Highlights

  • Standard MCP interface — plug into any MCP-compatible client, not locked to a specific AI provider

  • Retina display aware — correctly scales screenshot-space coordinates to physical pixels

  • CJK / Unicode text input — automatically routes non-ASCII text through clipboard paste (fixes garbled Chinese/Japanese/Korean input)

  • Multi-monitor support — switch_display tool lets agents target any connected display

  • No native compilation — pure JS implementation, works with Node.js ≥ 18 or Bun ≥ 1.3

Related MCP server: Computer Use MCP Server

Requirements

  • macOS

  • Node.js ≥ 18 or Bun ≥ 1.3

  • Screen Recording permission — System Settings → Privacy & Security → Screen Recording

  • Accessibility permission — System Settings → Privacy & Security → Accessibility

Quick Start

# 1. Clone
git clone https://github.com/somethingforheheda/computer-use-mac-mcp.git
cd computer-use-mac-mcp

# 2. Install dependencies
npm install

# 3. Add to your MCP client config (see below)

Claude Code CLI

computer-use is a reserved name in Claude Code CLI. Use a different name:

claude mcp add -s user mac-control /path/to/node /path/to/computer-use-mac-mcp/index.js

Tools will be available as mcp__mac-control__screenshot, mcp__mac-control__left_click, etc.

Claude Desktop

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

{
  "mcpServers": {
    "computer-use": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/computer-use-mac-mcp/index.js"]
    }
  }
}

Claude Code / jarvis-cc

{
  "computer-use": {
    "type": "stdio",
    "command": "node",
    "args": ["/path/to/computer-use-mac-mcp/index.js"]
  }
}

Available Tools (15)

Tool

Description

screenshot

Capture the screen as JPEG

left_click

Left-click at (x, y)

right_click

Right-click at (x, y)

middle_click

Middle-click at (x, y)

double_click

Double-click at (x, y)

left_click_drag

Click and drag from one point to another

mouse_move

Move cursor without clicking

scroll

Scroll at (x, y)

cursor_position

Get current cursor coordinates

type

Type text — auto clipboard for CJK/Unicode

key

Press a key or combo (e.g. command+c, command+a)

hold_key

Hold a key for a specified duration

zoom

Capture and zoom a screen region

request_access

Declare which apps the agent will control

switch_display

Switch active display for multi-monitor setups

Coordinate System

Coordinates are in screenshot-space pixels. Always call screenshot first — the server caches the display dimensions and uses them to correctly map click coordinates to physical pixels (including Retina 2× scaling).

Multi-monitor

# Switch to external display (0 = primary, 1 = secondary, ...)
switch_display { "display": 1 }

After switching, subsequent screenshot and click tools target the selected display.

How it works

Three packages under packages/:

Package

Responsibility

Implementation

computer-use-mcp

MCP server, tool definitions, coordinate dispatch

MCP SDK + bindSessionContext

computer-use-swift

Screenshot, app listing, app activation

screencapture + osascript (JXA/AppKit)

computer-use-input

Mouse movement, clicks, scroll, keyboard

JXA + CoreGraphics CGEventCreateMouseEvent / CGEventCreateKeyboardEvent

The entry point (index.js) wires these together and exposes them over stdio as an MCP server. No subprocess is spawned per tool call — everything runs in a single Node process.

Comparison

this project

PallavAg/claude-computer-use-macos

Language

JS (Node/Bun)

Python

Interface

MCP Server (any client)

Standalone script (Claude API only)

Retina support

✅

❌

CJK text input

✅ auto clipboard

❌ garbled output

Multi-monitor

✅ switch_display

❌

Needs API key to run

❌

✅

Native addons

❌ pure JS

❌ pure Python

License

MIT

Available Tools

15 tools
cursor_positionA

Get the current cursor position as {x, y} in screenshot coordinates.

Inputs: no named parameters.

double_clickA

Double-click the left mouse button at the specified coordinates.

Inputs: x (required), y (required).

hold_keyC

Hold one or more keys for a duration.

Inputs: key (required), duration_ms.

keyA

Press a key or key combination. Use "+" to combine modifiers, e.g. "ctrl+c", "command+shift+z". Named keys: escape, return, tab, space, delete, up, down, left, right, f1–f12. IMPORTANT: On macOS, always prefer "command" over "ctrl" for standard shortcuts — e.g. use "command+a" (select-all), "command+c" (copy), NOT "ctrl+a"/"ctrl+c". "ctrl+a" and similar ctrl-shortcuts may trigger third-party app global hotkeys.

Inputs: text (required), repeat.

left_clickA

Click the left mouse button at the specified coordinates.

Inputs: x (required), y (required), modifiers.

left_click_dragA

Click and drag the mouse from start_coordinate to coordinate.

Inputs: coordinate (required), start_coordinate.

middle_clickB

Click the middle mouse button at the specified coordinates.

Inputs: x (required), y (required).

mouse_moveA

Move the mouse cursor to the specified coordinates without clicking.

Inputs: x (required), y (required).

request_accessA

Request permission to control specific applications. Call this FIRST before any other computer-use tool. The user will approve or deny access for each app.

Inputs: apps (required).

right_clickA

Click the right mouse button at the specified coordinates.

Inputs: x (required), y (required).

screenshotA

Take a screenshot of the current state of the screen. Returns a JPEG image. Call this frequently to observe what is on screen.

Inputs: no named parameters.

scrollC

Scroll the mouse wheel at the specified coordinates.

Inputs: x (required), y (required), vertical_distance, horizontal_distance.

switch_displayA

Switch the active display for subsequent screenshots and actions.

Inputs: display (required).

typeB

Type text at the current cursor position. Works with any Unicode text.

Inputs: text (required).

zoomA

Take a zoomed-in screenshot of the area around the specified coordinate.

Inputs: coordinate (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each tool targets a distinct action: separate mouse clicks, dragging, mouse movement, scrolling, text input, key combos, key holding, and screen observation. The only near-overlap is type/key, but type is for Unicode text while key is for shortcuts and named keys, so the boundary is clear.

    Naming Consistency4/5

    Most tools follow a lowercase snake_case action-oriented pattern like left_click, mouse_move, hold_key, and request_access. A few names are noun-style or bare verbs—key, screenshot, cursor_position—making the pattern slightly inconsistent, but they are still readable and predictable.

    Tool Count5/5

    15 tools is well-scoped for a computer-use MCP server covering mouse, keyboard, screen capture, display switching, and permission handling. Each tool serves a distinct and justified purpose without redundancy.

    Completeness5/5

    The toolkit covers the core computer-use loop thoroughly: observe via screenshot/zoom, inspect cursor state, perform mouse actions, input text and keyboard shortcuts, hold keys, drag, scroll, and manage permissions/displays. There are no dead ends for common GUI automation workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An open-source local MCP server for macOS that provides desktop control tools (click, type, scroll, etc.) callable from any MCP-aware client.
      10
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Standalone MCP server that gives AI agents full GUI control over macOS — screenshots, mouse, keyboard, apps, clipboard, and multi-display — with zero private dependencies.
      20
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      MCP server that enables AI to fully control macOS — mouse, keyboard, terminal, screenshots, window management, UI element detection, and provides AI-optimized information reporting.
      36
      30 npm
      MIT