apple-notes-search — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited apple-notes-search (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
apple-notes is an MCP server for semantic search and connection-discovery across the user's own Apple Notes — hybrid search, Swanson-ABC bridges, entity threads, and cited synthesis over everything they've written. Embeddings, search, BM25, clustering, and bridges run on-device; only synthesis generation calls an LLM (local OR cloud, the user's choice).
This skill covers (1) the one-time setup you must walk the user through, and (2) which tool to reach for, since the server exposes many.
If apple-notes tools are not available, the server isn't registered yet — do the Setup below before anything else. If tools exist but a search returns "not indexed" or empty, run index-notes first (see Ranking caveats).
The server reads Apple Notes' SQLite store directly, so the bun binary needs Full Disk Access. Steps, in order:
curl -fsSL https://bun.sh/install | bash git clone https://github.com/connerkward/mcp-apple-notes
cd mcp-apple-notes && bun installDisk Access, click +, and add ~/.bun/bin/bun (press Cmd+Shift+G in the file picker and paste the path). Without this the server cannot read NoteStore.sqlite and every call fails with a permissions error. (bun install's postinstall tries to open this pane automatically.)
claude mcp add apple-notes -- bun /absolute/path/to/mcp-apple-notes/index.ts --stdioclaude_desktop_config.json: { "mcpServers": { "apple-notes": {
"command": "/Users/<you>/.bun/bin/bun",
"args": ["/Users/<you>/mcp-apple-notes/index.ts", "--stdio"] } } }/plugin marketplace add connerkward/ckw-skills then /plugin install apple-notes@connerkward.index-notes). First index of ~1,800 notes takes a few seconds.
| Tool | Use when |
|---|---|
index-notes | First run, or to force a rebuild. Background job with live progress. |
search-notes | Default search. Hybrid semantic + BM25, re-ranked. Optional folder, modifiedAfter, modifiedBefore. "What did I write about X." |
find-notes | Exact substring match (like the Apple Notes search box). Use when the user wants a literal string, not meaning. Optional folder, date range. |
get-note | Fetch one full note by title (fuzzy fallback). |
list-notes | Notes by recency. Optional folder, date range, limit. |
list-folders | All folders + note counts. |
list-tags / search-by-tag | #hashtag inventory / notes carrying a given tag. |
related-notes | Notes related to a given one via shared tags, [[wikilinks]], and vector similarity. "Show me related notes." |
bridge-notes | Swanson-ABC bridges — non-obvious connections: pairs (A, C) not directly similar but both strongly tied to a shared intermediary B. "Find non-obvious connections across my notes." Optional folder, limit. No LLM. |
feed | Ranked evidence-first connection stream (bridges + abstraction pairs + entity threads) as JSON. Optional limit. |
entity-notes / list-entities | "Where else do I talk about Mercedes?" Entity chips → notes by mention weight. Needs the optional entity graph db (~/.mcp-apple-notes/layered_graph.db); if absent these report how to generate it. |
get-tables | Pull pipe/tab tables out of a note. |
create-note / update-note | Create or edit a note. |
check-changes | Did notes change since last index? (does not trigger re-index) |
index-health | Sync status, last-indexed time, note count. Run this if results seem stale. |
For "synthesize what I think about X" the synthesis lives in the web app endpoint (GET /api/synthesize?q= at http://localhost:3741/ when run with bun index.ts), which writes a grounded answer with inline [n] citations back to source notes.
index-notes.incremental index if notes changed — search returns immediately from the current index and catches up when the job lands. If a just-edited note is missing, it's the catch-up lag; re-run the search.
score = RRF(vector, BM25) × title_boost × recency_factor.recent, latest, today) auto-shift to a 1-day recencyhalf-life at 70% weight; normal queries keep relevance primary (90-day half-life, 10%).
Ollama (SYNTH_BASE_URL=http://localhost:1234/v1 SYNTH_MODEL=<model> OPENAI_API_KEY=local, notes stay on-device) or real OpenAI (funded OPENAI_API_KEY, defaults to gpt-4o-mini). Everything else — embeddings, search, BM25, clustering, bridges, entities — is on-device.
Fork of RafalWilinski/mcp-apple-notes; this fork reads SQLite + protobuf directly and adds bridges, entities, feed, and synthesis.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.