Back to Browse

Apple Books MCP Server

Developer ToolsUse Caution4.8MCP RegistryLocal
Free

Server data from the Official MCP Registry

Access your Apple Books library, annotations, reading progress, and highlights through Claude

About

Access your Apple Books library, annotations, reading progress, and highlights through Claude

Security Report

4.8
Use Caution4.8High Risk

Apple Books MCP is a well-structured, read-mostly server with appropriate permissions for its use case. The codebase demonstrates good security practices: optional write features are gated behind environment variables and guard rails (backup, schema validation, Books app check), sensitive operations are properly error-handled, and no hardcoded credentials or malicious patterns exist. Minor code quality observations (broad exception handling, input validation on a few parameters) do not meaningfully impact security. Supply chain analysis found 5 known vulnerabilities in dependencies (1 critical, 3 high severity). Package verification found 1 issue.

3 files analyzed · 10 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

File System Read

Reads files on your machine. Normal for tools that analyze or process local data.

File System Write

Writes or modifies files on your machine. Check that this is expected for the tool.

env_vars

Check that this permission is expected for this type of plugin.

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-vgnshiyer-apple-books-mcp": {
      "args": [
        "apple-books-mcp"
      ],
      "command": "uvx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

Apple Books MCP

Model Context Protocol (MCP) server for Apple Books.

Website PyPI License: Apache 2.0 Buy Me A Coffee

At a glance

  • Pick up where you left off — Claude sees the chapter you're on and its text, plus recent highlights in the book.
  • Expand on any highlight — get the surrounding paragraph explained in context, with the exact anchor you marked shown in «...».
  • Revisit a book — pull your highlights, cluster them by theme, and quote you back to yourself.
  • Reflect on your reading — patterns across books, recurring ideas in your highlights, what you're actually drawn to.

https://github.com/user-attachments/assets/77a5a29b-bfd7-4275-a4af-8d6c51a4527e

And much more!

Available Tools

Collections

ToolDescriptionParameters
list_all_collectionsList all collectionslimit?: int
get_collection_booksGet all books in a collectioncollection_id: str
describe_collectionGet details of a collectioncollection_id: str
search_collections_by_titleSearch for collections by titletitle: str

Editing collections (opt-in)

Off by default. Enable by adding --enable-writes to the server args:

"args": ["apple-books-mcp@latest", "--enable-writes"]

Apple provides no automation API for collections, so these write directly to the library database — behind guard rails: every write refuses while Books is open, takes an automatic WAL-safe backup first (~/.py_apple_books/backups/), validates the schema and aborts on drift, and only touches user-created collections (plus "Want to Read" membership). Deleting a collection never deletes the books in it.

⚠️ If iCloud sync for collections is enabled, direct edits may not propagate to other devices and can be reverted by a cloud re-sync.

ToolDescriptionParameters
create_collectionCreate a new collectiontitle: str, details?: str
rename_collectionRename a user-created collectioncollection_id: int, new_title: str
delete_collectionDelete a user-created collection (books untouched)collection_id: int
add_book_to_collectionAdd a book to a collection (idempotent)collection_id: int, book_id: int
remove_book_from_collectionRemove a book from a collection (idempotent)collection_id: int, book_id: int

Books

ToolDescriptionParameters
list_all_booksList all bookslimit?: int
describe_bookGet details of a particular book (metadata, progress, annotation count, description)book_id: str
list_annotationsGet all annotations for a book (id + text + chapter per row, chapter-ordered)book_id: int, limit?: int
search_books_by_titleSearch for books by titletitle: str
get_books_by_genreGet books by genre (substring match)genre: str, limit?: int

Reading Status

ToolDescriptionParameters
get_books_in_progressGet books currently being readlimit?: int
get_finished_booksGet books that have been finishedlimit?: int
get_unstarted_booksGet books not yet startedlimit?: int
get_recently_read_booksGet most recently opened bookslimit?: int (default: 10)

Annotations

ToolDescriptionParameters
list_all_annotationsBrowse every annotation grouped by book, newest firstlimit?: int
recent_annotationsGet most recent annotations (flat, with date + book per row)limit?: int (default: 10)
describe_annotationGet full details of a single annotationannotation_id: str
get_annotation_contextText window around a highlight (the paragraph it's in), with the highlight marked «...»annotation_id: int, chars_before?: int (default: 500), chars_after?: int (default: 500)
get_highlights_by_colorHighlights of a particular color, grouped by bookcolor: str, limit?: int
search_notesSearch user notes (shows highlight + note inline)note: str, limit?: int
search_annotationsSearch across highlights + notes + surrounding texttext: str, limit?: int
get_annotations_by_date_rangeAnnotations within a date range (flat, with date + book per row)after?: YYYY-MM-DD, before?: YYYY-MM-DD, limit?: int

Library Stats

ToolDescriptionParameters
get_library_statsGet library summary with reading statsNone

Book Content

Only works for non-DRM EPUBs (imported books, Project Gutenberg, Standard Ebooks, etc.). Apple Books Store purchases are FairPlay-protected and return a clear error. iCloud-only books return a "not downloaded" hint.

ToolDescriptionParameters
list_book_chaptersTable of contents for a book (chapter titles, order, nesting)book_id: int
get_chapter_contentPlain-text content of a chapter, with optional offset + max_chars slicingbook_id: int, chapter_id: str, offset?: int, max_chars?: int
get_current_reading_positionThe chapter the user last left off reading (via Apple Books' auto-bookmark CFI)book_id: int

Available Resources

Attachable data objects accessible from Claude Desktop's resource picker.

ResourceURIDescription
Currently Readingapple-books://currently-readingThe book you're reading right now — most recently opened in-progress book, with metadata, the chapter you left off on plus a preview of its text (for non-DRM EPUBs), and recent annotations. Attach to any conversation to focus Claude on your current read.

Available Prompts

One-click workflows, accessible from Claude Desktop's prompt picker.

PromptDescriptionArguments
weekly_digestSummarize what I've read and highlighted in the past weekdays?: int (default: 7)
library_snapshotA reflection on my whole reading lifeNone
revisit_bookRevisit your notes and highlights from a specific bookbook_title: str

Installation

Using uv (recommended)

uvx can be used to directly run apple-books-mcp (without installing it).

brew install uv  # for macos
uvx apple-books-mcp

Using pip

pip install apple-books-mcp

After installing, you can run the server using:

python -m apple_books_mcp

Using Docker

docker run -v ~/Library/Containers/com.apple.iBooksX/Data/Documents:/root/Library/Containers/com.apple.iBooksX/Data/Documents:ro ghcr.io/vgnshiyer/apple-books-mcp:latest

First-run permission prompt (macOS)

On first use, macOS will ask whether uvx (or python / docker, depending on how you launched) may "access data from other apps." Click Allow — the MCP reads Apple Books' private container at ~/Library/Containers/com.apple.iBooksX/, which macOS treats as another app's sandboxed data. Access is read-only and scoped to that container; the server starts successfully either way, but without permission every tool comes back empty.

macOS permission prompt: uvx would like to access data from other apps. Don't Allow / Allow.

Configuration

Claude Desktop Setup

Using uvx (recommended)
{
    "mcpServers": {
        "apple-books-mcp": {
            "command": "uvx",
            "args": [ "apple-books-mcp@latest" ]
        }
    }
}
Using python
{
    "mcpServers": {
        "apple-books-mcp": {
            "command": "python",
            "args": ["-m", "apple_books_mcp"]
        }
    }
}
Using Docker
{
    "mcpServers": {
        "apple-books-mcp": {
            "command": "docker",
            "args": [
                "run", "-i", "--rm",
                "-v", "~/Library/Containers/com.apple.iBooksX/Data/Documents:/root/Library/Containers/com.apple.iBooksX/Data/Documents:ro",
                "ghcr.io/vgnshiyer/apple-books-mcp:latest"
            ]
        }
    }
}

Upcoming Features

  • PDF content access (currently EPUB-only)
  • fuller annotation context via CFI → paragraph resolution

Contribution

Thank you for considering contributing to this project!

Development

If you cloned this repository, you can test it using Claude Desktop with below configuration:

Use uv venv to create a virtual environment and install the dependencies.

uv venv
uv sync
Debugging

With Claude Desktop

{
    "mcpServers": {
        "apple-books-mcp": {
            "command": "uv",
            "args": [
                "--directory",
                "/path/to/apple-books-mcp/",
                "run",
                "apple_books_mcp",
                "-v"
            ]
        }
    }
}

With inspector

npx @modelcontextprotocol/inspector uvx apple-books-mcp

Opening Issues

If you encounter a bug, have a feature request, or want to discuss something related to the project, please open an issue on the GitHub repository. When opening an issue, please provide:

Bug Reports: Describe the issue in detail. Include steps to reproduce the bug if possible, along with any error messages or screenshots.

Feature Requests: Clearly explain the new feature you'd like to see added to the project. Provide context on why this feature would be beneficial.

General Discussions: Feel free to start discussions on broader topics related to the project.

Contributing

1️⃣ Fork the GitHub repository https://github.com/vgnshiyer/apple-books-mcp
2️⃣ Create a new branch for your changes (git checkout -b feature/my-new-feature).
3️⃣ Make your changes and test them thoroughly.
4️⃣ Push your changes and open a Pull Request to main.

Please provide a clear title and description of your changes.

License

Apple Books MCP is licensed under the Apache 2.0 license. See the LICENSE file for details.

Reviews

No reviews yet

Be the first to review this server!