Install
$ agentstack add mcp-cardmagic-notes ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
@cardmagic/notes
CLI and MCP server to search and browse Apple Notes with fuzzy matching.
Features
- Fuzzy search - Find notes even with typos using MiniSearch
- Full-text search - Searches note titles, snippets, and body content
- Create & delete notes - Manage notes via AppleScript automation
- PDF text extraction - Automatically extracts and indexes text from PDF attachments
- Folder browsing - List and filter notes by folder
- Fast indexing - SQLite FTS5 + MiniSearch for quick searches across thousands of notes
- Dual mode - Use as CLI tool or MCP server for Claude Code integration
Installation
Homebrew
brew install cardmagic/tap/notes
npm
npm install -g @cardmagic/notes
Claude Code Plugin (recommended)
Install as a plugin to get skills (auto-invoked) and slash commands:
# Add the marketplace
claude plugin marketplace add cardmagic/ai-marketplace
# Install the plugin
claude plugin install notes@cardmagic
This gives you:
- Skill: Claude automatically searches notes when you ask about notes
- Slash commands:
/notes:search,/notes:recent,/notes:folders, and more
MCP Server
For direct MCP tool access without the plugin:
claude mcp add --transport stdio notes -- npx -y @cardmagic/notes --mcp
Or install globally first:
npm install -g @cardmagic/notes
claude mcp add --transport stdio notes -- notes --mcp
From source
git clone https://github.com/cardmagic/notes.git
cd notes
make install
# Then add as plugin OR MCP server:
claude plugin marketplace add cardmagic/ai-marketplace
claude plugin install notes@cardmagic
# OR
claude mcp add --transport stdio notes -- notes --mcp
Requirements
- macOS - Reads from Apple Notes database
- Full Disk Access - Terminal/IDE needs access to
~/Library/Group Containers/ - pdftotext (optional) - For PDF text extraction
# Install pdftotext for PDF support
brew install poppler
Granting Full Disk Access
The tool needs to read your Notes database at ~/Library/Group Containers/group.com.apple.notes/:
- Open System Settings > Privacy & Security > Full Disk Access
- Click + and add your terminal app (Terminal.app, iTerm, Warp, etc.)
- Restart your terminal
CLI Usage
Search notes
# Fuzzy search
notes search "recipe chocolate"
# Filter by folder
notes search "taxes" --folder "2024"
# Limit results
notes search "meeting" --limit 5
# Filter by date
notes search "project" --after 2024-01-01
Browse notes
# Recent notes
notes recent
notes recent --limit 10
# List all folders
notes folders
# Notes in a specific folder
notes folder "Recipes"
notes folder "Work" --limit 20
Read a note
# Get note ID from search results, then read full content
notes read 12345
Create a note
# Create a new note in the default "Notes" folder
notes create "Meeting Notes" --body "Agenda items for today..."
# Create in a specific folder
notes create "Shopping List" --body "Milk, eggs, bread" --folder "Personal"
Delete a note
# Delete a note by title
notes delete "Old Meeting Notes"
# Delete from a specific folder (useful if multiple notes have the same title)
notes delete "Draft" --folder "Work"
Manage index
# Show index statistics
notes stats
# Update index (incremental - only processes changed notes)
notes index
# Force full rebuild
notes index --force
The index uses incremental updates by default:
- Tracks modification timestamps to detect changed notes
- Only reprocesses notes modified since last index
- Detects and removes deleted notes
- Much faster than full rebuild for small changes
Claude Code Plugin
When installed as a plugin, you get:
Skill (auto-invoked): Claude automatically searches notes when you ask things like:
- "What's in my notes about recipes?"
- "Find my notes about the project"
- "Create a note about the meeting"
- "Delete my draft notes"
Slash Commands:
| Command | Description | |---------|-------------| | /notes:search | Fuzzy search with optional filters | | /notes:recent | Show recently modified notes | | /notes:folders | List all folders with note counts | | /notes:folder "Name" | List notes in a specific folder | | /notes:read | Read full note content by ID | | /notes:create | Create a new note | | /notes:delete | Delete a note by title |
MCP Server
Run as an MCP server for Claude Code integration:
notes --mcp
Available Tools
| Tool | Description | |------|-------------| | search_notes | Fuzzy search through notes | | recent_notes | Get recently modified notes | | read_note | Read full note content by ID | | list_folders | List all folders with note counts | | notes_in_folder | List notes in a specific folder | | get_note_stats | Get index statistics | | create_note | Create a new note | | delete_note | Delete a note by title |
Manual MCP Configuration
For Claude Desktop or VS Code, add to your MCP configuration:
{
"mcpServers": {
"notes": {
"command": "npx",
"args": ["-y", "@cardmagic/notes", "--mcp"]
}
}
}
PDF Text Extraction
PDF attachments in Notes are automatically extracted and indexed when:
- pdftotext is installed -
brew install poppler - PDF has been viewed - Notes caches PDFs locally when opened
The extracted text is appended to the note body, making PDF content fully searchable.
How it works
- PDFs are cached at
~/Library/Group Containers/group.com.apple.notes/Library/Caches/Paper/ - Each PDF bundle contains the file in
Assets.bundle/ - Text is extracted using
pdftotextand indexed with the parent note
Limitations
- PDFs stored only in iCloud (never opened locally) won't be indexed
- Password-protected PDFs cannot be extracted
- Scanned PDFs without OCR won't have searchable text
Data Locations
| Data | Path | |------|------| | Notes database | ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite | | PDF cache | ~/Library/Group Containers/group.com.apple.notes/Library/Caches/Paper/ | | Search index | ~/.notes/index.db | | Fuzzy index | ~/.notes/fuzzy.json | | Stats | ~/.notes/stats.json |
Development
# Clone and install
git clone https://github.com/cardmagic/notes
cd notes
pnpm install
# Build
pnpm build
# Watch mode
pnpm dev
# Link globally for testing
pnpm link --global
# Type check
pnpm typecheck
# Lint
pnpm lint
Project Structure
src/
├── index.ts # Entry point - routes to CLI or MCP
├── cli.ts # Commander-based CLI
├── mcp.ts # MCP server implementation
├── applescript.ts # AppleScript automation for create/delete
├── indexer.ts # Builds search indexes from Notes database
├── searcher.ts # Query engine with fuzzy matching
├── attachments.ts # PDF text extraction
├── formatter.ts # Terminal output formatting
└── types.ts # TypeScript types and utilities
Privacy
This tool accesses your local Notes database for reading and uses AppleScript to create/delete notes. No data is sent externally. The search index is stored locally in ~/.notes/.
License
MIT
Author
Lucas Carlson
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: cardmagic
- Source: cardmagic/notes
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.