Apple Books Library Manager MCP Server
Manage your Apple Books library with an MCP server, organize collections, summarize highlights and notes, and interact with your books.
npx -y @vgnshiyer/apple-books-mcpOverview
Apple Books Library Manager MCP Server exposes your local Apple Books library as a Model Context Protocol (MCP) server so LLMs and tooling that support MCP can query and interact with your books, collections, highlights and notes. It turns the information stored in Apple Books—book metadata, collections, annotations, and highlight colors—into structured tools that a model can call, enabling actions like summarizing recent highlights, searching notes across books, or recommending related titles based on reading history.
This server is intended for developers who want to integrate Apple Books content with LLM workflows, chat assistants, or productivity automations. By running the MCP server locally and configuring an MCP-capable client (for example, Claude Desktop or any other MCP consumer), you can safely surface local reading context to models without manual copying of text.
Repository: https://github.com/vgnshiyer/apple-books-mcp
Features
- Serve Apple Books library metadata (books, collections, and annotations) over MCP
- List and describe collections and books with IDs suitable for tool calls
- Retrieve annotations (highlights, notes), including filtering by color or recent annotations
- Full-text search across annotations and highlighted text
- Tools for summarizing or comparing annotations via an LLM client
- Lightweight, local-first design (no remote upload of library data)
Installation / Configuration
Recommended: run via uvx (no install required)
# macOS: install uv
# run the latest published MCP package
Install via pip (local install)
# then run the MCP server module
Configure an MCP client (example: Claude Desktop)
Using uvx (recommended):
Using Python module:
Development / debugging
# create venv and sync (using uv tooling in repo)
# run with verbose output via uv (for local checkout)
# inspect with MCP inspector
Available Tools
The server exposes a set of callable tools (functions) over MCP. These provide structured access to your library:
| Tool | Description | Parameters |
|---|---|---|
| list_collections() | Return all collections (id, title, book count) | None |
| get_collection_books(collection_id) | List books in a collection | collection_id: string |
| describe_collection(collection_id) | Detailed info about a collection | collection_id: string |
| list_all_books() | List all books in the library | None |
| describe_book(book_id) | Metadata for a single book | book_id: string |
| get_book_annotations(book_id) | All annotations for a book | book_id: string |
| list_all_annotations() | Stream all annotations across library | None |
| get_highlights_by_color(color) | Filter highlights by color label | color: string |
| search_highlighted_text(text) | Find highlights that contain text | text: string |
| search_notes(note) | Search personal notes across books | note: string |
| full_text_search(text) | Search annotations and highlights for text | text: string |
| recent_annotations() | Return the 10 most recent annotations | None |
| describe_annotation(annotation_id) | Details for one annotation | annotation_id: string |
Use these tools through any MCP-compatible client or inspector tool; responses include stable identifiers you can use in follow-up calls.
Use Cases (concrete examples)
Summarize recent highlights:
- LLM calls recent_annotations(), then produces a concise summary of the 10 latest highlights across books.
Organize a reading list by genre:
- Call list_all_books() and describe_book(book_id) to extract metadata (genre, author). Use model to propose genre-based collections and call get_collection_books() to validate.
Find notes about a topic:
- Use full_text_search(“cognitive bias”) or search_notes(“decision-making”) to surface all related highlights and notes, then ask the model to synthesize key takeaways.
Compare treatments of the same subject in multiple books:
- Identify two books via list_all_books(), fetch annotations with get_book_annotations(book_id) for both, then ask the model to compare positions or summarize contrasting viewpoints.
Color-based review workflow:
- Use get_highlights_by_color(“yellow”) to collect primary takeaways for spaced repetition or quick review.
Example prompt pattern for an MCP-enabled LLM client:
- Tool call: recent_annotations()
- Model receives structured list → Model: “Please summarize these highlights into five bullet points.”
Running & Debugging Tips
- If you run into permission issues, ensure the process has access to the local Apple Books library files.
- Use the MCP inspector (npx @modelcontextprotocol/inspector) to browse the exposed tools and test calls interactively.
- For development, run the server with verbose logging (-v) to see tool calls and responses.
Contributing & License
Contributions are welcome via GitHub: fork, branch, and open a pull request against main. For bugs or feature requests, open an issue with reproduction steps or a clear feature description.
License: Apache 2.0 — see the repository LICENSE file for details.