MCP server for extracting annotations and highlights from e-readers (Kobo, Kindle, and more)
Project description
annotation-extractor
MCP server for extracting annotations, highlights, and reading progress from e-readers.
Currently supports Kobo, with an extensible backend architecture for Kindle and others (coming soon)
Quick start
pip install annotation-extractor
# Or install from source
git clone https://github.com/rohitkaushik/annotation-extractor.git
cd annotation-extractor
pip install -e .
Usage
With Claude Code
claude mcp add annotations annotation-extractor
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"annotations": {
"command": "annotation-extractor"
}
}
}
Manual
# Auto-detect mounted e-reader
annotation-extractor
# Or point to a specific Kobo database
KOBO_DB_PATH=/path/to/KoboReader.sqlite annotation-extractor
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 |
All tools accept optional backend_name (e.g., "kobo") and db_path parameters. When omitted, the server auto-detects connected devices.
Supported e-readers
| Reader | Status | Data source |
|---|---|---|
| Kobo | Supported | .kobo/KoboReader.sqlite via USB |
| Kindle | Planned | My Clippings.txt via USB |
Adding a new backend
- Create
src/annotation_extractor/backends/yourreader.pyimplementingEReaderBackend - Add your backend to
_ALL_BACKENDSinregistry.py - No changes needed to
server.pyormodels.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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file annotation_extractor-0.1.0.tar.gz.
File metadata
- Download URL: annotation_extractor-0.1.0.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c10fb601b3a0daeade283a18a57f6d49c4a78e9c9d6c352c834da840a9458e43
|
|
| MD5 |
dab1fc9da2ee9494e89297a261c9d11f
|
|
| BLAKE2b-256 |
00506771528bde33de5be76166f825fcc4fc9fe47837e91c05000c7679da4ead
|
Provenance
The following attestation bundles were made for annotation_extractor-0.1.0.tar.gz:
Publisher:
publish.yml on rkaushik29/annotation-extractor-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
annotation_extractor-0.1.0.tar.gz -
Subject digest:
c10fb601b3a0daeade283a18a57f6d49c4a78e9c9d6c352c834da840a9458e43 - Sigstore transparency entry: 1241199368
- Sigstore integration time:
-
Permalink:
rkaushik29/annotation-extractor-mcp@5f0c4a944ce434b1974ea831e8a4290d681543bc -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rkaushik29
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5f0c4a944ce434b1974ea831e8a4290d681543bc -
Trigger Event:
release
-
Statement type:
File details
Details for the file annotation_extractor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: annotation_extractor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81061e2b5ad3aa158437e9c3f1c1f87916a11433e6a67b3458cce6b314e1bb29
|
|
| MD5 |
fb2d3351dded974f405e0c759d423a49
|
|
| BLAKE2b-256 |
7e2bf56901fb5b971a82511bb98143c7587397c412d4b6ca75188f3cafd76aeb
|
Provenance
The following attestation bundles were made for annotation_extractor-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on rkaushik29/annotation-extractor-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
annotation_extractor-0.1.0-py3-none-any.whl -
Subject digest:
81061e2b5ad3aa158437e9c3f1c1f87916a11433e6a67b3458cce6b314e1bb29 - Sigstore transparency entry: 1241199395
- Sigstore integration time:
-
Permalink:
rkaushik29/annotation-extractor-mcp@5f0c4a944ce434b1974ea831e8a4290d681543bc -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rkaushik29
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5f0c4a944ce434b1974ea831e8a4290d681543bc -
Trigger Event:
release
-
Statement type: