Skip to main content

MCP server for extracting annotations and highlights from e-readers (Kobo, Kindle, Boox)

Project description

annotation-extractor

MCP server for extracting annotations, highlights, and reading progress from e-readers.

Supports Kobo, Kindle, and Boox.

Install

pip install annotation-extractor

As an Agent Skill

Install as a reusable skill for any AI coding agent via skills.sh:

npx skills add rkaushik29/annotation-extractor-mcp

Or from source:

git clone https://github.com/rkaushik29/annotation-extractor-mcp.git
cd annotation-extractor
pip install -e .

Usage

Connect your e-reader via USB, add the MCP server to your agent, and start asking questions about your reading.

Client Setup
Claude Code claude mcp add annotations -- annotation-extractor
Claude Desktop Add to claude_desktop_config.json: {"mcpServers": {"annotations": {"command": "annotation-extractor"}}}
OpenClaw openclaw mcp add annotations -- annotation-extractor
Gemini CLI Add to ~/.gemini/settings.json: {"mcpServers": {"annotations": {"command": "annotation-extractor"}}}
Codex codex --mcp-config mcp.json with mcp.json: {"mcpServers": {"annotations": {"command": "annotation-extractor"}}}

Try it out

Once the MCP is connected and your e-reader is plugged in, try asking your agent:

"What are my highlights from the last book I read?"

"Search my annotations for anything about consciousness"

"Show me all the notes I took while reading Neuromancer"

Environment variables

If auto-detection doesn't find your device, you can point to the data source directly:

KOBO_DB_PATH=/path/to/KoboReader.sqlite annotation-extractor
KINDLE_CLIPPINGS_PATH=/path/to/My\ Clippings.txt annotation-extractor
BOOX_EXPORT_PATH=/path/to/boox-export annotation-extractor

For handwritten note extraction and rendering, these optional variables are also supported:

KINDLE_SCRIBE_PATH=/path/to/kindle-mount annotation-extractor
KINDLE_SCRIBE_CONVERTER=calibre-debug annotation-extractor
BOOX_NOTE_RENDERER=onyx_render.py annotation-extractor

Supported e-readers

Reader Data source
Kobo .kobo/KoboReader.sqlite via USB
Kindle My Clippings.txt via USB
Boox Annotation export directory (one .txt file per book) via USB

Handwritten notes are supported for:

  • Kindle Scribe notebooks via .notebooks/ (raw export, optional render via KFX Input)
  • Boox handwritten exports (.pdf / .png) and local backup .zip files (optional render)

Tools

Tool Description
list_books List all books, optionally filtered to those with annotations
get_annotations Get highlights and notes for a specific book (by title or ID)
search_annotations Full-text search across all highlights and notes
get_reading_progress Reading progress, time spent, and status for all books
get_book_details Detailed metadata for a specific book
get_handwritten_notes List handwritten note artifacts (Kindle Scribe / Boox)
export_handwritten_notes Export handwritten note artifacts to a local directory

All tools accept optional backend_name (e.g., "kobo", "kindle", "boox") and db_path parameters. When omitted, the server auto-detects connected devices.

Adding a new backend

  1. Create src/annotation_extractor/backends/yourreader.py implementing EReaderBackend
  2. Add your backend to _ALL_BACKENDS in registry.py
  3. No changes needed to server.py or models.py

Development

git clone https://github.com/rohitkaushik/annotation-extractor.git
cd annotation-extractor
pip install -e ".[dev]"
pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

annotation_extractor-0.4.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

annotation_extractor-0.4.1-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file annotation_extractor-0.4.1.tar.gz.

File metadata

  • Download URL: annotation_extractor-0.4.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for annotation_extractor-0.4.1.tar.gz
Algorithm Hash digest
SHA256 98cc45a0786d72fab879f1d98b6cbb787355c71e2c904c46479e2db265eb5958
MD5 45a89412797b1d79369fac606d7de8f8
BLAKE2b-256 acf81d50b5a8e618eeb17a49cd554e83d898fc3ba0e7384133c7c4a06734f933

See more details on using hashes here.

Provenance

The following attestation bundles were made for annotation_extractor-0.4.1.tar.gz:

Publisher: publish.yml on rkaushik29/annotation-extractor-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file annotation_extractor-0.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for annotation_extractor-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c537180ec5e7751309e137b33147fe7f15e26484c39c92221e74b5c68e4f1c3d
MD5 740f378493cc2ebc3f605ba9ebb0c3b7
BLAKE2b-256 286a4a759af2f9b9572061679e31c1d2f0903351632b2c17159956fcf69ce15c

See more details on using hashes here.

Provenance

The following attestation bundles were made for annotation_extractor-0.4.1-py3-none-any.whl:

Publisher: publish.yml on rkaushik29/annotation-extractor-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page