sansfiction-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SANSFICTION_TOKEN | No | Bearer token (sf_mcp_...) for personal-library tools. Public catalog tools work without it. Generate at https://sansfiction.com/docs/agents | |
| SANSFICTION_BASE_URL | No | Override the API base URL. Defaults to https://sansfiction.com |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_booksA | Search the public SansFiction catalog (no auth). Returns JSON { query, searchType, count, books[] }; each book includes |
| get_bookA | Get full public metadata for a single book by catalog UUID or slug. Returns { book } (title, authors, description, editions, series, identifiers). Returns a 404 error if not found. When to use: you already have a book_id or slug and need details/editions. If you only have a title or author, call search_books first to obtain the id. |
| get_seriesA | Get a book series and its ordered volumes by series UUID. Returns { series } including the volume list with positions. Returns a 404 error if the series is unknown. When to use: to enumerate every volume in a series and their reading order. Obtain series_id from a book's |
| list_public_collectionsA | List public, curated collections (no auth). Returns { count, collections[] } with id, name, and description. Page through results with limit + offset. When to use: browse editorially curated public collections available to everyone. For the signed-in user's OWN collections, use list_my_collections instead. |
| list_my_booksA | List books on the authenticated user's shelves, most-recently-updated first. Returns { count, books[] } where each entry has status, current_page, percent, rating, and book metadata. When to use: browse or enumerate the user's library, optionally filtered by shelf. To find a specific title within the library use search_my_library; for the public catalog use search_books. Requires SANSFICTION_TOKEN (a bearer token from https://sansfiction.com/docs/agents). |
| add_book_to_libraryA | Add a catalog book to the user's library. Idempotent upsert — calling again with a different status moves the book to that shelf rather than erroring. When to use: put a catalog book (book_id from search_books) onto a shelf for the first time. To edit an existing entry's status/rating/review/progress use update_library_book; to take a book off entirely use remove_book_from_library. Requires SANSFICTION_TOKEN (a bearer token from https://sansfiction.com/docs/agents). |
| update_library_bookA | Update one or more fields of a book already in the library. Supply any subset — only the fields you pass change. Special behavior: |
| remove_book_from_libraryA | Remove a book from the user's library entirely (all shelves). Idempotent — removing a book that is not present is a no-op. When to use: permanently take a book out of the library. If you only want to change its shelf (e.g. mark 'dnf' or 'read'), use update_library_book instead — do not remove and re-add. Requires SANSFICTION_TOKEN (a bearer token from https://sansfiction.com/docs/agents). |
| search_my_libraryA | Full-text search restricted to the user's own library (matches book title and subtitle). Returns { count, books[] } with status and rating. When to use: find a specific book the user already owns. For catalog-wide discovery use search_books; to list everything on the shelves (optionally by status) use list_my_books. Requires SANSFICTION_TOKEN (a bearer token from https://sansfiction.com/docs/agents). |
| list_my_collectionsA | List the user's own collections. Returns { count, collections[] } (id, name, description, visibility). When to use: the signed-in user's OWN collections. For editorially curated public collections available to everyone, use list_public_collections instead. Requires SANSFICTION_TOKEN (a bearer token from https://sansfiction.com/docs/agents). |
| get_reading_statsA | Reading statistics for a time range, matching the app's Stats page. Choose the range in ONE of two ways: (a) |
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 11 tools
Every tool has a clear, distinct purpose. Public vs. user-specific tools are explicitly differentiated (e.g., search_books vs. search_my_library, list_public_collections vs. list_my_collections). Tool descriptions include 'When to use' guidance that clarifies boundaries, leaving no ambiguity.
All tool names follow a consistent verb_noun pattern (e.g., search_books, get_book, add_book_to_library, update_library_book). Minor inconsistency: list_public_collections vs. list_my_collections use 'public' and 'my' as differentiators, while other 'my' tools don't prefix with 'list' (e.g., search_my_library uses 'search'). Overall, the pattern is predictable and readable.
With 11 tools, the set is well-scoped for a book/library management MCP server. It covers discovery (search_books, get_book, get_series, list_public_collections) and user library management (list_my_books, search_my_library, add/update/remove book, list_my_collections, get_reading_stats). Each tool serves a necessary function without redundancy.
The tool set covers the full lifecycle: discover books, get details, add to library, update status/progress, remove, and view stats. Minor gaps exist: there is no tool to create or manage collections beyond listing (e.g., add_book_to_collection or create_collection), and no user authentication or token management tool. However, core reading workflows are well-supported.