sansfiction-mcp
# SansFiction MCP & Agent Skill
[](https://glama.ai/mcp/servers/fgbytes/sansfiction-mcp)
Connect AI agents to [**SansFiction**](https://sansfiction.com) — a digital library for
books, collections, reading journals, and discovery.
The same capabilities are exposed two ways, both authenticated with the same bearer token:
- **MCP server** (Streamable HTTP): `https://sansfiction.com/api/mcp`
- **REST API** (v1): `https://sansfiction.com/api/v1`
## Quick start (MCP)
```bash
claude mcp add --transport http sansfiction https://sansfiction.com/api/mcp
```
Or point any MCP client at the streamable-HTTP endpoint above. Public catalog tools
need no auth; personal library tools require a bearer token (generate one at
[sansfiction.com/docs/agents](https://sansfiction.com/docs/agents)).
## Quick start (REST)
```bash
# Public catalog — no auth
curl "https://sansfiction.com/api/v1/catalog/search?q=dune&limit=5"
# Personal library — bearer token
curl -H "Authorization: Bearer $SF_TOKEN" \
"https://sansfiction.com/api/v1/library/books?status=reading"
```
## Capabilities
**Public catalog (no auth)**
- `GET /api/v1/catalog/search?q=…&searchType=all|author|series|mood|isbn`
- `GET /api/v1/catalog/books/{bookId}`
- `GET /api/v1/catalog/series/{seriesId}`
- `GET /api/v1/catalog/collections`
**Personal library (bearer token)**
- `GET/POST /api/v1/library/books` · `PATCH/DELETE /api/v1/library/books/{bookId}`
- `GET /api/v1/library/search`
- `GET /api/v1/library/collections` · `GET /api/v1/library/collections/{id}` · `POST …/items`
- `GET /api/v1/library/stats`
## Discovery
- Agent Skill: [`SKILL.md`](./SKILL.md) — also served at
`https://sansfiction.com/.well-known/agent-skills/sansfiction-catalog/SKILL.md`
- MCP Registry manifest: [`server.json`](./server.json)
- OpenAPI: `https://sansfiction.com/openapi.json`
- MCP server card: `https://sansfiction.com/.well-known/mcp/server-card.json`
## Authentication
Generate a personal access token (`sf_mcp_…`) while signed in at
[sansfiction.com/docs/agents](https://sansfiction.com/docs/agents). The same token
authenticates both the MCP server and the REST API. Rate limits: 60 req/min
anonymous, 180 req/min authenticated.
## License
The SansFiction service is proprietary. This repository documents its public agent
interface for discovery and integration.
## Run locally as an MCP server (stdio)
This repo also ships a small stdio MCP server that proxies to the hosted REST API,
so you can run it anywhere an MCP client expects a local command:
```bash
npx sansfiction-mcp
# or
npm install && node index.js
```
Environment variables:
- `SANSFICTION_TOKEN` — bearer token (`sf_mcp_…`) for the personal-library tools
(generate at https://sansfiction.com/docs/agents). Public catalog tools need none.
- `SANSFICTION_BASE_URL` — override the API base (default `https://sansfiction.com`).
Tools: `search_books`, `get_book`, `get_series`, `list_public_collections`,
`list_my_books`, `add_book_to_library`, `update_library_book`,
`remove_book_from_library`, `search_my_library`, `list_my_collections`,
`get_reading_stats`.
### Glama build configuration
- **Build steps:** `["npm install"]`
- **CMD arguments:** `["mcp-proxy","--","node","index.js"]`
`tools/list` requires no network or credentials, so the introspection check passes
without a token.
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.