does-it-install?

← All servers

Apple Books

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

io.github.vgnshiyer/apple-books-mcp · Repository · version 0.8.0 · 54 stars · listed from registry

Install

The sweep installs into a clean prefix, but this is the command a user would run:

uvx apple-books-mcp

Results by platform

Linux

MCP handshake failed2026-08-16 · probed over pypi

1 recorded run, oldest first.

handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
…t call last):
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/apple_books_mcp/__init__.py", line 6, in <module>
    from server import serve
ModuleNotFoundError: No module named 'server'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/db/client.py", line 16, in find_sqlite_file
    return sorted(Path(directory).glob("*.sqlite"))[0]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/bin/apple-books-mcp", line 6, in <module>
    from apple_books_mcp import main
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/apple_books_mcp/__init__.py", line 8, in <module>
    from .server import serve
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/apple_books_mcp/server.py", line 9, in <module>
    from py_apple_books import PyAppleBooks
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/__init__.py", line 1, in <module>
    from .api import PyAppleBooks
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/api.py", line 12, in <module>
    from py_apple_books.models import Book, Collection, Annotation, AnnotationColor
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/models/__init__.py", line 1, in <module>
    from py_apple_books.models.book import Book
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/models/book.py", line 2, in <module>
    from py_apple_books.models.base import Model
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/models/base.py", line 70, in <module>
    class Model(metaclass=ModelBase):
    ...<29 lines>...
            pass
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/models/base.py", line 11, in __new__
    setattr(cls, 'manager', ModelManager(cls))
                            ~~~~~~~~~~~~^^^^^
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/models/manager.py", line 31, in __init__
    self.compiler = QueryCompiler(AppleBooksDBClient())
                                  ~~~~~~~~~~~~~~~~~~^^
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/db/client.py", line 79, in __init__
    self.cursor = self._get_cursor(paths=[self.book_lib_db, self.anno_db])
                  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/db/client.py", line 43, in _get_cursor
    conn = sqlite3.connect(_read_only_uri(self._get_sqlite_file(first_path)), uri=True)
                                          ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/db/client.py", line 35, in _get_sqlite_file
    return find_sqlite_file(path)
  File "/home/runner/.cache/uv/archive-v0/S-3N4TwegcP4oe6j/lib/python3.13/site-packages/py_apple_books/db/client.py", line 18, in find_sqlite_file
    raise DBConnectionError(
        f"No sqlite files found in {directory}. Please open Apple Books at least once."
    )
py_apple_books.db.exceptions.DBConnectionError: No sqlite files found in /home/runner/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary. Please open Apple Books at least once.

macOS

MCP handshake failed2026-08-16 · probed over pypi

1 recorded run, oldest first.

handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
…ile "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/apple_books_mcp/__init__.py", line 6, in <module>
    from server import serve
ModuleNotFoundError: No module named 'server'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/db/client.py", line 16, in find_sqlite_file
    return sorted(Path(directory).glob("*.sqlite"))[0]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/bin/apple-books-mcp", line 6, in <module>
    from apple_books_mcp import main
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/apple_books_mcp/__init__.py", line 8, in <module>
    from .server import serve
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/apple_books_mcp/server.py", line 9, in <module>
    from py_apple_books import PyAppleBooks
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/__init__.py", line 1, in <module>
    from .api import PyAppleBooks
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/api.py", line 12, in <module>
    from py_apple_books.models import Book, Collection, Annotation, AnnotationColor
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/models/__init__.py", line 1, in <module>
    from py_apple_books.models.book import Book
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/models/book.py", line 2, in <module>
    from py_apple_books.models.base import Model
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/models/base.py", line 70, in <module>
    class Model(metaclass=ModelBase):
    ...<29 lines>...
            pass
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/models/base.py", line 11, in __new__
    setattr(cls, 'manager', ModelManager(cls))
                            ~~~~~~~~~~~~^^^^^
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/models/manager.py", line 31, in __init__
    self.compiler = QueryCompiler(AppleBooksDBClient())
                                  ~~~~~~~~~~~~~~~~~~^^
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/db/client.py", line 79, in __init__
    self.cursor = self._get_cursor(paths=[self.book_lib_db, self.anno_db])
                  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/db/client.py", line 43, in _get_cursor
    conn = sqlite3.connect(_read_only_uri(self._get_sqlite_file(first_path)), uri=True)
                                          ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/db/client.py", line 35, in _get_sqlite_file
    return find_sqlite_file(path)
  File "/Users/runner/.cache/uv/archive-v0/W1wr74G1Dw4RG8Bp/lib/python3.14/site-packages/py_apple_books/db/client.py", line 18, in find_sqlite_file
    raise DBConnectionError(
        f"No sqlite files found in {directory}. Please open Apple Books at least once."
    )
py_apple_books.db.exceptions.DBConnectionError: No sqlite files found in /Users/runner/Library/Containers/com.apple.iBooksX/Data/Documents/BKLibrary. Please open Apple Books at least once.

Windows

MCP handshake failed2026-08-16 · probed over pypi

1 recorded run, oldest first.

handshake failed: MCP error -32000: Connection closed
--- stderr (tail) ---
…C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\db\client.py", line 16, in find_sqlite_file
    return sorted(Path(directory).glob("*.sqlite"))[0]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen runpy>", line 203, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Scripts\apple-books-mcp.exe\__main__.py", line 4, in <module>
    from apple_books_mcp import main
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\apple_books_mcp\__init__.py", line 8, in <module>
    from .server import serve
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\apple_books_mcp\server.py", line 9, in <module>
    from py_apple_books import PyAppleBooks
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\__init__.py", line 1, in <module>
    from .api import PyAppleBooks
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\api.py", line 12, in <module>
    from py_apple_books.models import Book, Collection, Annotation, AnnotationColor
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\models\__init__.py", line 1, in <module>
    from py_apple_books.models.book import Book
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\models\book.py", line 2, in <module>
    from py_apple_books.models.base import Model
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\models\base.py", line 70, in <module>
    class Model(metaclass=ModelBase):
    ...<29 lines>...
            pass
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\models\base.py", line 11, in __new__
    setattr(cls, 'manager', ModelManager(cls))
                            ~~~~~~~~~~~~^^^^^
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\models\manager.py", line 31, in __init__
    self.compiler = QueryCompiler(AppleBooksDBClient())
                                  ~~~~~~~~~~~~~~~~~~^^
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\db\client.py", line 79, in __init__
    self.cursor = self._get_cursor(paths=[self.book_lib_db, self.anno_db])
                  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\db\client.py", line 43, in _get_cursor
    conn = sqlite3.connect(_read_only_uri(self._get_sqlite_file(first_path)), uri=True)
                                          ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\db\client.py", line 35, in _get_sqlite_file
    return find_sqlite_file(path)
  File "C:\Users\runneradmin\AppData\Local\uv\cache\archive-v0\oGdpdKIS3BQREw-M\Lib\site-packages\py_apple_books\db\client.py", line 18, in find_sqlite_file
    raise DBConnectionError(
        f"No sqlite files found in {directory}. Please open Apple Books at least once."
    )
py_apple_books.db.exceptions.DBConnectionError: No sqlite files found in C:\Users\runneradmin\Library\Containers\com.apple.iBooksX\Data\Documents\BKLibrary. Please open Apple Books at least once.

Badge

Paste this into the project README to show the current result:

[![does it install](https://img.shields.io/endpoint?url=https://doesitinstall.com/badge/io.github.vgnshiyer__apple-books-mcp.json)](https://doesitinstall.com/s/io.github.vgnshiyer__apple-books-mcp.html)