book-recommendations
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@book-recommendationsrecommend a book like Dune, something epic and mind-bending"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Book Recommendations — "What Should I Read Next?" MCP 📚🎲
Book recommendations for AI agents: "what should I read next?" answered from millions of works — topic recommendations, blind-date serendipity spins hooked by the book's actual first sentence, and free public-domain classics you can start reading right now. Zero API keys.
Ask any agent "what should I read next?", "books like Dune", or "surprise
me with a book" — book-recommendations is the tool that answers.
Why this exists
LLMs recommend the same 50 canon books for every ask. This fishes OpenLibrary's millions of works — including a blind-date spin that picks a random subject shelf at random depth, deliberately off the bestseller lists, and hooks you with the book's actual first sentence before the reveal.
Read-now intelligence on every card:
read_nowsays when a book is freely readable at archive.org (public) or borrowable (free loan) — instant reading beats a shopping link.Free classics via Project Gutenberg (fail-soft: when the Gutenberg index is down, the error itself points at archive.org alternatives).
Honest attribution: every card says why_picked — how the book was actually chosen. Discovery you can trust.
Related MCP server: hardcover-mcp
Tools
Tool | What it does |
| Book recommendations by topic/mood/"books like X", with ratings, subjects, first sentences, read-now flags |
| Serendipity spin: random shelf, random depth, first-sentence hook, two-beat reveal |
| Public-domain books with read-now URLs (Gutenberg, fail-soft) |
| Updatable playbooks (presentation, error recovery) |
Plus the prompt: what-should-i-read-next.
Quickstart
# 1-Line Universal Installer (auto-configures Claude Desktop, Cursor, Claude Code, VS Code, ...)
curl -fsSL "https://book-recommendations.builditwithai.xyz/install" | bash
# Or run directly via your preferred runtime:
uvx book-recommendations
npx -y book-recommendationsExample
User: surprise me with a book
blind_date()
→ picks: [{
first_sentence: "The lighthouse kept its own counsel…",
subjects: ["lighthouses", "islands", "solitude"], first_published: 1962,
why_picked: "blind date: fished the “lighthouses” shelf at depth 3 — picked
for serendipity, not sales rank",
title: "…", author: "…", read_now: "borrowable at archive.org",
openlibrary_url: "https://openlibrary.org/works/…" }]Present the hook first, then the reveal — the two-beat structure is the product.
Telemetry & privacy
Anonymous usage telemetry (no PII, no queries, no paths) via the fleet
standard (schema v2, dual-endpoint fallback). Opt out any time:
BOOK_RECOMMENDATIONS_TELEMETRY=false or DO_NOT_TRACK=1.
Development
uv venv && uv pip install -e ".[dev]"
DO_NOT_TRACK=1 .venv/bin/python -m pytest tests/ -q # unit + live + e2eLive tests hit the real OpenLibrary API and self-skip offline.
License
MIT
Available Tools
5 toolsblind_dateBlind date with a bookCRead-only
Serendipity spin: a random shelf at random depth — present the first sentence first, then the reveal
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| count | No | ||
| intent | No | ||
| exclude | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=false, covering safety and unpredictability. The description adds the behavioral detail of 'present the first sentence first, then the reveal', which is a unique two-step presentation mechanic not inferable from annotations. However, it does not disclose other behaviors like whether the random selection is truly uniform, whether exclude is respected, or how seed affects results. Given annotation coverage, the additional context warrants a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, so it is concise in length. However, it is more poetic than informative, using 'serendipity' and 'shelf at random depth' without concrete grounding. It front-loads an evocative label rather than a functional statement. While it wastes no words, it also does not earn its place by conveying actionable information. Under-specification is closer to a 2 than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and 0% schema coverage, the description must carry the full burden of explaining what the tool does, what it returns, and how parameters affect results. It does none of this. The metaphor of 'shelf' and 'depth' is undefined, and the reveal mechanic is not operationalized. The description is severely inadequate for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 4 parameters (seed, count, intent, exclude) with 0% description coverage. The description entirely ignores these parameters, providing zero hints about their purpose, defaults, or allowed values. The agent has no way to know what seed controls, what intent means, or how exclude works. This is a severe gap that the description must compensate for, and it fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses metaphorical language ('Serendipity spin: a random shelf at random depth — present the first sentence first, then the reveal') to convey the concept of a blind-date-with-a-book tool. It implies a random book pick with a reveal mechanic, but does not explicitly state the core function (e.g., 'returns a random book suggestion'). It distinguishes from siblings only through the serendipity/randomness angle, which is implicit rather than explicit. Not tautological, but vague enough to score a 3.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus siblings like recommend or free_classics. The description does not mention alternatives, conditions, or exclusions. The 'serendipity' notion implies a use case, but it is left entirely to the agent to infer. No explicit 'use this when...' or 'avoid when...' is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
free_classicsFree classicsCRead-onlyIdempotent
Public-domain classics from Project Gutenberg, readable in full right now
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| topic | No | ||
| intent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds 'readable in full right now', which communicates that content is immediately accessible without paywalls or restrictions—a useful behavioral detail. However, it does not clarify response format or how results are presented, so it adds limited value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence that immediately communicates the core value proposition. It is front-loaded with the key information (public-domain, Project Gutenberg, readable in full) and contains no filler. While it could add a bit more detail without becoming verbose, its brevity is a strength.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has three optional parameters and no output schema, the description is notably incomplete. It does not mention what the tool returns (e.g., a list of titles, metadata, links), how the parameters influence results, or any edge cases like limits or error behavior. An agent has insufficient information to call this tool effectively, especially as the schema lacks parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fails to explain any of the three parameters (count, topic, intent). Since the schema provides no descriptions, the tool description is the only source of parameter meaning, but it remains silent. Agents must guess what 'count' (number of results?), 'topic' (subject filter?), and 'intent' (user's goal?) mean, which is nearly impossible without external knowledge. The description does not compensate at all for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: providing public-domain classics from Project Gutenberg, readable in full. It specifies a distinct resource and action, making the tool's function understandable. However, it does not differentiate from sibling tools like 'recommend' or 'blind_date' that might also involve books, so it doesn't fully distinguish itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the listed siblings. There is no mention of preferred contexts, alternative tool suggestions, or exclusions. The tool's optional parameters (count, topic, intent) hint at filtering, but no explicit usage conditions are stated, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommendRecommend booksBRead-onlyIdempotent
Book recommendations by topic, mood, or 'books like X' — millions of works, free-read flags included
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| topic | Yes | ||
| intent | No | ||
| exclude | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and determinism. The description adds context about the scale ('millions of works') and the presence of free-read flags, which is useful supplemental information. However, it does not disclose any other behavioral traits such as result ordering, pagination, or handling of ambiguous topics. This is a modest addition beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose ('Book recommendations') and elaborates on input modes. Every phrase adds value and there is no redundancy or fluff. Excellent structural efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, 0% schema coverage, and no output schema, the description is under-sized. It provides a high-level gist but omits critical details like parameter mapping, expected output format, handling of missing or ambiguous inputs, and any constraints or defaults (e.g., count default). An agent would need to guess parameter meanings and result structure, making the description insufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It mentions 'topic, mood, or books like X', which hints that 'topic' maps to the topic parameter, 'mood' might map to intent, and 'books like X' could involve topic and exclude, but no explicit mapping is given. The description fails to clarify the meaning of 'count', 'intent', or 'exclude' adequately, leaving the agent to infer parameter usage from the schema's bare names. This is insufficient for seamless invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('recommend') and resource ('books') and lists three input modes (topic, mood, 'books like X'). It does not explicitly distinguish itself from sibling tools like blind_date or free_classics, though the mention of 'free-read flags' hints at one differentiator. Overall purpose is clear but sibling differentiation is absent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when recommendations based on topic/mood/similarity are needed) but offers no explicit guidance on when not to use it or how it compares to alternatives. No exclusions or alternative tool mentions are provided, so the usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skill_readRead a skillARead-onlyIdempotent
Fetch the full content of one skill by name (from skills_list)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety and repeatability profile is known. The description adds minimal behavioral context beyond purpose—it says 'full content' (return size) and references the source of the name. It does not contradict annotations and adds small value without redundancy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The core action is front-loaded ('Fetch the full content of one skill'), followed by the key constraint ('by name') and the source. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple, read-only tool with one parameter and no output schema. The description tells the agent what it returns ('full content') and where the name comes from. Combined with annotations, the agent has everything needed to call it correctly. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does by specifying that the 'name' parameter is the skill name taken from skills_list. This adds meaning beyond the bare schema property, telling the agent how to obtain a valid value. It does not define format, but the source is sufficient for a single string parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch'), a resource ('full content of one skill'), and the key parameter ('by name'). It also references the source of the name ('from skills_list'), which distinguishes it from sibling tools like skills_list that list all skills. This is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: you need a skill name, and that name comes from skills_list. It does not explicitly name alternatives or when-not-to-use, but the reference to skills_list gives clear guidance on where names originate. This provides enough context without being explicit about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_listList skillsARead-onlyIdempotent
List available skills (guidance playbooks) for using this server well — read one with skill_read
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable context by clarifying that skills are 'guidance playbooks' and that they help use the server well, going beyond the minimal mutation/read indication. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that front-loads the core action ('List available skills'), explains what they are, and directs to the next step. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description fully covers purpose, usage context, and the relationship to siblings. Nothing an agent needs to correctly call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to describe. A baseline of 4 is appropriate because the schema is trivially complete and the description doesn't need to add parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('available skills'), and elaborates that skills are 'guidance playbooks' for using the server well. It also differentiates from the sibling skill_read by pointing to it for reading, so an agent can immediately tell this is the enumeration tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly indicates when to use this tool (to discover skills for using the server) and routes to the sibling skill_read for reading a specific skill. This gives clear contextual guidance for choosing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
blind_date - First observed
free_classics - First observed
recommend - First observed
skill_read - First observed
skills_list
TDQS
Each tool serves a clearly distinct purpose: recommend provides targeted recommendations, blind_date offers random serendipity, free_classics surfaces public-domain works, and skills_list/skill_read manage usage guidance. No overlap or ambiguity exists between the tools.
Tool names follow no consistent pattern: 'recommend' is a bare verb, 'blind_date' and 'free_classics' are noun phrases, while 'skills_list' is a noun-noun compound and 'skill_read' reverses the typical verb-object order. This mixed convention could cause confusion about expected behavior.
With just 5 tools, the server is tightly scoped for its domain. Each tool adds distinct value without redundancy, and the count is well within the ideal range for a focused MCP server.
The core recommendation workflows are covered: tailored recommendations, serendipitous discovery, and access to classics. However, missing operations like fetching book details or saving favorites create minor gaps, though agents can likely work around them for most use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
- LeafleOAuthnet.nanosheep
Personalised book recommendations, filtered to what's on your public library's shelf right now.
Book discovery using an AI-curated book catalog that eliminates hallucinations and surfaces lesser-known titles.
AI-curated book catalog that eliminates hallucinations and surfaces lesser-known titles.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to help users manage their reading experience by searching books, tracking reading progress, managing bookmarks, and generating personalized recommendations and summaries.-
- AlicenseAqualityAmaintenanceConnects AI assistants to the Hardcover book library, enabling natural language book searches, reading status updates, list management, and library exploration.315MIT
- FlicenseAqualityCmaintenanceConnects AI assistants to the Open Library API for searching books and authors, retrieving metadata, and comparing works.12-
- AlicenseNot gradedqualityCmaintenanceEnables natural language interaction with e-books, supporting EPUB and PDF formats. Provides APIs for metadata extraction, table of contents, and content retrieval for AI-powered reading and learning.Apache 2.0
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/surendranb/book-recommendations'
If you have feedback or need assistance with the MCP directory API, please join our Discord server