liseur-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | Host for HTTP listener | 127.0.0.1 |
| MCP_PATH | No | Path for HTTP listener | /mcp |
| MCP_PORT | No | Port for HTTP listener | 8000 |
| LISEUR_URL | Yes | Base URL of the instance | |
| LISEUR_TOKEN | No | Device token secret | |
| MCP_TRANSPORT | No | Transport mode: stdio or streamable-http | stdio |
| MCP_AUTH_TOKEN | No | Bearer token for HTTP transport (required when MCP_TRANSPORT=streamable-http) | |
| LISEUR_TOKEN_FILE | No | Path to file containing device token secret | |
| MCP_ALLOWED_HOSTS | No | Allowed Host headers for HTTP transport | localhost |
| MCP_AUTH_TOKEN_FILE | No | Path to file containing bearer token for HTTP transport | |
| LISEUR_TIMEOUT_SECONDS | No | Upstream request timeout in seconds | 30 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_foldersA | List the library folders this account can read. Each folder carries a folder_id to pass to list_books and search_books. |
| list_booksA | List books in one folder. order: "recent" (newest first, default) or "oldest". limit: 1-200; a value outside that range is refused, not clamped. Returns full catalog records: book_id, title, contributors, series, tags. |
| search_booksA | Search titles, descriptions, series, contributors and tags. Searches every folder when folder_id is omitted. Results are best matches per folder, not alphabetically ordered, gathered folder by folder: earlier folders can fill the limit and later folders then contribute nothing (truncated says the answer was cut). limit: 1-100 (default 20); a value outside that range is refused, not clamped. |
| get_bookA | Fetch one catalog record by book_id (same shape list_books returns). |
| reading_statsA | Reading totals, streak and pace over a span, plus per-work rows. range is "all" or a number of days from 1 to 3660 ("7d", "30d"); any other value is refused rather than silently defaulted, because the upstream summary and works endpoints would then disagree on the span. Per-work rows are ordered by time read and capped at 50; current_progression is always the latest position regardless of the span. |
| list_highlightsA | List highlights, notes and bookmarks. With book_id: the annotations of that book, in the server's document order (by progression). The first call joins the catalog book to your reading work — a per-user mapping; nothing shared changes. If the catalog match is too weak to store (confidence "low"), nothing is returned and the answer says so; annotations may still exist under the returned work_id, which the note points out. Without book_id: every live annotation on the account, most recently changed first (by the server's internal sequence), each carrying its work_id. Both branches return at most limit annotations (1-500, cap 500); a limit below 1 and an offset below 0 are refused. count, total and truncated are reported; total is the size of the whole set and does not depend on limit or offset, while truncated says more annotations remain beyond this page. Paging: pass the next_offset of a previous page as offset to read on; next_offset is present only when more annotations remain, and every response echoes the offset its page started at. The list is fetched fresh on every call, so if annotations change between pages an item can shift — pass back the next_offset you were given rather than computing your own. |
| get_book_textA | Read the text of a book, one chapter at a time. Without chapter: returns the table of contents (index, title, chars). With chapter: that chapter's text, cut to max_chars from offset; next_offset continues when the chapter is longer. The EPUB is downloaded from the server and parsed on each call; a download larger than the 128 MiB cap is refused. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool has a clear, distinct purpose: searching catalog, fetching a specific book, listing books by folder, reading text, listing folders, reading stats, and listing highlights. No two tools could be confused for the same action.
Names follow a consistent snake_case verb_noun pattern (search_books, get_book, list_books, list_folders, get_book_text, list_highlights). The only slight deviation is reading_stats, which uses a gerund instead of a verb, but it remains clear and stylistically aligned.
With 7 tools, the server is well-scoped for a read-focused book application: catalog browsing, searching, text retrieval, stats, and annotations. Each tool earns its place without bloat or thinness.
The surface covers the core read-only workflows: searching, listing, reading text, and viewing stats/highlights. It lacks write operations (e.g., creating highlights or updating progress), but the server appears intentionally read-only; minor gaps like per-book progress detail are workable.