Skip to main content
Glama
README.md
# apple-mcp

MCP server for macOS Apple apps. Provides 28 read/write tools across Notes, Reminders, Calendar, Contacts, and Safari -- all running locally on your Mac via SQLite and JXA (JavaScript for Automation).

## Install

### Claude Code

```bash
claude mcp add apple -- npx @roebot0/apple-mcp
```

### Claude Desktop

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

```json
{
  "mcpServers": {
    "apple": {
      "command": "npx",
      "args": ["@roebot0/apple-mcp"]
    }
  }
}
```

## Tools

### Notes (8 tools)

| Tool | Description |
|------|-------------|
| `apple_notes_list` | List notes with title, snippet, folder, and dates (paginated) |
| `apple_notes_search` | Search notes by keyword in title and snippet |
| `apple_notes_get` | Get full plaintext body of a note by exact title |
| `apple_notes_folders` | List all folders with note counts |
| `apple_notes_recent` | Get N most recently modified notes |
| `apple_notes_by_folder` | Get all notes in a specific folder |
| `apple_notes_create` | Create a new note in a specified folder |
| `apple_notes_stats` | Aggregate stats: total notes, per-folder counts, date range |

### Reminders (6 tools)

| Tool | Description |
|------|-------------|
| `apple_reminders_lists` | List all reminder lists with counts |
| `apple_reminders_list` | Get reminders in a specific list |
| `apple_reminders_due` | Get reminders due today, this week, or overdue |
| `apple_reminders_search` | Search reminders by keyword across all lists |
| `apple_reminders_create` | Create a new reminder with optional due date and priority |
| `apple_reminders_complete` | Mark a reminder as complete by name |

### Calendar (5 tools)

| Tool | Description |
|------|-------------|
| `apple_calendar_today` | Get today's events across all calendars |
| `apple_calendar_range` | Get events in a date range |
| `apple_calendar_calendars` | List all calendars |
| `apple_calendar_search` | Search events by title |
| `apple_calendar_upcoming` | Get next N upcoming events |

### Contacts (5 tools)

| Tool | Description |
|------|-------------|
| `apple_contacts_search` | Search contacts by name, email, or company |
| `apple_contacts_get` | Get full contact details by ID (emails, phones, etc.) |
| `apple_contacts_recent` | Get recently modified contacts |
| `apple_contacts_company` | List contacts at a specific company |
| `apple_contacts_stats` | Contact count and top companies |

### Safari (4 tools)

| Tool | Description |
|------|-------------|
| `apple_safari_history` | Get recent browsing history |
| `apple_safari_search_history` | Search history by URL or page title |
| `apple_safari_bookmarks` | List bookmarks, optionally filtered by folder |
| `apple_safari_reading_list` | Get all Reading List items |

## Requirements

- **macOS** (uses native SQLite databases and JXA automation)
- **Node.js >= 18**
- **Full Disk Access** required for Safari history -- grant it to your terminal app in System Settings > Privacy & Security > Full Disk Access
- Notes, Reminders, Calendar, and Contacts work without Full Disk Access

## How it works

- **Notes, Calendar, Contacts, Safari history**: Read directly from local SQLite databases (read-only)
- **Notes create, Reminders (all), Notes get**: Use JXA (`osascript -l JavaScript`) to interact with the native apps
- **Safari bookmarks/reading list**: Parse the Bookmarks.plist file

No network requests. No API keys. Everything stays on your Mac.

## Development

```bash
git clone https://github.com/AaronRoeF/apple-mcp.git
cd apple-mcp
npm install
npm run build
```

To test locally with Claude Code:

```bash
claude mcp add apple -- node /path/to/apple-mcp/start-mcp-server.js
```

## License

MIT

TDQS

B3.4/5.0

Scored across 28 tools

Disambiguation5/5

Each tool targets a distinct resource and action within its domain (calendar, contacts, notes, reminders, safari). For instance, calendar tools separate listing calendars, querying date ranges, searching by title, today's events, and upcoming events without overlap. Similarly, contacts have distinct tools for search, get by ID, recent, company filter, and stats.

Naming Consistency5/5

All tools follow the consistent pattern `apple_<domain>_<action>` in snake_case, e.g., `apple_calendar_calendars`, `apple_contacts_search`, `apple_notes_create`. No mixing of camelCase or other conventions, making it predictable for an agent.

Tool Count3/5

With 28 tools covering five major Apple apps, the count is on the higher end but not excessive for the broad scope. Each tool has a clear purpose, though some domains could be split into separate servers for better focus.

Completeness2/5

The tool set is heavily read-oriented with only two create tools (notes and reminders) and no update or delete capabilities. Missing CRUD operations for calendars, contacts, and safari, which limits agent ability to perform full lifecycle tasks.

Maintenance

ActivityMaintained
ResponsivenessSlow