Skip to main content
Glama

Book Recommendations — "What Should I Read Next?" MCP 📚🎲

CI License: MIT PyPI

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_now says 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

recommend

Book recommendations by topic/mood/"books like X", with ratings, subjects, first sentences, read-now flags

blind_date

Serendipity spin: random shelf, random depth, first-sentence hook, two-beat reveal

free_classics

Public-domain books with read-now URLs (Gutenberg, fail-soft)

skills_list / skill_read

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-recommendations

Example

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 + e2e

Live tests hit the real OpenLibrary API and self-skip offline.

License

MIT

Available Tools

5 tools
blind_dateBlind date with a bookC
Read-only

Serendipity spin: a random shelf at random depth — present the first sentence first, then the reveal

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
countNo
intentNo
excludeNo

TDQS

C2.2/5.0
Behavior3/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 classicsC
Read-onlyIdempotent

Public-domain classics from Project Gutenberg, readable in full right now

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
topicNo
intentNo

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 booksB
Read-onlyIdempotent

Book recommendations by topic, mood, or 'books like X' — millions of works, free-read flags included

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
topicYes
intentNo
excludeNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 skillA
Read-onlyIdempotent

Fetch the full content of one skill by name (from skills_list)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 skillsA
Read-onlyIdempotent

List available skills (guidance playbooks) for using this server well — read one with skill_read

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 5 tool updatesv0.1.0
    • First observedblind_date
    • First observedfree_classics
    • First observedrecommend
    • First observedskill_read
    • First observedskills_list

TDQS

B3.2/5.0
Disambiguation5/5

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.

Naming Consistency2/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to help users manage their reading experience by searching books, tracking reading progress, managing bookmarks, and generating personalized recommendations and summaries.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Connects AI assistants to the Hardcover book library, enabling natural language book searches, reading status updates, list management, and library exploration.
    31
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

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