CCM
/MCP
SkillsMCPMarketplacesDigestLearnAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Claude Code Marketplaces

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Learn
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Airmcp

heznpc/airmcp
11STDIOregistry active
Summary

A comprehensive Apple automation server that exposes 272 tools across Calendar, Reminders, Notes, Mail, Photos, Health, Music, Maps, iWork, and Google Workspace through JXA and optional Swift bridges. Ships with human-in-the-loop approval gates for destructive operations, HMAC-chained audit logs, and rate limiting at 60 calls per minute. The default starter set loads 111 tools; use the full flag to enable all 29 modules. Includes 232 auto-generated Shortcuts and a Skills DSL for multi-step workflows. Requires macOS 14 or later; Swift-backed features like HealthKit, Vision, and Apple Intelligence need the optional bridge and macOS 26 on Apple Silicon. Reach for this when you need governed, auditable access to native Apple APIs from Claude or any MCP client.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
Put your SEO on autopilot
Put your SEO on autopilot
An agent that runs the SEO playbooks that move rankings and ships PRs you control.
Get founding access →
Vibe Prospecting MCPVibe Prospecting MCP
Vibe Prospecting MCP
Connect Claude to +800M contacts, +150M companies. Find & Enrich leads in chat.
Try For Free →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
Put your SEO on autopilot
Put your SEO on autopilot
An agent that runs the SEO playbooks that move rankings and ships PRs you control.
Get founding access →
Vibe Prospecting MCPVibe Prospecting MCP
Vibe Prospecting MCP
Connect Claude to +800M contacts, +150M companies. Find & Enrich leads in chat.
Try For Free →
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
Put your SEO on autopilot
Put your SEO on autopilot
An agent that runs the SEO playbooks that move rankings and ships PRs you control.
Get founding access →
Vibe Prospecting MCPVibe Prospecting MCP
Vibe Prospecting MCP
Connect Claude to +800M contacts, +150M companies. Find & Enrich leads in chat.
Try For Free →
Categories
Monitoring & Observability
Registryactive
Packageairmcp
TransportSTDIO
UpdatedJun 10, 2026
View on GitHub

AirMCP

AirMCP

npm version Tests License: MIT GitHub stars

Open action runtime for Apple-native agents. Skills DSL workflow engine, semantic memory, OAuth 2.1, HMAC-chained audit log — over optional native Swift bridges into EventKit, HealthKit, PhotoKit, Vision, and Foundation Models. 272 tools across 29 Apple + Google Workspace modules (a curated starter set loads by default; --full enables all). Connect Claude, Codex, opencode, Gemini CLI, Antigravity, Cursor, Zed, Cline, JetBrains Air, OpenClaw, and Xcode 27 agents (which speak MCP since 26.3 and host any Agent Client Protocol agent since WWDC26) — any MCP-capable AI.

Part of: Human-Controlled AI Systems · Research Program 1 (anchor — Apple-side agent governance).

Requires: macOS for the server. The default npx -y airmcp loads a curated starter module set (~111 tools); --full (or AIRMCP_FULL=true) enables all 29 modules / 272 tools. Most tools are pure JXA and work on macOS 14+ with no extra setup. Swift-backed tools — Apple Intelligence, HealthKit, on-device semantic search, recurring events/reminders, photo import/delete/classify, Vision, Speech, Location, Bluetooth — need the optional Swift bridge (npm run swift-build, or install via the .mcpb bundle); without it those tools return a clear "Swift bridge not found" error and everything else keeps working. Apple Intelligence additionally requires macOS 26+ on Apple Silicon.

Available in multiple languages at the project landing page.

What this is — at a glance

  • Currently implemented — 272 tools across 29 modules (a curated starter set loads by default; --full enables all; Swift-backed tools need the optional bridge, see Requires above); HMAC-chained audit log with tamper-detection test suite; HITL approval per destructive call; rate limit (60/min + 10 destructive/hr); allowNetwork declarative HTTP policy (RFC 0002); OAuth 2.1 + Resource Indicators (RFC 0005 Steps 1+2 — RS256/ES256 JWT, scope gate, .well-known/oauth-protected-resource per RFC 9728); sessionless .well-known/mcp.json discovery; 232 Shortcuts/AppIntents auto-generated from the tool manifest; native SwiftUI menubar app (ad-hoc signed; Developer ID notarization pending); Claude Code plugin package (.claude-plugin/plugin.json + .mcp.json at repo root, with the .mcp.json invocation pinned to the same npm version as the manifest so the marketplace SHA-approval and the installed runtime always agree). On every CI run, npm run mcp:validate boots the built dist/index.js under a pinned @modelcontextprotocol/inspector --cli and checks the tools/list response for JSON-RPC envelope drift, embedded error envelopes, and zero-tool responses — this is a wire-shape gate, not a substitute for the HMAC / HITL / audit primitives, which have their own tests.
  • Planned — RFC 0005 Step 3 browser PKCE guide; stateless streamable HTTP for horizontal scale per MCP 2026 roadmap; iOS/visionOS exploration (v3.0+); consolidated registry re-publishing across Anthropic MCP Registry, Smithery, PulseMCP, Glama, MCP Market, Cline Marketplace, LobeHub (the .well-known/mcp.json endpoint is published, mcpName is set, and past ad-hoc registrations exist on some registries but their versions/metadata have drifted out of date — a single self-publishing PR will re-push the current manifest to each); Claude Code Plugin submission to anthropics/claude-plugins-community (community marketplace launched 2026-05-22; the plugin package itself — .claude-plugin/plugin.json + .mcp.json — lives at repo root and is validated by CI; the remaining step is the operator-side submission via clau.de/plugin-directory-submission); App Schemas codegen (WWDC 2026 introduced App Schemas — a new agentic layer over App Intents + App Entities, plus a View Annotations API for on-screen awareness and an App Intents Testing framework; the WWDC26 developer guides are now live and the codegen targets are pinned in docs/rfc/0011-post-wwdc-2026.md §0.3; AirMCP already auto-generates 232 App Intents via RFC 0007, and scripts/gen-swift-intents.mjs will be extended to emit the schema shapes once the macOS 27 SDK is testable in an isolated environment). iOS companion server (ios/Sources/AirMCPServer, ~1500 LOC) is preview, not GA — macOS is the shipping surface.
  • Design intent — Core infra (HITL · audit · rate-limit · HMAC chain · network policy · OAuth scope gate) is the differentiated layer; the tool surface is broad and JXA-thin by design. JXA is the bridge, not the product. The interesting code lives in src/shared/ (audit, rate-limit, HITL, network policy, OAuth gate, structured-content validators) and the Swift bridges (swift/Sources/AirMCPKit) for EventKit / HealthKit / PhotoKit / Vision / FoundationModels. Blast-radius unit is one tool call. Adjacent to — not a replacement for — the canonical Model Context Protocol reference servers (Everything, Filesystem, Fetch, Git, Memory, Sequential Thinking, Time); AirMCP fills the Apple-native domain those references leave open. Aligned with Anthropic's three-layer containment doctrine (How we contain Claude across products, 2026-05-27 engineering blog): the Environment layer (sandbox / VM / egress controls) and Model layer (system prompts / classifiers) are Anthropic's host-side responsibility; AirMCP implements the External Content layer — tool-permission gating + MCP server auditing — for the Apple-native domain, complementary to (not replacing) Claude Code's process-level Seatbelt/bubblewrap sandbox. The same production governance primitives (per-call HITL, scope-gated permissions, real-time tamper-evident audit, rate-limited destructive ops, emergency stop file) that high-stakes vertical MCP servers — financial trading, crypto exchange, supply-chain attestation — build per-deployment are surfaced once here as OSS reference.
  • Non-goals — Per-session batched approval that covers "the next N calls" (failure mode this project is built around). Editable or skippable audit entries (the chain is load-bearing). Promising iOS parity on the public surface (preview only). Replacing native Apple apps — AirMCP automates them, it does not reimplement them. Headless / non-Apple platforms beyond what Google Workspace already provides.
  • Redacted — External persons, accounts, and any internal-case identifiers are deliberately omitted. Self-critical metrics ("wrapper percentage", coverage-as-quality) are not surfaced as positioning.

Features

  • 272 tools (29 modules) — Apple app CRUD + system control + Apple Intelligence + UI Automation + Screen Capture + Maps + Podcasts + Weather + iWork (Pages/Numbers/Keynote) + Google Workspace + dynamic shortcuts + context memory + audit introspection
  • 232 Shortcuts / Siri AppIntents — auto-generated from the tool manifest (82 Interactive Snippet views + 13 AppEnum pickers); AskAirMCPIntent natural-language agent on iOS 26+/macOS 26+ via FoundationModels
  • 32 prompts + 14 YAML skill built-ins — per-app workflows + cross-module + developer workflows + Skills DSL (inputs / parallel / loop / on_error / retry / 9 event triggers)
  • 9 MCP resources — Notes, Calendar, Reminders, Music, Mail, System, Context Memory + unified context://snapshot/{depth}
  • 3 interactive MCP Apps — calendar_week_view, music_player, timeline_today (fuses events + reminders on one day-axis)
  • 9 event triggers — calendar, reminders, pasteboard, mail unread, focus mode, now playing, file modified, screen locked/unlocked — skills bind to any of these for automation
  • Safety first — HITL approval + audit log + rate limit (60/min + 10 destructive/hr) + emergency stop file + allowNetwork declarative HTTP policy (RFC 0002)
  • OAuth 2.1 + Resource Indicators — RFC 0005 Steps 1+2: with-oauth* network policy, JWT verification (RS256/ES256 only, 60s clock tolerance), scope gate (mcp:read / mcp:write / mcp:destructive / mcp:admin), .well-known/oauth-protected-resource per RFC 9728, zero-interaction local dev via npm run dev:oauth. Browser MCP clients: see docs/oauth-browser-pkce.md for the Authorization Code + PKCE setup
  • Sessionless discovery — .well-known/mcp.json publishes the full tool + module inventory, network policy, allowed origins, and authorization mode so registry crawlers (Anthropic MCP Registry, Smithery, PulseMCP, Glama) catalog AirMCP without opening a session
  • JXA + Swift 6.2 bridge — JXA for basic automation, Swift 6 strict concurrency with EventKit/PhotoKit/HealthKit/Vision/FoundationModels
  • Apple Intelligence — On-device summarize / rewrite / proofread / ai_agent / ai_plan_metrics (planner regression catcher) — all via Foundation Models (macOS 26+). WWDC 2026 made the model layer officially pluggable: Foundation Models gained a LanguageModel protocol where on-device, Private Cloud Compute, and third-party cloud models back the same session API — Anthropic and Google publish Swift packages for their frontier models (WWDC26 session 241, first-party). Apple's own announcement names no Siri backbone vendor — the widely reported Gemini deal is press reporting, not Apple's wording — and AirMCP doesn't bet on one either way: the governance layer (per-call HITL, HMAC-chained audit, scope gate, rate limits) is model-agnostic, and the brains stay in whatever MCP client you connect.
  • Context memory — memory_put/query/forget/stats + memory://recent resource for facts/entities/episodes, surviving restarts
  • Native menubar app — SwiftUI companion with onboarding wizard, auto-start, log viewer, update notifications, permission setup, server crash auto-restart. Current release builds are ad-hoc signed; Developer ID codesigning + notarization (Gatekeeper-green) are wired in .github/workflows/release-app.yml but gated on Apple signing secrets, so they have not shipped yet.
  • One-click setup — setup_permissions tool or menubar app to request all macOS permissions at once
  • Dual transport — stdio (default) + HTTP/SSE (--http) with token auth, origin allow-list, and startup invariants that refuse to boot misconfigured servers

Get Started

Two paths. Claude Desktop users get one-click install via .mcpb. Everyone else uses the CLI wizard.

Option A — Claude Desktop one-click install (recommended for non-devs)

  1. Download airmcp-<version>.mcpb from Releases.
  2. Drag it onto Claude Desktop, or Settings → Extensions → Install from file….
  3. Fill in the config form (Gemini API key optional; modules toggle). Click Install.

Full walkthrough: docs/mcpb.md.

Option B — CLI wizard (2 minutes)

1. Install Node.js — brew install node or nodejs.org.

2. Run the Setup Wizard:

npx airmcp init

Picks the modules to enable, writes the MCP-client config, saves preferences to ~/.config/airmcp/config.json.

3. Restart your MCP client. Your AI can now read notes, manage reminders, check your calendar, and more.

Troubleshooting

npx airmcp doctor

Checks Node.js version, config files, MCP client setup, macOS permissions, and module status — all in one command.

Try It — Talk to Your Mac

Once connected, just ask your AI in natural language. Here are some things you can try:

Everyday

  • "Read my latest notes and summarize them"
  • "What's on my calendar today?"
  • "Show me overdue reminders and reschedule them to tomorrow"
  • "Play some jazz on Apple Music"

Productivity

  • "Draft a meeting agenda in Notes, then create calendar events for each topic"
  • "Find all emails from Alex about the project and create reminders for action items"
  • "Search my contacts for everyone at Acme Corp"

System Control

  • "Turn on dark mode, set volume to 50%, and lower brightness"
  • "Take a screenshot and save it to my Desktop"
  • "What apps are running right now? Quit anything I'm not using"

Research & Web

  • "Open the Apple developer docs in Safari and summarize the page"
  • "Search my Safari tabs for that article I was reading about Swift"

Power User

  • "Scan nearby Bluetooth devices"
  • "Get my current GPS coordinates and show the weather here"
  • "Record my screen for 10 seconds"
  • "Run my 'Morning Routine' shortcut"

Cross-App Workflows

  • "Check today's meetings, find related notes, and create a prep checklist in Reminders"
  • "Search my files for the Q1 report, read it, and draft a summary email to the team"

These are just starting points — with 272 tools across 29 Apple apps, the combinations are endless.


Why AirMCP?

AirMCP is a runtime layer, not a tool collection. The 272 tools operate on Apple data; the workflow engine + memory + safety operate on the tools. The value lives below the tool surface in infrastructure Apple won't ship in their own MCP API:

  • Skills DSL workflow engine — declare multi-step automations in YAML with parallel / loop / on_error / retry / 9 event triggers. Not one-shot tool calls — a runtime that orchestrates.
  • Semantic memory — facts / entities / episodes with Gemini or on-device Swift embeddings. Persistent across restarts. This is agent context, not an OS feature.
  • Safety primitives — HITL approval, HMAC-chained audit log with tamper-detection asserted as a tested contract (tests/audit-tamper-detection.test.js), rate limiting, emergency stop, OAuth 2.1 + Resource Indicators (production-grade JWT verifier with RS256/ES256 + RFC 8707 audience + RFC 9728 protected-resource metadata + DPoP advertisement).
  • Native Swift bridge (optional — npm run swift-build or the .mcpb bundle; not shipped in the npm tarball) — direct access to EventKit / HealthKit / PhotoKit / Vision / Foundation Models. Not an osascript wrapper.
  • Multi-client by design — same server works for Claude, Codex, opencode, Gemini CLI, Antigravity (Google I/O 2026 CLI + desktop), Cursor, Zed, Cline, JetBrains Air, OpenClaw, ChatGPT (MCP Apps), and any future MCP-capable AI. No per-client porting.

What AirMCP is — and isn't

Is: the runtime layer for AI agents on Apple. When Apple ships their system MCP API (likely partial, focused on user-facing CRUD), AirMCP's tool surface gets delegated to the OS — and the runtime layer above stays. Apple Notes / Reminders / Calendar are the bottom; AirMCP's value is the middle.

Isn't: a thin per-app wrapper. The distinctive thing is integrated depth — 272 tools + Swift bridge + Skills DSL + production-grade safety primitives + Google Workspace + iOS AppIntents in one auditable open-source codebase, with the governance layer (per-call HITL, HMAC-chained audit, scope gate, rate limit) as the load-bearing part, not the tool count.

Integrated depth

The point is the combination in one auditable codebase, not any single capability:

  • 272 tools across 29 modules — Apple app CRUD + system control + Apple Intelligence + iWork + Google Workspace + dynamic Shortcuts.
  • Skills DSL workflow engine — parallel / loop / on_error / retry / 9 event triggers.
  • Semantic memory — Gemini + on-device Swift embeddings, persistent across restarts.
  • Production safety primitives — per-call HITL, HMAC-chained audit log (tamper-detection asserted in tests/audit-tamper-detection.test.js), rate limiting, emergency stop, OAuth 2.1 + Resource Indicators (RS256/ES256 JWT + RFC 8707 audience + RFC 9728 PRM + DPoP advertisement). DPoP is advertised in the .well-known card, not enforced — dpop_bound_access_tokens_required: false; tokens are not yet bound to a proof.
  • Input validation — Zod on every tool + outputSchema on reads + script↔schema contract tests.
  • Native Swift API depth — direct EventKit / HealthKit / PhotoKit / Vision / Foundation Models, not an osascript wrapper.
  • iOS surface — 232 auto-generated AppIntents + AppShortcutsProvider (RFC 0007); AskAirMCPIntent → Foundation Models tool calling (iOS 26+).
  • 9-language i18n, multi-client (any MCP-capable AI), open source (every line auditable, modifiable, forkable).

Why this position holds

  • Tool surface is leverage, not the moat. Apple's eventual system MCP will replace many AppleScript wrappers; AirMCP's workflow engine + safety + memory + multi-client + Google Workspace layer survives as the integration above the OS.
  • Open source: every line auditable, modifiable, forkable. Apple's closed alternative won't have this.
  • Sustained development on integrated depth: actively maintained at v2.12+ with a CI-gated release pipeline, 1900+ test assertions, and the governance layer kept under tamper-detection contracts — depth that compounds over time rather than a one-shot tool dump.
  • WWDC 2026 validated the category (keynote 2026-06-08; App Schemas session 240 + agentic-security session 347, both first-party; full analysis in docs/rfc/0011-post-wwdc-2026.md). Apple deprecated SiriKit and made App Intents the mandatory — and only — way a third-party app reaches Siri, then layered App Schemas on top for agentic, cross-app, onscreen-aware actions. AirMCP already auto-generates App Intents (RFC 0007), so it was on the one blessed path before Apple made it mandatory. Apple's own agentic-security session now tells developers to add per-call user confirmation, authentication, and prompt-injection containment — the exact governance AirMCP has shipped from day one. And Apple drew a two-layer line: the consumer/Siri path is App Intents (Apple-proprietary, Siri-only) — no consumer MCP — while at the developer/agent layer Apple ratified MCP (Xcode 27 takes "skills, MCP tools and any agent via the Agent Client Protocol"; Xcode is itself an MCP server via xcrun mcpbridge). So MCP is now Apple's blessed agent-tool interface, and every non-Siri agent — Claude, Codex, opencode, Gemini CLI, Cursor, Zed, Cline, ChatGPT MCP Apps, and Apple's own Xcode — acts through MCP. Apple owns the default assistant; AirMCP is the open action runtime for every other AI client — one governed catalog feeding both the App Intents (Siri) surface and the MCP surface.

Skills DSL

Declare a multi-step workflow in YAML and expose it as an MCP prompt or tool. The executor handles error policy, retries, parallel fan-out, loops, runtime arguments, and event triggers.

name: sender-to-tasks
title: Sender → Tasks
expose_as: tool

inputs:
  query: { type: string, default: newsletter }
  mailbox: { type: string, default: INBOX }
  limit: { type: number, default: 10 }

steps:
  - id: hits
    tool: search_messages
    args: { query: "{{query}}", mailbox: "{{mailbox}}", limit: "{{limit}}" }
    retry: 2
    retry_backoff_ms: 1000

  - id: queue
    tool: create_reminder
    only_if: "{{hits}} != null"
    loop: "{{hits}}"
    on_error:
      continue # per-iteration: a HITL denial on one item
      # doesn't abort the rest of the batch
    args:
      title: "Follow up: {{_item.subject}}"
      body: "From {{_item.sender}} (query: {{query}})"

Built-in skills (14): morning-briefing, calendar-alert, inbox-triage, meeting-action-items, focus-guardian, skills-weekly-review, project-digest, weekly-digest-note, focus-block-planner, clipboard-url-to-reading, favorites-digest, sender-to-tasks, evening-winddown, daily-journal.

Event triggers: calendar_changed, reminders_changed, pasteboard_changed, mail_unread_changed, focus_mode_changed, now_playing_changed, file_modified, screen_locked, screen_unlocked.

User-authored skills land in ~/.config/airmcp/skills/*.yaml and hot-reload.


Safety & Operations

AirMCP runs with access to 272 tools on your machine. A few layers keep a buggy agent plan from turning into an incident:

  • HITL approval — every destructive tool prompts before firing (via MCP Elicitation or a Unix socket fallback). Per-call, per-scope.
  • Rate limit — 60 tool calls/minute globally, 10 destructive/hour. Token-bucket so bursts are fine; sustained rate isn't.
  • Emergency stop — touch ~/.config/airmcp/emergency-stop blocks every destructive tool immediately with a 1-second probe cache. No restart needed. rm the file to resume.
  • Audit log — every tool call lands in ~/.airmcp/audit.jsonl with PII-scrubbed args, 0600 perms, 10MB rotation. Query it via audit_log / audit_summary tools. Each entry carries an HMAC chain (single-line tamper detection — AIRMCP_AUDIT_HMAC_KEY for cross-machine integrity) and a correlation ID that threads the entry, any thrown error, and the OpenTelemetry span (when enabled) for the same call — so a failing tool can be traced across log lines with one grep. Every env knob lives in docs/environment.md (77 vars indexed by category).
  • HTTP network policy (RFC 0002) — AIRMCP_ALLOW_NETWORK = loopback-only (default) / with-token / with-token+origin / unauthenticated. Startup invariant refuses to boot a misconfigured server. Reverse-proxy header detection warns when a loopback-only server sees X-Forwarded-* so silently-public deploys get caught.
  • npx airmcp doctor — runs all the above policy + macOS compatibility + permission checks in one command.

Siri · Shortcuts · Spotlight (iOS 17+ / macOS 14+)

AirMCP's tools auto-register as Apple App Intents — 232 generated intents across read + non-destructive write surfaces (RFC 0007 Phase A). Destructive intents are env-gated (AIRMCP_APPINTENTS_DESTRUCTIVE=true opt-in). Anything that speaks the Intents system — Siri, Shortcuts, Spotlight, the Action Button, Widgets — calls them directly without opening the app.

  • Top-10 Siri phrases ship out of the box via AppShortcutsProvider (codegen'd from the MCP tool manifest).
  • Shortcuts app: every AirMCP tool appears as an action with typed parameters.
  • iOS 26 "Use Model": autonomously picks AirMCP tools as tool-call targets.
  • Interactive Snippets (iOS 26+): 50 typed tools render SwiftUI result views inline in Shortcuts/Siri/Spotlight.
  • "Ask AirMCP" (iOS 26+/macOS 26+): natural-language agent routed to Apple's on-device Foundation Models with AirMCP tools registered. 100% on-device.

See docs/shortcuts.md for the full guide + RFC 0007 for the architecture.


Client Setup

Works with any MCP-compatible client. Examples:

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "airmcp": {
      "command": "npx",
      "args": ["-y", "airmcp"]
    }
  }
}

Claude Code

claude mcp add airmcp -- npx -y airmcp

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "airmcp": {
      "command": "npx",
      "args": ["-y", "airmcp"]
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "airmcp": {
      "command": "npx",
      "args": ["-y", "airmcp"]
    }
  }
}

Other MCP Clients

Any client that supports the MCP stdio transport can use AirMCP. Use npx -y airmcp as the server command.

Local Development

git clone https://github.com/heznpc/AirMCP.git
cd AirMCP
npm install
npm run build
node dist/index.js

Developer Testing

npm run dev:test -- notes             # test one module (fast, in-process)
npm run dev:test:changed              # test only git-changed modules
npm run dev:test:watch -- notes       # watch mode: auto re-test on save
npm run dev:test -- --tool list_notes # test a single tool

See Testing & Debugging Guide for the full testing workflow.

Menubar App (Optional)

A native SwiftUI companion app for server status monitoring and permission setup.

cd app && swift build -c release
# Binary: app/.build/release/AirMCPApp

Features: onboarding wizard, auto-start on login, log viewer, update notifications, server status, one-click permission setup, MCP client config clipboard copy.

HTTP Mode

HTTP server mode for remote agents, registries, and multi-client setups:

npx airmcp --http --port 3847
  • Endpoint: POST/GET/DELETE /mcp
  • Transport: Streamable HTTP + SSE (MCP spec 2025-11-25)
  • Session management via Mcp-Session-Id header
  • Default port: 3847
  • Startup policy invariant (RFC 0002): refuses to bind public interfaces without a token — see Safety & Operations above.

Useful for running a Mac Mini as an "always-on AI hub."

Claude in Chrome & other browser-based MCP clients

Browser extensions — including Anthropic's Claude in Chrome — can't spawn stdio subprocesses, so they consume MCP over HTTP. AirMCP's HTTP transport is designed for exactly this case.

1 · Start AirMCP with a token + origin allow-list:

# Generate a token and keep it — you'll paste it into the Chrome extension.
export AIRMCP_HTTP_TOKEN=$(openssl rand -hex 32)

# Only accept requests whose Origin matches Claude's web UI:
export AIRMCP_ALLOWED_ORIGINS="https://claude.ai"

# Declarative policy: external binding, token required, Origin allow-list enforced.
export AIRMCP_ALLOW_NETWORK="with-token+origin"

npx airmcp --http --bind-all --port 3847

2 · In the browser extension's MCP settings, add:

FieldValue
Server URLhttp://<your-mac>:3847/mcp (or https://… behind a TLS-terminating proxy)
Auth headerAuthorization: Bearer <AIRMCP_HTTP_TOKEN>
TransportStreamable HTTP (SSE)

3 · Verify wiring:

# From the same machine — should return the server card JSON:
curl http://127.0.0.1:3847/.well-known/mcp.json

The response includes "network_policy": "with-token+origin" so the client can confirm what it's connecting to before a single tool call. Registry crawlers (Anthropic MCP Registry, Smithery, PulseMCP, Glama) use the same endpoint to build their catalog without connecting live — it carries the full tool inventory (tools.count, tools.names), enabled modules, license, and homepage, so a crawler can surface "AirMCP: 272 tools across calendar, notes, mail, …" without opening a session. MCP spec version pinned via schema_version: "2025-11-25". When the policy is with-oauth*, a sibling /.well-known/oauth-protected-resource endpoint (RFC 9728) advertises the authorization server + audience + supported scopes so conforming clients can negotiate OAuth before the first MCP call.

Running AirMCP on a laptop that suspends? Put the menubar app on your Mac Mini / always-on host, point the browser at that hostname, and leave the token in Chrome's secure storage. Revoke by rotating AIRMCP_HTTP_TOKEN and restarting the server.

Security gotchas — in order of "most likely to bite":

  • Don't put AirMCP behind a proxy that strips X-Forwarded-* without also switching to AIRMCP_ALLOW_NETWORK=with-token. AirMCP detects proxy headers and warns, but only when it's in loopback-only mode — flip the policy first.
  • Don't hand-edit origin lists into "*" — the Origin check is your last line of defence if a token leaks from the extension's storage.
  • touch ~/.config/airmcp/emergency-stop on the server blocks every destructive call within 1s, no restart needed. Remember this path.

Tools

Notes (12 tools)

ToolDescriptionType
list_notesList all notes with title, folder, datesread
search_notesSearch by keyword in title and bodyread
read_noteRead full content by IDread
create_noteCreate a note with HTML bodywrite
update_noteReplace entire bodydestructive
delete_noteDelete (moved to Recently Deleted)destructive
move_noteMove to another folderdestructive
list_foldersList folders with note countsread
create_folderCreate a new folderwrite
scan_notesBulk scan with metadata and previewread
compare_notesCompare 2-5 notes side by sideread
bulk_move_notesMove multiple notes at oncedestructive

Reminders (11 tools)

ToolDescriptionType
list_reminder_listsList all lists with countsread
list_remindersFilter by list/completedread
read_reminderFull details by IDread
create_reminderCreate with due date/prioritywrite
update_reminderUpdate propertiesdestructive
complete_reminderMark complete/incompletewrite
delete_reminderDelete permanentlydestructive
search_remindersSearch by keyword in name/bodyread
create_reminder_listCreate a new reminder listwrite
delete_reminder_listDelete a reminder listdestructive
create_recurring_reminderCreate with recurrence rule (Swift/EventKit)write

Calendar (10 tools)

ToolDescriptionType
list_calendarsList calendars with name/colorread
list_eventsEvents in date range with paginationread
read_eventFull details with attendeesread
create_eventCreate with location/descriptionwrite
update_eventUpdate propertiesdestructive
delete_eventDelete permanentlydestructive
search_eventsKeyword search in date rangeread
get_upcoming_eventsNext N events from nowread
today_eventsAll events for todayread
create_recurring_eventCreate with recurrence rule (Swift/EventKit)write

Contacts (10 tools)

ToolDescriptionType
list_contactsList with email/phone, paginationread
search_contactsSearch by name, email, phone, or orgread
read_contactFull details (emails, phones, addresses)read
create_contactCreate with email/phone/orgwrite
update_contactUpdate propertiesdestructive
delete_contactDelete permanentlydestructive
list_groupsList contact groupsread
add_contact_emailAdd email to existing contactwrite
add_contact_phoneAdd phone to existing contactwrite
list_group_membersList contacts in a groupread

Mail (11 tools)

ToolDescriptionType
list_mailboxesList mailboxes with unread countsread
list_messagesRecent messages in a mailboxread
read_messageFull message contentread
search_messagesSearch by subject/senderread
mark_message_readMark read/unreadwrite
flag_messageFlag/unflag a messagewrite
get_unread_countTotal unread across all mailboxesread
move_messageMove message to another mailboxdestructive
list_accountsList all mail accountsread
send_mailCompose and send an emailwrite
reply_mailReply to an email messagewrite

Music (17 tools)

ToolDescriptionType
list_playlistsList playlists with track countsread
list_tracksTracks in a playlistread
now_playingCurrent track and playback stateread
playback_controlPlay, pause, next, previouswrite
search_tracksSearch by name/artist/albumread
play_trackPlay a specific track by namewrite
play_playlistStart playing a playlistwrite
get_track_infoDetailed track metadataread
set_shuffleSet shuffle and repeat modewrite
create_playlistCreate a new playlistwrite
add_to_playlistAdd a track to a playlistwrite
remove_from_playlistRemove a track from a playlistdestructive
delete_playlistDelete an existing playlistdestructive
get_ratingGet rating, favorited, and disliked statusread
set_ratingSet star rating (0-100) for a trackwrite
set_favoritedMark or unmark a track as favoritedwrite
set_dislikedMark or unmark a track as dislikedwrite

Finder (8 tools)

ToolDescriptionType
search_filesSpotlight file searchread
get_file_infoFile info (size, dates, tags)read
set_file_tagsSet Finder tagsdestructive
recent_filesRecently modified filesread
list_directoryList files in directoryread
move_fileMove/rename filedestructive
trash_fileMove to Trashdestructive
create_directoryCreate new directorywrite

Safari (12 tools)

ToolDescriptionType
list_tabsList tabs across all windowsread
read_page_contentRead page text contentread
get_current_tabCurrent active tab URL/titleread
open_urlOpen URL in Safariwrite
close_tabClose a specific tabdestructive
activate_tabSwitch to a specific tabwrite
run_javascriptExecute JavaScript in tabwrite
search_tabsSearch tabs by title/URLread
list_bookmarksList all bookmarks across foldersread
add_bookmarkAdd a bookmark to Safariwrite
list_reading_listList Reading List itemsread
add_to_reading_listAdd URL to Reading Listwrite

System (27 tools)

ToolDescriptionType
get_clipboardRead clipboard contentread
set_clipboardWrite to clipboardwrite
get_volumeGet system volumeread
set_volumeSet system volumewrite
toggle_dark_modeToggle dark/light modewrite
get_frontmost_appGet frontmost applicationread
list_running_appsList running applicationsread
get_screen_infoDisplay informationread
show_notificationShow system notificationwrite
capture_screenshotCapture screenshot (full/window/selection)write
get_wifi_statusWiFi connection status and signalread
toggle_wifiTurn WiFi on or offwrite
list_bluetooth_devicesList paired Bluetooth devicesread
get_battery_statusBattery percentage, charging, time remainingread
get_brightnessGet display brightness levelread
set_brightnessSet display brightness levelwrite
toggle_focus_modeToggle Do Not Disturb on or offwrite
system_sleepPut system to sleepwrite
prevent_sleepKeep system awake for N secondswrite
system_powerShutdown or restart the systemdestructive
launch_appLaunch/activate an applicationwrite
quit_appQuit a running applicationdestructive
is_app_runningCheck if an application is runningread
list_all_windowsList all windows across all appsread
move_windowMove a window to specific coordinateswrite
resize_windowResize a windowwrite
minimize_windowMinimize or restore a windowwrite

Photos (9 tools)

ToolDescriptionType
list_albumsList albumsread
list_photosList photos in albumread
search_photosSearch photos by keywordread
get_photo_infoPhoto metadata detailsread
list_favoritesList favorite photosread
create_albumCreate new albumwrite
add_to_albumAdd photo to albumwrite
import_photoImport photo from file (Swift/PhotoKit)write
delete_photosDelete photos by ID (Swift/PhotoKit)destructive

Messages (6 tools)

ToolDescriptionType
list_chatsRecent conversations with participantsread
read_chatChat details (participants, last update)read
search_chatsSearch by name/participant/handleread
send_messageSend iMessage/SMS textwrite
send_fileSend file via iMessage/SMSwrite
list_participantsList chat participantsread

Shortcuts (11 tools)

ToolDescriptionType
list_shortcutsList available shortcutsread
run_shortcutRun shortcut by namewrite
search_shortcutsSearch shortcuts by nameread
get_shortcut_detailShortcut details/actionsread
create_shortcutCreate a new shortcut via UI automationwrite
delete_shortcutDelete shortcut by name (macOS 13+)destructive
export_shortcutExport shortcut to .shortcut filewrite
import_shortcutImport shortcut from .shortcut filewrite
edit_shortcutOpen shortcut in Shortcuts app for editingwrite
duplicate_shortcutDuplicate an existing shortcutwrite

UI Automation (10 tools)

ToolDescriptionType
ui_open_appOpen app and read accessibility summaryread
ui_clickClick element by coordinates or textwrite
ui_typeType text into focused fieldwrite
ui_press_keySend key combinationswrite
ui_scrollScroll in directionwrite
ui_readRead app accessibility treeread
ui_accessibility_queryQuery UI elements by role/title/value/identifierread
ui_perform_actionFind element by locator + perform AX actionwrite
ui_traverseBFS traverse with PID targeting + visible filterread
ui_diffCompare UI state before/after an actionread

Apple Intelligence (13 tools)

Requires macOS 26+ with Apple Silicon.

ToolDescriptionType
summarize_textOn-device text summarizationread
rewrite_textRewrite with specified toneread
proofread_textGrammar/spelling correctionread
generate_textGenerate text with custom instructions via on-device AIread
generate_structuredGenerate structured JSON output with schemaread
tag_contentContent classification/tagging with confidenceread
ai_chatNamed multi-turn on-device AI sessionread
generate_imageGenerate an image on disk via Image Playgroundwrite
scan_documentDetect text / tables / forms in an imageread
generate_planAsk the on-device model for a JSON tool-call planread
ai_plan_metricsRun a sampled GOLDEN_PLANS batch and report planner qualityread
ai_statusCheck Foundation Model availabilityread
ai_agentOn-device autonomous tool-calling agentread

Context Memory (4 tools)

Durable on-disk store for facts, named entities, and time-anchored episodes. Backed by ~/.cache/airmcp/memory.json; also exposed as the memory://recent MCP resource.

ToolDescriptionType
memory_putInsert or update a fact / entity / episode (idempotent upsert, optional TTL)write
memory_queryFilter by kind / tags / substring, newest-firstread
memory_forgetDelete by id / key / tagdestructive
memory_statsCounts by kind + oldest/newest timestamps (sweeps expired as a side-effect)read

Audit (2 tools)

Consumable view of the on-device audit log (populated for every tool call).

ToolDescriptionType
audit_logPaginated recent calls, filterable by tool / status / time windowread
audit_summaryTotal count, error rate, top-N busiest tools over a windowread

TV (6 tools)

ToolDescriptionType
tv_list_playlistsList Apple TV playlists (library)read
tv_list_tracksList movies/episodes in playlistread
tv_now_playingCurrently playing contentread
tv_playback_controlPlay/pause/next/previous controlwrite
tv_searchSearch movies/TV showsread
tv_playPlay movie/episode by namewrite

Screen Capture (5 tools)

ToolDescriptionType
capture_screenCapture full screen screenshot (returns PNG image)read
capture_windowCapture a specific app windowread
capture_areaCapture a screen region by coordinatesread
list_windowsList all visible windows with position/sizeread
record_screenRecord screen for 1-60 seconds (.mov)write

Maps (8 tools)

ToolDescriptionType
search_locationSearch for a place in Apple Mapswrite
get_directionsGet directions between two locationswrite
drop_pinDrop a pin at specific coordinateswrite
open_addressOpen a specific address in Apple Mapswrite
search_nearbySearch for places near a locationwrite
share_locationGenerate a shareable Apple Maps linkread
geocodeConvert place name/address to coordinatesread
reverse_geocodeConvert coordinates to place name/addressread

Podcasts (6 tools)

⚠️ Deprecated on macOS 26+ — Apple removed the entire Podcasts JXA scripting dictionary in Tahoe. The module is skipped at registration on macOS 26+ (manifest brokenOn: [26]); still available on macOS ≤ 25. Scheduled for removal at v3.0.0.

ToolDescriptionType
list_podcast_showsList subscribed podcast showsread
list_podcast_episodesList episodes for a showread
podcast_now_playingCurrently playing podcast episoderead
podcast_playback_controlPlay, pause, next, previouswrite
play_podcast_episodePlay a specific episode by namewrite
search_podcast_episodesSearch episodes by keywordread

Weather (3 tools)

ToolDescriptionType
get_current_weatherGet current weather by coordinatesread
get_daily_forecastGet multi-day forecast by coordinatesread
get_hourly_forecastGet hourly forecast by coordinatesread

Location (2 tools)

ToolDescriptionType
get_current_locationGet device's current GPS coordinatesread
get_location_permissionCheck Location Services authorization statusread

Bluetooth (4 tools)

ToolDescriptionType
get_bluetooth_stateCheck Bluetooth power stateread
scan_bluetoothScan for nearby BLE devicesread
connect_bluetoothConnect to a BLE device by UUIDwrite
disconnect_bluetoothDisconnect a BLE devicewrite

Google Workspace (16 tools)

Requires: npm install -g @googleworkspace/cli && gws auth setup

ToolDescriptionType
gws_statusCheck GWS CLI availabilityread
gws_gmail_listList Gmail messages with queryread
gws_gmail_readRead Gmail message by IDread
gws_gmail_sendSend email via Gmailwrite
gws_drive_listList Google Drive filesread
gws_drive_readGet Drive file metadataread
gws_drive_searchFull-text search across Driveread
gws_sheets_readRead Google Sheet valuesread
gws_sheets_writeWrite to Google Sheetwrite
gws_calendar_listList Google Calendar eventsread
gws_calendar_createCreate Google Calendar eventwrite
gws_docs_readRead Google Doc contentread
gws_tasks_listList Google Tasksread
gws_tasks_createCreate Google Taskwrite
gws_people_searchSearch Google Contactsread
gws_rawExecute any GWS CLI commandwrite

Resources

MCP resources provide live data from Apple apps via URI.

URIDescription
notes://recent10 most recent notes
notes://recent/{count}Recent notes (custom count, max 50)
calendar://todayToday's calendar events
calendar://upcomingNext 7 days of calendar events
reminders://dueOverdue reminders
reminders://todayToday's due reminders (incomplete only)
music://now-playingCurrently playing Apple Music track
system://clipboardmacOS clipboard content
mail://unreadUnread mail count across all mailboxes
context://snapshotUnified context from all active apps
context://snapshot/{depth}Configurable depth context (brief/standard/full)

Prompts

Per-App

  • organize-notes — Classify notes by topic, create folders, move
  • find-duplicates — Find similar notes, compare, suggest cleanup
  • weekly-review — Summarize past week's notes
  • organize-reminders — Scan, identify overdue/completed, cleanup
  • daily-review — Today's due reminders with priorities
  • schedule-review — Upcoming events, conflicts, optimizations
  • meeting-prep — Event details + related notes for meeting prep

Cross-Module

  • daily-briefing — Today's events + due reminders + recent notes
  • weekly-digest — Past N days: events + notes + reminders combined
  • meeting-notes-to-reminders — Extract action items from meeting notes, create reminders
  • event-follow-up — Create follow-up note and reminders after a meeting
  • research-with-safari — Safari research + save results to Notes
  • focus-session — Calendar + Reminders + Music focus session
  • file-organizer — Finder file organization + Notes logging

Developer Workflows

  • dev-session — Scan project, check specs, research docs, create session notes
  • debug-loop — Capture errors from Safari/clipboard, locate code, log bugs, create fix tasks
  • screen-capture-flow — Screenshot → Photos import → annotation notes
  • app-release-prep — Calendar schedule + Notes changelog + Reminders checklist
  • idea-to-task — Break idea into tasks → Reminders + Calendar time blocks
  • build-log — Analyze build output, log errors or celebrate success

Shortcuts

  • shortcut-automation — Discover and chain Siri Shortcuts for automation
  • shortcut-discovery — Find relevant shortcuts for a task
  • shortcut-troubleshooting — Debug and fix broken shortcuts

Developer Agent Pipeline

AirMCP's developer prompts connect Apple apps into autonomous agent workflows. Each prompt orchestrates tools across multiple modules — AI reads the actual filesystem, Notes, Calendar, and Reminders for context, then records structured results.

┌─────────────────────────────────────────────────────────────────┐
│                     dev-session                                 │
│  Finder (scan) → Notes (specs) → Safari (docs) → Notes (log)   │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                     debug-loop                                  │
│  Safari (JS errors) → Clipboard → Finder (locate) →            │
│  Notes (bug log) → Reminders (fix tasks)                        │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                     idea-to-task                                 │
│  Notes (idea) → AI (decompose) → Reminders (tasks) →           │
│  Calendar (time blocks)                                         │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                     build-log                                   │
│  Finder (output) → Clipboard (log) →                            │
│  ┌ Fail → Notes (error log) → Reminders (fix tasks)             │
│  └ Pass → Notification → Music (celebrate) → Notes (success)    │
└─────────────────────────────────────────────────────────────────┘

Designed for AI coding agents (Claude Code, Cursor, Copilot, etc.) to invoke via MCP prompts, turning your Mac into a context-aware development environment.

Module Presets

By default, new installations start with 5 core modules (Notes, Reminders, Calendar, Shortcuts, System) to keep things simple. You can enable more anytime:

# Re-run the setup wizard to change modules
npx airmcp init

# Or enable all modules at once
npx airmcp --full

Or edit ~/.config/airmcp/config.json directly:

{
  "disabledModules": ["messages", "intelligence"]
}

CLI Commands

CommandDescription
npx airmcp initInteractive setup wizard
npx airmcp doctorDiagnose installation issues
npx airmcpStart MCP server (stdio, default)
npx airmcp --versionPrint version and exit
npx airmcp --fullStart with all 29 modules enabled
npx airmcp --httpStart as HTTP server (port 3847)

Configuration

Environment Variables

VariableDefaultDescription
AIRMCP_INCLUDE_SHAREDfalseInclude shared notes/folders
AIRMCP_ALLOW_SEND_MESSAGESfalseAllow sending iMessages (opt-in)
AIRMCP_ALLOW_SEND_MAILfalseAllow sending emails (opt-in)
AIRMCP_FULLfalseEnable all modules (ignores preset)
AIRMCP_DISABLE_{MODULE}—Disable a specific module (e.g. AIRMCP_DISABLE_MUSIC=true)
GEMINI_API_KEY—Google Gemini API key for cloud embeddings (optional)
AIRMCP_EMBEDDING_MODELgemini-embedding-2-previewGemini embedding model name
AIRMCP_EMBEDDING_DIM3072Embedding dimension (256/512/1024/2048/3072)
AIRMCP_EMBEDDING_PROVIDERautoForce provider: gemini, swift, hybrid, none
AIRMCP_HTTP_TOKEN—Bearer token for HTTP mode authentication

Config File

~/.config/airmcp/config.json:

{
  "disabledModules": ["messages", "intelligence"],
  "includeShared": false,
  "allowSendMessages": false,
  "allowSendMail": false,
  "hitl": {
    "level": "destructive-only",
    "timeout": 30
  }
}

Human-in-the-Loop (HITL)

Require manual approval before destructive operations:

{
  "hitl": {
    "level": "destructive-only",
    "timeout": 30
  }
}

Levels: off, destructive-only, all-writes, all

Semantic Search (Optional)

On-device cross-app semantic search powered by Apple's NLContextualEmbedding. Find related notes, events, reminders, and emails by meaning — not just keywords.

npm run swift-build  # Build the Swift bridge first

Then use the tools:

  1. semantic_index — Index data from enabled Apple apps into a local vector store
  2. semantic_search — Search by meaning across all indexed data
  3. find_related — Find items related to a specific note/event/reminder
  4. semantic_status — Check index status

Supports Korean, English, Japanese, Chinese with automatic language detection. Optionally set GEMINI_API_KEY for higher-quality Google Gemini embeddings.

Swift Bridge (Optional)

For semantic search, recurring events/reminders (EventKit), photo import/delete (PhotoKit), and Apple Intelligence — requires macOS 26+:

npm run swift-build

Requirements

  • macOS
  • Node.js >= 18
  • Per-app automation permissions (prompted on first run) — use setup_permissions tool to request all at once
  • Apple Intelligence: macOS 26+ with Apple Silicon

Limitations

Modules with OS requirements (e.g., Intelligence requires macOS 26+) are automatically disabled at startup on older systems via runtime OS detection.

Architecture & Security

  • JXA/AppleScript dependency — Core automation relies on Apple's scripting dictionaries. While these have been stable for 10+ years, macOS updates can theoretically break individual modules. Circuit breaker (3 failures → 60s auto-disable) isolates failures. UI Automation tools (6 tools) are inherently more brittle and separated into their own module.
  • Input sanitization — run_javascript blocks javascript: and data: URL schemes to prevent code injection. escJxaShell strips control characters from shell arguments.
  • Read data exposure — Destructive operations require HITL approval, but read operations (mail, messages, contacts) are not rate-limited. When connected to cloud LLMs, sensitive data passes through the LLM provider. Mitigations: PII scrubbing in logs, pagination limits, sensitive modules (mail, messages) require explicit opt-in.
  • IPC overhead — Multi-process path (Client → Node.js → osascript/Swift CLI → macOS app). Each JXA call adds ~50ms overhead. Pagination prevents bulk data transfers. Swift bridge path bypasses JXA for EventKit/PhotoKit operations.
  • Scope — 272 tools across 29 modules follow 5 repeating patterns (JXA CRUD, Swift bridge, HTTP API, System Events, CLI wrapper), keeping maintenance proportional to pattern count, not tool count.

Location & Bluetooth

  • Location requires macOS Location Services permission (first use triggers system dialog).
  • Bluetooth scanning discovers BLE (Low Energy) devices only. Classic Bluetooth devices are listed via list_bluetooth_devices in the System module.
  • Bluetooth connect/disconnect operates within the server process lifecycle.

Notes

  • Move copies and deletes (new ID, reset dates, lost attachments). Update replaces entire body — read first to preserve content.
  • Password-protected notes cannot be read.

Reminders / Calendar

  • JXA recurrence is read-only — use create_recurring_event/create_recurring_reminder (Swift/EventKit).
  • Calendar attendees are read-only.

Contacts

  • Custom fields not accessible.

Mail

  • Content truncated to 5000 chars by default (maxLength parameter adjustable).

Messages

  • Individual message content (chat history) not accessible via JXA.
  • Send requires recipient to be a registered buddy in Messages.

Music

  • Smart playlists are read-only.
  • Queue manipulation not available.

Finder

  • Tags use Spotlight (mdfind), performance varies with index state.

Safari

  • Reading page content requires "Allow JavaScript from Apple Events" in Safari Developer menu.
  • run_javascript rejects javascript: and data: URLs to prevent injection attacks.
  • macOS 26+: Bookmark and Reading List tools (list_bookmarks, list_reading_list, add_bookmark) use Bookmarks.plist instead of JXA (Apple removed bookmark scripting). Requires Full Disk Access for your terminal in System Settings > Privacy & Security. add_bookmark is not supported on macOS 26+.

Podcasts

  • macOS 26+: Apple removed the entire Podcasts JXA scripting dictionary in Tahoe. The module is skipped at registration time via compatibility.brokenOn: [26] in src/shared/modules.ts — tools/list won't surface any *_podcast_* tools on Tahoe hosts, so models can't pick a tool that can never succeed. Surfaced through airmcp doctor and print-compat-report. Scheduled for removal at v3.0.0; replacement under investigation (Shortcuts bridge / Media framework).

Photos

  • JXA: album creation and photo addition only, no import/delete.
  • Swift bridge (macOS 26+): full import/delete via PhotoKit.

Pages / Numbers / Keynote

  • macOS 26+: Apple renamed iWork apps (e.g. "Pages" → "Pages Creator Studio"). AirMCP uses bundle IDs internally so this is handled transparently.
  • Requires the corresponding iWork app to be open for document operations.

Apple Intelligence

  • Requires macOS 26 (Tahoe) + Apple Silicon.
  • Build bridge binary with npm run swift-build.

Roadmap

v2.1 (Current)

  • Gemini Embedding 2 — gemini-embedding-2-preview로 업그레이드. 네이티브 멀티모달(텍스트/이미지/오디오/비디오) 3072차원 임베딩. on-device Swift bridge + cloud Gemini 하이브리드 provider 지원. (WWDC26부터 Apple Foundation Models도 LanguageModel 프로토콜로 서드파티 클라우드 모델 — Anthropic·Google Swift 패키지 — 을 공식 지원, 하이브리드 구성이 플랫폼 표준 패턴이 됨)
  • Google Workspace — Gmail, Drive, Sheets, Calendar, Docs, Tasks, People via @googleworkspace/cli
  • Dynamic module loading — New modules = 1 line in MANIFEST (no import boilerplate)
  • Centralized constants — All API URLs, timeouts, buffer sizes in src/shared/constants.ts with env var overrides

v2.0

  • CoreLocation — Native GPS coordinates via Swift/CLLocationManager
  • CoreBluetooth — BLE device scanning, state, connect/disconnect via Swift/CBCentralManager
  • App Management — Launch, quit, check app status
  • Window Management — List, move, resize, minimize windows across all apps
  • Geocoding — Forward/reverse geocoding via Open-Meteo and Nominatim APIs
  • Security hardening — Sensitive modules (mail, messages) opt-in by default, architecture limitations documented

Platform Constraints (macOS 26+)

  • Safari bookmarks/reading list — Apple removed JXA bookmark scripting classes in macOS 26. The plist fallback (~/Library/Safari/Bookmarks.plist) requires Full Disk Access, which TCC blocks for MCP server processes. Investigating Shortcuts-based or WebExtension bridge approaches.
  • Safari add_bookmark — Legacy JXA make new bookmark no longer supported in macOS 26. No programmatic alternative available yet.
  • Podcasts — Apple removed the Podcasts JXA scripting dictionary entirely in macOS 26. All 6 Podcasts tools return errors. Investigating Shortcuts bridge or Media framework alternatives.

Future

  • OAuth 2.1 browser PKCE flow guide — RFC 0005 Step 3: docs for Managed Agents / Claude in Chrome clients (Steps 1+2 shipped in v2.11.0)
  • Stateless streamable HTTP — horizontal scale per MCP 2026 roadmap (session state externalized)
  • iOS / visionOS exploration (v3.0+)
  • Consolidated registry re-publishing — single self-publishing PR that re-pushes the current .well-known/mcp.json manifest + mcpName to Anthropic MCP Registry, Smithery, PulseMCP, Glama, MCP Market, Cline Marketplace, LobeHub. Past ad-hoc registrations exist on some of these but versions and metadata have drifted out of date; until the re-push lands, only the discovery endpoint itself (published on this server) reflects current state.

Contributing

See CONTRIBUTING.md for development setup, code style, and PR guidelines.

First-time contributors: look for issues labeled good first issue.

Community

  • GitHub Discussions — Questions, ideas, show & tell
  • Issues — Bug reports and feature requests
  • Changelog — Release history

License

MIT

Related Monitoring & Observability MCP Servers

View all →
Mcp Observability

io.github.infoinlet-marketplace/mcp-observability

Observability for incident agents — query Loki (LogQL), Prometheus (PromQL), Elasticsearch.
Monitor

betterdb-inc/monitor

BetterDB MCP server - Valkey observability for Claude Code and other MCP clients
1.1k
Datadog

com.mcparmory/datadog

Monitor infrastructure, manage agents and deployments, track metrics, logs, and events
25
Observability Mcp

thotischner/observability-mcp

Unified observability gateway for AI agents — Prometheus, Loki & more, with anomaly detection.
5
Datadog Mcp

io.github.tantiope/datadog-mcp

Full Datadog API access: monitors, logs, metrics, traces, dashboards, and observability tools
4
Datadog

io.github.us-all/datadog

Datadog MCP — 165 tools for metrics, monitors, logs, APM, RUM, incidents, CI/CD, fleet
1