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 pypi1 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 pypi1 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 pypi1 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:
[](https://doesitinstall.com/s/io.github.vgnshiyer__apple-books-mcp.html)