Skip to main content
Glama
fahadimmad786-stack

goodreads-mcp

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GOODREADS_TELEMETRYNoSet to '0' to disable telemetry entirely.1
GOODREADS_TRANSPORTNoTransport mode: 'stdio' (default) or 'http'.stdio
GOODREADS_BQ_DATASETNoOverride for the BigQuery dataset name.
GOODREADS_BQ_PROJECTNoOverride for the Google Cloud project containing the BigQuery dataset.
GOODREADS_BQ_LOCATIONNoOverride for the BigQuery location.
GOODREADS_TELEMETRY_PATHNoFile path where telemetry JSONL entries are written.
GOODREADS_MAX_BYTES_BILLEDNoMaximum bytes billed for each BigQuery job. Default is 20 GiB.20 GiB

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

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
dataset_overviewA

Shape, coverage and known defects of the Goodreads dataset.

Call this before answering anything substantive. It reports live row and population counts for every column that has a coverage problem, and returns the full caveat list, including three defects measured from the loaded tables that the project's own DATA_NOTES.md does not mention.

rating_distributionA

How book ratings are distributed: a histogram of per-book mean ratings, plus the pooled share of 1-5 star ratings across every rating in scope.

Answers "are ratings clustered high?", "what does a typical rating look like?", "how unusual is a 4.5?".

top_books_by_ratingA

Highest- or lowest-rated books, subject to a minimum-ratings threshold.

The threshold is the whole point: raise it for a result about well-known books, lower it to reach the long tail. Ties break toward the more heavily rated book.

Under the default unit="editions" a work with several editions can take several places in the list -- all with the same rating, since editions of one work largely share a rating pool. Pass unit="works" for a list of distinct works.

stats_by_languageA

Rating statistics grouped by language.

Grouped on language_normalised, never the raw language column. Read the coverage caveat before quoting anything from this: only 13.6% of books carry a language label, and 83% of those are English.

stats_by_yearA

Rating statistics and publication volume per publication year.

publish_year is the only reliable temporal field in this dataset -- use this rather than publish_month for any real time series. Always ordered chronologically.

stats_by_publisherA

Rating statistics grouped by publisher string.

publisher is unnormalised free text with 79,423 distinct values, so each row is one spelling rather than one publisher. Penguin alone occupies six or more separate rows. Treat every figure here as a lower bound on that imprint's real output.

stats_by_authorA

Rating statistics grouped by author string.

authors is one free-text field per book, not a list, so a co-authored book forms its own group rather than counting toward each author. There are 675,289 distinct author strings.

page_count_statsA

Book length against rating: page-count quartiles overall, and rating statistics for each band of book length.

Answers "do longer books rate higher?". Books with a NULL pages_number are excluded and counted separately -- 11,216 implausible values were nulled during cleaning.

publish_month_seasonalityA

Coarse publishing seasonality by month, plus per-month rating averages.

January is inflated -- it holds 17.72% of rows against a uniform 8.3% because unknown dates were recorded as January 1. The January row is flagged in the output. Prefer stats_by_year for real time-series work.

user_ratings_overviewA

Shape of the user_ratings table: how the 1-5 stars are distributed, and how active the users are.

This describes 4,154 users only. It is a separate dataset from books, not a sample of it, and does not generalise to Goodreads.

top_titles_by_user_ratingsA

Best- or worst-liked titles among the 4,154 users in user_ratings.

Stays entirely inside user_ratings -- no join, so no title-matching loss. These are the opinions of a small user panel, not the books table.

compare_user_vs_book_ratingsA

Where the 4,154-user panel disagrees with the wider Goodreads rating.

This is the only tool that crosses the two tables, and the join is on normalised title text because user_ratings carries no book ID. It reaches 52,016 of 98,686 rated titles (52.7%) -- roughly half the panel's ratings have no book row to match and are simply absent. Editions of the same title are pooled, so book rating counts are summed across up to 36 rows.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/fahadimmad786-stack/goodreads-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server