Apple Books

Accede y gestiona tu biblioteca en Apple Books.

Documentación

Apple Books MCP

Servidor de Model Context Protocol (MCP) para Apple Books.

Website PyPI License: Apache 2.0 Buy Me A Coffee

De un vistazo

  • Retoma donde lo dejaste — Claude ve el capítulo en el que estás y su texto, además de los subrayados recientes del libro.
  • Amplía cualquier subrayado — obtén una explicación del párrafo circundante en contexto, con el ancla exacta que marcaste mostrada en «...».
  • Revisita un libro — recupera tus subrayados, agrúpalos por tema y cítate a ti mismo.
  • Reflexiona sobre tu lectura — patrones entre libros, ideas recurrentes en tus subrayados, aquello que realmente te atrae.

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

¡Y mucho más!

Herramientas disponibles

Colecciones

HerramientaDescripciónParámetros
list_all_collectionsListar todas las coleccioneslimit?: int
get_collection_booksObtener todos los libros de una coleccióncollection_id: str
describe_collectionObtener detalles de una coleccióncollection_id: str
search_collections_by_titleBuscar colecciones por títulotitle: str

Edición de colecciones (opt-in)

Desactivada por defecto. Actívala añadiendo --enable-writes a los argumentos del servidor:

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

Apple no proporciona una API de automatización para colecciones, por lo que estas escrituras van directamente a la base de datos de la biblioteca — con protecciones: cada escritura se rechaza mientras Books esté abierto, realiza primero una copia de seguridad automática compatible con WAL (~/.py_apple_books/backups/), valida el esquema y aborta si hay desviaciones, y solo toca colecciones creadas por el usuario (además de la membresía de "Quiero leer"). Eliminar una colección nunca elimina los libros que contiene.

⚠️ Si la sincronización de iCloud para colecciones está activada, las ediciones directas pueden no propagarse a otros dispositivos y pueden revertirse con una resincronización en la nube.

HerramientaDescripciónParámetros
create_collectionCrear una nueva coleccióntitle: str, details?: str
rename_collectionRenombrar una colección creada por el usuariocollection_id: int, new_title: str
delete_collectionEliminar una colección creada por el usuario (los libros no se tocan)collection_id: int
add_book_to_collectionAñadir un libro a una colección (idempotente)collection_id: int, book_id: int
remove_book_from_collectionEliminar un libro de una colección (idempotente)collection_id: int, book_id: int

Libros

HerramientaDescripciónParámetros
list_all_booksListar todos los libroslimit?: int
describe_bookObtener detalles de un libro concreto (metadatos, progreso, número de anotaciones, descripción)book_id: str
list_annotationsObtener todas las anotaciones de un libro (id + texto + capítulo por fila, ordenadas por capítulo)book_id: int, limit?: int
search_books_by_titleBuscar libros por títulotitle: str
get_books_by_genreObtener libros por género (coincidencia de subcadena)genre: str, limit?: int

Estado de lectura

HerramientaDescripciónParámetros
get_books_in_progressObtener libros que se están leyendo actualmentelimit?: int
get_finished_booksObtener libros que se han terminadolimit?: int
get_unstarted_booksObtener libros aún no comenzadoslimit?: int
get_recently_read_booksObtener los libros abiertos más recientementelimit?: int (predeterminado: 10)

Anotaciones

HerramientaDescripciónParámetros
list_all_annotationsExplorar todas las anotaciones agrupadas por libro, de más reciente a más antiguolimit?: int
recent_annotationsObtener las anotaciones más recientes (planas, con fecha + libro por fila)limit?: int (predeterminado: 10)
describe_annotationObtener detalles completos de una sola anotaciónannotation_id: str
get_annotation_contextVentana de texto alrededor de un subrayado (el párrafo en el que se encuentra), con el subrayado marcado «...»annotation_id: int, chars_before?: int (predeterminado: 500), chars_after?: int (predeterminado: 500)
get_highlights_by_colorSubrayados de un color concreto, agrupados por librocolor: str, limit?: int
search_notesBuscar notas del usuario (muestra subrayado + nota en línea)note: str, limit?: int
search_annotationsBuscar en subrayados + notas + texto circundantetext: str, limit?: int
get_annotations_by_date_rangeAnotaciones dentro de un rango de fechas (planas, con fecha + libro por fila)after?: YYYY-MM-DD, before?: YYYY-MM-DD, limit?: int

Estadísticas de la biblioteca

HerramientaDescripciónParámetros
get_library_statsObtener resumen de la biblioteca con estadísticas de lecturaNone

Contenido de libros

Solo funciona con EPUB sin DRM (libros importados, Project Gutenberg, Standard Ebooks, etc.). Las compras de Apple Books Store están protegidas por FairPlay y devuelven un error claro. Los libros solo en iCloud devuelven una pista de "no descargado".

HerramientaDescripciónParámetros
list_book_chaptersTabla de contenidos de un libro (títulos de capítulos, orden, anidamiento)book_id: int
get_chapter_contentContenido en texto plano de un capítulo, con división opcional en offset + max_charsbook_id: int, chapter_id: str, offset?: int, max_chars?: int
get_current_reading_positionEl capítulo donde el usuario dejó la lectura (mediante el marcador automático CFI de Apple Books)book_id: int

Recursos disponibles

Objetos de datos adjuntables accesibles desde el selector de recursos de Claude Desktop.

RecursoURIDescripción
Currently Readingapple-books://currently-readingEl libro que estás leyendo ahora mismo — el libro en progreso abierto más recientemente, con metadatos, el capítulo donde lo dejaste más una vista previa de su texto (para EPUB sin DRM), y anotaciones recientes. Adjúntalo a cualquier conversación para centrar a Claude en tu lectura actual.

Prompts disponibles

Flujos de trabajo de un clic, accesibles desde el selector de prompts de Claude Desktop.

PromptDescripciónArgumentos
weekly_digestResumir lo que he leído y subrayado en la última semanadays?: int (predeterminado: 7)
library_snapshotUna reflexión sobre toda mi vida de lecturaNone
revisit_bookRevisitar tus notas y subrayados de un libro concretobook_title: str

Instalación

Usando uv (recomendado)

uvx se puede usar para ejecutar directamente apple-books-mcp (sin instalarlo).

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

Usando pip

pip install apple-books-mcp

Después de instalar, puedes ejecutar el servidor usando:

python -m apple_books_mcp

Usando 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

Aviso de permiso en el primer uso (macOS)

En el primer uso, macOS preguntará si uvx (o python / docker, según cómo lo hayas lanzado) puede "acceder a datos de otras aplicaciones". Haz clic en Permitir — el MCP lee el contenedor privado de Apple Books en ~/Library/Containers/com.apple.iBooksX/, que macOS trata como datos en sandbox de otra aplicación. El acceso es de solo lectura y está limitado a ese contenedor; el servidor se inicia correctamente de cualquier manera, pero sin permiso todas las herramientas devuelven resultados vacíos.

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

Configuración

Configuración de Claude Desktop

Usando uvx (recomendado)

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

Usando python

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

Usando 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"
            ]
        }
    }
}

Próximas funciones

  • Acceso al contenido de PDF (actualmente solo EPUB)
  • contexto de anotación más completo mediante resolución de CFI → párrafo

Contribución

¡Gracias por considerar contribuir a este proyecto!

Desarrollo

Si has clonado este repositorio, puedes probarlo con Claude Desktop usando la siguiente configuración:

Usa uv venv para crear un entorno virtual e instalar las dependencias.

uv venv
uv sync

Depuración

Con Claude Desktop

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

Con inspector

npx @modelcontextprotocol/inspector uvx apple-books-mcp

Apertura de incidencias

Si encuentras un error, tienes una solicitud de función o quieres discutir algo relacionado con el proyecto, abre una incidencia en el repositorio de GitHub. Al abrir una incidencia, proporciona:

Informes de errores: Describe el problema en detalle. Incluye pasos para reproducir el error si es posible, junto con cualquier mensaje de error o capturas de pantalla.

Solicitudes de funciones: Explica claramente la nueva función que te gustaría ver añadida al proyecto. Proporciona contexto sobre por qué esta función sería beneficiosa.

Discusiones generales: Siéntete libre de iniciar discusiones sobre temas más amplios relacionados con el proyecto.

Contribuir

1️⃣ Haz un fork del repositorio de GitHub https://github.com/vgnshiyer/apple-books-mcp
2️⃣ Crea una nueva rama para tus cambios (git checkout -b feature/my-new-feature).
3️⃣ Realiza tus cambios y pruébalos a fondo.
4️⃣ Sube tus cambios y abre una Pull Request a main.

Proporciona un título y una descripción claros de tus cambios.

Licencia

Apple Books MCP está licenciado bajo la licencia Apache 2.0. Consulta el archivo LICENSE para más detalles.