AP

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.

Quick Install
npx -y @vgnshiyer/apple-books-mcp

Overview

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
brew install uv

# run the latest published MCP package
uvx apple-books-mcp

Install via pip (local install)

pip install apple-books-mcp

# then run the MCP server module
python -m apple_books_mcp

Configure an MCP client (example: Claude Desktop)

Using uvx (recommended):

{
  "mcpServers": {
    "apple-books-mcp": {
      "command": "uvx",
      "args": ["apple-books-mcp@latest"]
    }
  }
}

Using Python module:

{
  "mcpServers": {
    "apple-books-mcp": {
      "command": "python",
      "args": ["-m", "apple_books_mcp"]
    }
  }
}

Development / debugging

# create venv and sync (using uv tooling in repo)
uv venv
uv sync

# run with verbose output via uv (for local checkout)
uv --directory /path/to/apple-books-mcp/ run apple_books_mcp -v

# inspect with MCP inspector
npx @modelcontextprotocol/inspector uvx apple-books-mcp

Available Tools

The server exposes a set of callable tools (functions) over MCP. These provide structured access to your library:

ToolDescriptionParameters
list_collections()Return all collections (id, title, book count)None
get_collection_books(collection_id)List books in a collectioncollection_id: string
describe_collection(collection_id)Detailed info about a collectioncollection_id: string
list_all_books()List all books in the libraryNone
describe_book(book_id)Metadata for a single bookbook_id: string
get_book_annotations(book_id)All annotations for a bookbook_id: string
list_all_annotations()Stream all annotations across libraryNone
get_highlights_by_color(color)Filter highlights by color labelcolor: string
search_highlighted_text(text)Find highlights that contain texttext: string
search_notes(note)Search personal notes across booksnote: string
full_text_search(text)Search annotations and highlights for texttext: string
recent_annotations()Return the 10 most recent annotationsNone
describe_annotation(annotation_id)Details for one annotationannotation_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:

  1. Tool call: recent_annotations()
  2. 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.