Skip to main content
Glama
MayCXC
by MayCXC

osa-mcp

Give your AI access to every scriptable app on your Mac.

osa-mcp is an MCP server that automatically discovers all scriptable macOS apps (Mail, Calendar, Finder, Music, Notes, Safari, &c.) and serves their scripting dictionaries to your AI. No configuration, no hardcoded app list. Just connect and go.

What you do

npx

claude mcp add my-mac -- npx -y osa-mcp

bunx

claude mcp add my-mac -- bunx osa-mcp

Homebrew

brew install MayCXC/osa-mcp/osa-mcp
claude mcp add my-mac -- osa-mcp

Remote Mac via SSH

If your AI runs on a different machine, connect to your Mac over SSH. Enable Remote Login in System Settings > General > Sharing first.

claude mcp add my-mac -- npx -y osa-mcp --ssh user@macbook.local

JSON config

All of the above can also be added to your MCP settings file directly:

{
  "mcpServers": {
    "my-mac": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "osa-mcp"]
    }
  }
}

For SSH, add "--ssh", "user@macbook.local" to the args.

Related MCP server: macos-computer-use-mcp

What you get

osa-mcp serves every scriptable app on your Mac through two tools:

  • search runs JavaScript over the scripting dictionaries of all the apps, which it reads from your Mac on every search, so apps you install, update or remove show up without a restart. Your AI writes an async arrow function over apps, where each app has the commands, classes, record types, value types and enumerations its dictionary defines.

  • execute runs JXA or AppleScript on your Mac. A string result comes back as it is, and any other value as source text, so lists, records and object references stay whole.

Your AI reads only what its code selects, so osa-mcp stays light in its context however many apps you have. On a Mac with 33 scriptable apps, the two tools take 21 tokens when the client loads tool definitions on demand, as Claude Code does, and about 2,100 when it loads them all up front.

Examples

A search for the Mail commands whose descriptions mention a mailbox:

async () => apps.find(a => a.name === 'Mail').commands
  .filter(c => c.description.toLowerCase().includes('mailbox'))
  .map(c => c.name)

A JXA script for the names of the disks Finder sees:

Application("Finder").disks.name()

Install from source

git clone https://github.com/MayCXC/osa-mcp.git
cd osa-mcp
bun install
claude mcp add my-mac -- bun "$PWD/src/mcp.ts"

Requires Bun.

License

BSD 3-Clause. See LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Connect AI with any macOS app. Deep integration with native apps like Calendar, Mail, Notes, plus UI control for all applications. Works with Claude, Cursor, Raycast, and any MCP-compatible AI.
    46
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides native macOS computer control tools including mouse and keyboard simulation, screenshot capture, and application management for MCP-compatible agents. It enables AI assistants to directly interact with the macOS operating system and installed apps through standard tool calls.
    24
    44 npm
    8
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI to dynamically discover and control native macOS applications (like Finder, Mail, Safari) through AppleScript/JXA automation without pre-built integrations.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    426+ MCP tools for macOS, all on-device — local AI inference (llama.cpp on Metal), voice, vision OCR, local RAG, browser automation, and ~140 system actions across 26 macOS domains. Nothing leaves your Mac.
    3
    MIT