Goodnotes Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Goodnotes Mcp (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.
An MCP (Model Context Protocol) server that reads handwritten notes from GoodNotes on macOS. It exposes your handwritten notebooks as structured data that AI assistants like Claude can read, search, and process.
GoodNotes stores all data in local SQLite databases on macOS:
This MCP server reads those databases (read-only) and exposes 6 tools:
| Tool | Description |
|---|---|
list_notebooks | List all notebooks with IDs, page counts, dates |
read_notebook | Read OCR text from a notebook (supports page ranges) |
read_page | Read OCR text from a single page |
search_notes | Full-text search across all handwritten notes |
get_unprocessed | Find new/changed pages since last processing |
mark_processed | Mark pages as processed (for pipeline workflows) |
GoodNotes OCR produces multiple word candidates. The server returns them separated by |:
Temple|Tomple|temple Voice|Voica recognitionYour AI assistant picks the best word using semantic context — much more accurate than taking the top candidate alone.
git clone https://github.com/withsivram/goodnotes-mcp.git
cd goodnotes-mcp
uv venv && uv pip install -e .Add to your Claude Code MCP settings:
{
"mcpServers": {
"goodnotes": {
"type": "stdio",
"command": "/path/to/goodnotes-mcp/.venv/bin/python",
"args": ["/path/to/goodnotes-mcp/server.py"]
}
}
}Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"goodnotes": {
"command": "/path/to/goodnotes-mcp/.venv/bin/python",
"args": ["/path/to/goodnotes-mcp/server.py"]
}
}
}| Variable | Default | Description |
|---|---|---|
GOODNOTES_DB_DIR | ~/Library/Containers/com.goodnotesapp.x/Data/Library/Databases | Path to GoodNotes SQLite databases |
GOODNOTES_TRACKING_FILE | ~/.goodnotes-mcp/processed.json | Path to processing state file |
Once configured, your AI assistant can:
get_unprocessed + mark_processed to build automated workflows (e.g., handwriting → structured Obsidian notes)The server is designed as a minimal data pipe — all intelligence (OCR resolution, categorization, structuring) happens in the AI assistant. A typical workflow:
get_unprocessed → find new pagesread_notebook → get raw OCR with word candidatesTemple|Tomple|temple → "Temple" using contextmark_processed → track what's been handlediPad (GoodNotes) → iCloud Sync → macOS SQLite DBs → MCP Server → AI AssistantThe server is intentionally minimal (~390 lines, zero external dependencies beyond mcp). All intelligence lives in the AI layer, making the server easy to maintain and extend.
MIT License — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.