bookorbit-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CACHE_DIR | No | Where extracted text is cached (default ~/.cache/bookorbit-mcp) | |
| BOOKORBIT_URL | Yes | Base URL, e.g. https://bookorbit.example.com (trailing slash ok) | |
| BOOKORBIT_TOKEN | No | Static Bearer token; dev/testing only (expires ~15 min) | |
| BOOKORBIT_PASSWORD | No | Password for automatic token refresh | |
| BOOKORBIT_USERNAME | No | Username for automatic token refresh |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_booksA | Search the BookOrbit library by title, author, or series. Returns matching books with their bookId and available formats. Use this first to find the book (and confirm it has an EPUB) before reading its text. |
| get_bookA | Get full metadata for one book by bookId, including its files and formats. Use to confirm an EPUB is available and to read the description/series info. |
| list_chaptersA | List a book's chapters/sections with their sizes (character and word counts) but NO text. Parses and caches the EPUB on first call. Use this to see the book's structure and pick which chapter to read with get_chapter. EPUB only. |
| get_chapterA | Return the plain text of one chapter/section by its index (from list_chapters). Output is capped (default ~24000 chars); if the chapter is longer, use offset with the returned nextOffset to page through it. Read only what you need. |
| search_in_bookA | Keyword search inside one book's text. Returns short snippets with the chapter index, character offset, and approximate position (percent through the book). Use the returned chapter + offset with get_chapter to read the surrounding text. |
| list_annotationsA | List ALL of the user's annotations (their highlights and notes) across the whole library, newest-page first. Each item includes the highlighted text, any note, the book title/author, and the book's own chapter title/index. Paginated: use page with the returned total/pageSize to browse, or pass bookId to filter to one book. Returns a stats summary (book count, how many have notes, and where they came from). |
| list_annotated_booksA | List the books the user has annotated (highlighted / added notes to), each with an annotation count. Use this to discover which books have annotations before pulling them with get_annotations — like search_books precedes reading. |
| get_annotationsA | Return the user's own annotations (highlights and notes) for one book by bookId, ordered by the book's chapters. Each includes the highlighted text, any note, and the book's own chapterTitle/chapterIndex. NOTE: chapterIndex is BookOrbit's own chapter numbering, NOT the index used by list_chapters/get_chapter — match on chapterTitle if you want to read the surrounding text. |
| get_related_booksA | Find books related to one book by bookId: 'similar' recommendations, other books in the 'same_series' (with series index), or other books by the 'same_author'. Use to suggest what to read next or to explore a series/author. |
| suggest_metadataA | Typeahead lookup over the library's metadata facets — use it to resolve the exact spelling of a name before browsing/filtering (e.g. find the real author or series name to feed elsewhere). Pick a 'kind': authors, series, publishers, languages, narrators, or the user's own collections (each returns { name }), or genres / tags (which also return a filterable { id, name }). Matching is a case- and accent-insensitive 'contains' match on 'q', capped at ~15 results (20 for collections). 'q' is required — an empty/whitespace 'q' returns []. |
| list_seriesA | List the library's series (paginated), each with book/read counts and its authors. Use the returned series id with get_series_books to read the books in a series. |
| get_series_booksA | List the books in one series by seriesId (from list_series), in series order, paginated. Each item includes its series index and whether it has an EPUB. |
| list_authorsA | List the library's authors (paginated) with their book counts. Use the returned author id with get_author for a bio or get_author_books for their books. |
| get_authorA | Get one author by authorId (from list_authors), including their biography (description) and book count. Use get_author_books for their books. |
| get_author_booksA | List the books by one author by authorId (from list_authors), paginated. Each item includes series info and whether it has an EPUB. |
| list_collectionsA | List the user's collections (curated shelves). Use a returned collection id with get_collection_books to read the books it contains. |
| get_collection_booksA | List the books in one collection by collectionId (from list_collections), paginated. Optionally filter with q or collapse series into a single entry. |
| list_smart_scopesA | List the user's smart scopes (saved dynamic filters). Use a returned scope id with get_smart_scope_books to read the books it currently matches. |
| get_smart_scope_booksA | List the books matched by one smart scope by scopeId (from list_smart_scopes), paginated. Optionally filter with q. |
| get_reading_progressA | Get the user's reading progress for one book by bookId: per-file percentage and position (and audiobook progress when present). Use to answer 'where am I in this book'. |
| list_currently_readingA | List the books the user is currently reading, each with progress. Use to answer 'what am I reading right now'. |
| get_reading_sessionsA | Get the user's reading-session history for one book by bookId, paginated, plus aggregate stats (total sessions, total/average time, first/last session, pace). |
| get_library_statsA | Get library-wide totals: number of books, authors, series, publishers, genres, languages, total storage, the publication-year range, and books added this year. |
| get_reading_statsA | Get the user's personal reading totals: tracked, started, in-progress, and completed book counts, plus mean progress percent. |
| get_library_statisticA | Get one pre-aggregated, library-wide statistics chart (not the user's personal reading — use get_reading_statistic for that; for headline totals use get_library_stats). Pick a 'kind':
|
| get_reading_statisticA | Get one pre-aggregated chart of the signed-in user's personal reading activity (derived from reading sessions + progress; for library-wide analytics use get_library_statistic). Pick a 'kind':
|
| list_librariesA | List the libraries in the BookOrbit instance with each library's book count, total size, and per-format counts. |
| get_dashboard_widgetA | Get one pre-computed dashboard 'headline card' — the compact, at-a-glance sibling of the richer get_reading_statistic charts. Pick a 'kind':
|
| get_book_shelfA | Get a curated shelf of books (full book cards) by 'type': recently-added, continue-reading, continue-listening (audiobooks), want-to-read, up-next-in-series, random, or smart-scope. Use this to surface reading suggestions and lists no other browse tool reaches. 'smart-scope' requires a smartScopeId (from list_smart_scopes). |
| get_collectionA | Get one collection's detail (name, description, icon, book count) by collectionId. Companion to get_collection_books; use list_collections to find the id. |
| search_author_metadataA | Search external metadata providers for author-biography candidates by name. This is EXTERNAL enrichment data (bios, images, provider ids) — NOT your library's authors (use search_books / list_authors for those). Useful for 'tell me about this author'. |
| get_book_coverA | Get a book's cover image bytes (returned as an image, not text). Use size 'thumbnail' for a small image or 'full' for the full-size cover. Errors if the book has no cover. |
| get_author_imageA | Get an author's photo bytes (returned as an image, not text). Use size 'thumbnail' for a small image or 'full' for the full-size photo. Errors if the author has no image. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/joshstrange/bookorbit-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server