siftivo
Search books, authors and series, get recommendations, and manage your own reading shelves.
Should I use this
Quality & Safety
Findings (2)
- LOWin get_book
- LOWin get_author
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"siftivo": {
"url": "https://api.siftivo.com/mcp"
}
}
}Remote endpoints
https://api.siftivo.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (12)
🟢search_books(query, limit, isFiction)
Keyword search over the Siftivo book catalog. Matches titles, authors, and descriptions. Returns works with the ids other Siftivo tools accept.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Words to search for"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10
},
"isFiction": {
"type": "boolean",
"description": "Restrict to fiction (true) or nonfiction (false)"
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_book(id)
Full detail for one book: synopsis, authors, series position, genres, and its page on siftivo.com. Accepts a work id, an edition id, or a slug.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "A Siftivo work id, edition id, or URL slug"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢what_to_read_next(workId)
Given one book, what to read after it: the next books in its series, more by the same author, and books that read like it. This is the same set the book page on siftivo.com shows.
Input Schema
{
"type": "object",
"properties": {
"workId": {
"type": "string",
"minLength": 1,
"description": "A workId from search_books, get_book, or a URL slug"
}
},
"required": [
"workId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_author(id)
An author, their biography, and the works Siftivo holds for them. Accepts an author id or slug.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_series(id)
A series and its works in reading order. Accepts a series id or slug.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_reading_index(week)
The weekly Siftivo Reading Index: the fiction and nonfiction books moving most in cultural circulation this week, ranked.
Input Schema
{
"type": "object",
"properties": {
"week": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Edition week, YYYY-MM-DD. Omit for the current edition."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢recommend_from_description(description, limit, isFiction)
Describe what someone is in the mood for, in their own words, and get books that match. It suits a theme, subject or feeling ("books about grief", "cozy mysteries set in Cornwall"), and matches on meaning rather than on a title or an author name.
Input Schema
{
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "What the reader is after, in plain language"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 5
},
"isFiction": {
"type": "boolean"
}
},
"required": [
"description"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢recommend_from_titles(titles, limit, isFiction)
Give Siftivo a few books someone liked, by title, and get books like them. Titles are resolved against the catalog first; anything that does not resolve is reported back rather than guessed at.
Input Schema
{
"type": "object",
"properties": {
"titles": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"maxItems": 10,
"description": "Book titles, optionally \"Title by Author\""
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 5
},
"isFiction": {
"type": "boolean"
}
},
"required": [
"titles"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_library(status)
The signed-in reader's own Siftivo library: what they want to read, are reading, finished, or set down, with their ratings.
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"NOT_STARTED",
"READING",
"FINISHED",
"DNF"
],
"description": "Filter to one shelf. Omit for the whole library."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴add_to_library(workId, readingStatus, rating, progress, notes)
Put a book on one of the signed-in reader's shelves, move it to a different shelf, rate it, or record how far through it they are. The workId is one returned by search_books, get_book or recommend_from_titles. "Finished it, four and a half stars" is one call with readingStatus FINISHED and rating 4.5. Each field given replaces what the reader had there before, so send a rating or a note only when they asked for that one to change. Omitting readingStatus leaves the book on the shelf it is already on.
Input Schema
{
"type": "object",
"properties": {
"workId": {
"type": "string",
"minLength": 1
},
"readingStatus": {
"type": "string",
"enum": [
"NOT_STARTED",
"READING",
"FINISHED",
"DNF"
],
"description": "The shelf to put the book on. Omit to leave it where it is, or NOT_STARTED for a book the reader has not opened yet."
},
"rating": {
"type": "number",
"minimum": 0.5,
"maximum": 5,
"multipleOf": 0.5,
"description": "Stars, 0.5 to 5 in half-star steps"
},
"progress": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Percent read, 0 to 100"
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "The reader's own note on the book, private to them"
}
},
"required": [
"workId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_my_book(workId)
Whether the signed-in reader has this book on a shelf, and if so which shelf, their rating and how far through they are. Answers "have I read this?" without pulling the whole library.
Input Schema
{
"type": "object",
"properties": {
"workId": {
"type": "string",
"minLength": 1
}
},
"required": [
"workId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴remove_from_library(workId)
Take a book off the signed-in reader's shelves entirely, discarding its shelf, progress and notes. The reader's rating for the book stays. This is removal rather than a shelf change: add_to_library with a new readingStatus moves a book between shelves instead.
Input Schema
{
"type": "object",
"properties": {
"workId": {
"type": "string",
"minLength": 1
}
},
"required": [
"workId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence