Apple Notes MCP Server
README.md
# Apple Notes MCP Server
An MCP (Model Context Protocol) server that lets AI assistants like Claude read, create, search, update, and delete your Apple Notes all through natural conversation.
Built with [JXA](https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/) (JavaScript for Automation) to communicate with the Notes app directly.
## Requirements
- macOS (Apple Notes is macOS-only)
- Node.js 18+
- An MCP-compatible client (e.g., [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Claude Desktop](https://claude.ai/download))
## Setup
### 1. Clone and build
```bash
git clone https://github.com/RodriguesJohn/applenotesmcp.git
cd applenotesmcp
npm install
npm run build
```
### 2. Configure your MCP client
#### Claude Code
Add to your `~/.mcp.json`:
```json
{
"mcpServers": {
"apple-notes": {
"command": "node",
"args": ["/path/to/applenotesmcp/dist/index.js"]
}
}
}
```
Then restart Claude Code.
#### Claude Desktop
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"apple-notes": {
"command": "node",
"args": ["/path/to/applenotesmcp/dist/index.js"]
}
}
}
```
Then restart Claude Desktop.
> **Note:** Replace `/path/to/applenotesmcp` with the actual path where you cloned the repo.
### 3. Grant permissions
The first time a tool runs, macOS will prompt you to allow your terminal (or Claude Desktop) to control the Notes app. Click **OK** to grant access.
## Available Tools
| Tool | Description |
|------|-------------|
| `list_folders` | List all folders across all accounts |
| `list_notes` | List notes, optionally filtered by folder (default limit: 50) |
| `get_note` | Get full content of a note by title |
| `get_note_by_id` | Get full content of a note by its unique ID |
| `search_notes` | Search notes by keyword in title or body (max 25 results) |
| `create_note` | Create a new note with a title and body (HTML supported) |
| `update_note` | Update the body content of an existing note |
| `delete_note` | Delete a note by title (moves to Recently Deleted) |
## Usage Examples
Once connected, just ask Claude naturally:
- "List all my notes folders"
- "Show me my recent notes"
- "Find notes about project ideas"
- "Create a note called 'Meeting Notes' with today's action items"
- "Update my grocery list note"
## License
ISC
Learn building with AI from here - https://www.theaidesignacademy.com/
TDQS
A3.5/5.0
Scored across 8 tools
Disambiguation4/5
Most tools have clear distinct purposes, but get_note and get_note_by_id are both for reading a note by different identifiers, which could cause confusion if an agent doesn't know which to use.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_note, list_folders, search_notes), with no deviations.
Tool Count5/5
With 8 tools, the server covers essential note operations (CRUD, listing, searching) without being excessive or too sparse for the domain.
Completeness3/5
Basic note CRUD is present, but missing operations like creating/deleting folders and updating a note's title, which leaves notable gaps for full lifecycle management.
Maintenance
ActivityInactive
ResponsivenessNo issues