Labsco
Dan8Oren logo

mcp-apple-notes

โ˜… 9

from Dan8Oren

Semantic search and RAG over Apple Notes with on-device embeddings, full CRUD, folder management, and fuzzy title matching. 10 tools. Fully local on macOS.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeQuick setup
<div align="center"> <h3> <a href="#features">Features</a> ยท <a href="#security--transparency">Security</a> ยท <a href="#installation--setup">Installation</a> ยท <a href="#available-tools">Tools</a> ยท <a href="#verify-before-you-trust">Verification</a> ยท <a href="#response-shape">Response Shape</a> </h3> </div>

MCP Apple Notes

MCP Apple Notes

mcp-apple-notes MCP server

A Model Context Protocol (MCP) server that enables semantic search and RAG (Retrieval Augmented Generation) over your Apple Notes. Works with any MCP-compatible client โ€” Claude Desktop, Cursor, Windsurf, Cline, and others.

MCP Apple Notes Demo

Features

  • ๐Ÿ” Semantic search over Apple Notes using all-MiniLM-L6-v2 on-device embeddings model
  • ๐Ÿ“ Full-text search capabilities
  • ๐Ÿ“‚ Folder support โ€” list folders, browse by folder, filter search by folder
  • ๐Ÿ“Š Vector storage using LanceDB
  • ๐Ÿค– Works with any MCP-compatible client (Claude, Cursor, Windsurf, Cline, etc.)
  • ๐ŸŽ Native Apple Notes integration via JXA
  • ๐Ÿ”’ Optional read-only mode for safe exploration
  • ๐Ÿƒโ€โ™‚๏ธ Fully local execution โ€” no API keys needed

Security & Transparency

Because this server interacts with your private Apple Notes, it is designed with absolute transparency in mind. It runs 100% locally on your Mac.

  • No Cloud, No Telemetry โ€” No API keys, no data leaving your machine.
  • Native Apple JXA โ€” Uses Apple's official JavaScript for Automation scripting bridge.
  • Embeddings on-device โ€” The all-MiniLM-L6-v2 model runs locally via @huggingface/transformers.
  • Verifiable โ€” You are highly encouraged to read every line of code (especially index.ts) before it ever touches your notes.
  • GitHub releases include SHA-256 checksums so you can verify downloaded artifacts.

Available Tools

ToolDescription
index-notesIndex all notes for semantic search. Run this first
list-foldersList all Apple Notes folders with full paths and note counts
list-notesList notes with metadata. Optional path filter, includeContent flag, and contentPreviewChars (HTML-stripped per-note preview truncated to N chars โ€” one fast call, avoids the response token cap when listing many notes' content)
search-notesSemantic + full-text search with optional path filter and limit
get-noteGet full content by noteId or title. Returns candidates on ambiguity
create-noteCreate a new note with markdown content, optionally in a folder
edit-noteEdit title and/or content (markdown) of an existing note
append-to-noteAppend markdown content to an existing note
move-noteMove a note to a different folder
delete-noteDelete a note (moves to Recently Deleted)

Verify Before You Trust

Every Apple Notes operation is a JXA call you can inspect in index.ts. No network requests, no background syncing โ€” just local scripting bridge calls.

Read-only mode

Want a safety net? Enable read-only mode to block all write operations โ€” only search, list, and read tools will be available:

{
  "mcpServers": {
    "apple-notes": {
      "command": "npx",
      "args": ["-y", "@dan8oren/mcp-apple-notes"],
      "env": { "MCP_APPLE_NOTES_READ_ONLY": "1" }
    }
  }
}

When enabled, only these tools are available: index-notes, list-folders, list-notes, search-notes, get-note.

Verbose mode

Enable verbose logging to see every JXA call before it executes (logged to stderr):

CLI flag โ€” add --verbose to your MCP client config args:

{
  "mcpServers": {
    "apple-notes": {
      "command": "npx",
      "args": ["--verbose", "-y", "@dan8oren/mcp-apple-notes"]
    }
  }
}

Environment variable โ€” for clients that support env:

{
  "mcpServers": {
    "apple-notes": {
      "command": "npx",
      "args": ["-y", "@dan8oren/mcp-apple-notes"],
      "env": { "MCP_APPLE_NOTES_VERBOSE": "1" }
    }
  }
}

JXA operations reference

OperationTypeWhat it does
getNotesReadLists all notes (id, title, folder path)
getFoldersReadLists all folders with paths and note counts
getNotesByPathReadGets notes in a specific folder
getNoteDetailsByIdReadGets full content of one note by ID
createNoteWriteCreates a new note with title and content
appendToNoteWriteAppends HTML content to an existing note
editNoteWriteUpdates title and/or content of a note
moveNoteWriteMoves a note to a different folder
deleteNoteDestructiveMoves a note to Recently Deleted

All operations go through Apple's JXA scripting bridge (Application('Notes')). No direct file system access, no network calls. The delete operation is non-permanent โ€” notes go to Recently Deleted and can be recovered within 30 days.

Response Shape

Tool responses are JSON objects in a consistent envelope:

  • Success: { "ok": true, "data": ... }
  • Error: { "ok": false, "error": { "type": "...", "message": "..." } }

Most note-oriented responses now include the stable Apple Notes id so clients can track notes safely across renames and moves.