Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

ReadingRate

REMOTE · MCP.READINGRATE.COM

Book difficulty, reading times and ranked lists, plus your reading log, quotes and clubs.

64 Trust /100

Last scanned (1 hour ago)

Scores higher than 45% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability79
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 11230 tokens (~229/item across 49 items; 45 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management10
  • Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 47 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities47
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
  • Supports UI / widget rendering.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Nov 26 0
    • Stability: unverified → 0.03 ▲ functional
    • New tool “list_quote_links” functional
    • New tool “save_quote_link” functional
    • New tool “suggest_quote_link” functional
  • 2 Nov 26 63

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://mcp.readingrate.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=readingrate.com CN=WE1,O=Google Trust Services,C=US 19 Sept 2026 18 Dec 2026 ECDSA 256 ECDSA-SHA256 1b5ff0426d3306f31333b8213b855932
SANs: readingrate.com, *.readingrate.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.readingrate.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
readingrate.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
content-security-policy default-src 'none'; frame-ancestors 'none'

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.readingrate.com/mcp Verified 200
http (plaintext) http://mcp.readingrate.com/mcp HTTPS enforced 301 https://mcp.readingrate.com/mcp
MCP tools · 45 exposed · ~10,319 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_book_to_library ~431

Adds one book to the reader's ReadingRate library. It goes on the want-to-read list unless a status is given: "reading" for a book they are reading now, "read" for one they have finished (with an optional rating and finish date), or "stopped". Use when the user asks to add a book to their library or reading list, or says they are reading or have finished a book that is not in their library yet. Identify the book with exactly one of book_id, isbn or title_author. A book already in the library is left where it is, and the result says which shelf it is on; to move it, use update_book_status. A book added as read also goes on the reader's ReadingRate activity feed; other readers see that they finished it while the reader's profile is public and shows finished books (new accounts start private, and finished books start hidden). A book given by title and author that is not in the ReadingRate catalog is looked up in Google Books and added to the catalog, which is public, and ReadingRate then analyzes it; so add a book named by title only once the reader has confirmed the title. Examples: - {"title_author": {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald"}} - {"isbn": "9780140449136", "status": "read", "rating": 5} - {"book_id": "<book id>", "status": "reading"}

NameTypeReqDescription
book_idstring–The book's ReadingRate id, from another ReadingRate tool's results
date_finishedstring–Finish date, YYYY-MM-DD, for a book added as read (default: today)
isbnstring–ISBN-10 or ISBN-13
ratingnumber–Rating from 1 to 5, for a book added as read
statusstring–The shelf to put the book on instead of want-to-read
title_authorobject–The book's title and author. Close spellings match.
NameTypeReqDescription
bookobject–The book
date_finishedstring–Finish date, when the book went in as read
date_startedstring–Start date, when the book went in as reading
existing_statusstring–The shelf the book was already on, when it was already in the library
is_new_catalog_entryboolean–True when the book was not in the catalog and was added to it
messagestringyesHuman-readable result
new_statusstring–The shelf the book went on, when a status was given
ratingnumber–The rating recorded, when the book went in as read
reading_time_estimatestring–Estimated reading time at an average pace
status_change_failedboolean–The book was added but the status asked for did not take
successbooleanyesTrue when the book was added; false when it was already in the library
tbr_countnumber–Want-to-read list size after adding

No examples provided.

add_matched_books_to_library ~238

Adds up to 40 books to the reader's ReadingRate library in one call, by ReadingRate book id, all on the same shelf (want-to-read unless a status is given). Books already in the library are left where they are and listed. Use after lookup_books_batch has matched a photographed shelf or a list, and the reader has said which of the matched books to add. Books added as read also go on the reader's ReadingRate activity feed; other readers see that they finished them while the reader's profile is public and shows finished books (new accounts start private, and finished books start hidden). It takes ids only, so it never adds a book to the catalog; a book lookup_books_batch could not match is added with add_book_to_library once the reader confirms its title. Example: {"book_ids": ["<book id>", "<book id>"], "status": "read"}

NameTypeReqDescription
book_idsarrayyesReadingRate book ids, as lookup_books_batch returns them (max 40)
statusstring–The shelf to put every newly added book on instead of want-to-read
NameTypeReqDescription
addedarray–Books added, with id and title, plus reason when a book went in but its status did not
already_therearray–Books already in the library, with id, title and the shelf they are on; they were not changed
failedarray–Books that could not be added, with id and reason
messagestringyesHuman-readable result
successbooleanyesTrue unless no book could be added

No examples provided.

annotate_poem_line ~149

Writes the reader's note on one line of a poem to their ReadingRate notes: a reading, a connection, a reaction. The line is not saved as a quote. Use when the reader wants to record a thought about a specific line of a poem. To save the line itself as a quote, use save_poem_line. Each call adds a new note. Example: {"anchor": "wyatt/whoso-list-to-hunt/13", "note": "The hunt as courtship, and its exhaustion."}

NameTypeReqDescription
anchorstringyesThe line's anchor as get_poem or search_poems returns it
notestringyesThe reader's note
NameTypeReqDescription
anchorstringyes–
created_atstring–ISO 8601
idstring–The saved note
linestring–The line the note is attached to
notestringyes–
poet–––
successbooleanyes–
titlestring––

No examples provided.

compare_books ~221

Sets two or three books side by side and shows them as a comparison grid. Aspects: "difficulty" (overall and per-dimension scores, and each book's hardest and easiest dimensions), "themes" (shared and distinct), "length" (word count and reading time), "style" (primary genre and literary regard) and "awards". Use when the user asks to compare specific books, which of them is harder or longer, or which to read first. For a single book, use get_book_details. To find books, use search_books. Default aspects: difficulty, themes, length. Examples: - {"book_ids": ["crime-and-punishment", "the-brothers-karamazov"]} - {"book_ids": ["1984", "brave-new-world", "fahrenheit-451"], "aspects": ["themes", "difficulty"]}

NameTypeReqDescription
aspectsarray–What to compare (default: difficulty, themes, length)
book_idsarrayyesTwo or three ReadingRate book ids or slugs
NameTypeReqDescription
booksarrayyes–
summary–––

No examples provided.

delete_reading_insight ~133

Permanently deletes one reading insight the reader saved in ReadingRate, with the conversation record attached to it. It cannot be undone. A copy the reader's Notion already received stays in their Notion, and the result says so. Use when the reader asks to delete or forget an insight they saved. Find its id with get_reading_notes, and confirm with the reader which insight they mean before deleting. Example: {"insight_id": "<insight id>"}

NameTypeReqDescription
insight_idstringyesThe saved insight's id, as get_reading_notes or save_reading_insight returned it
NameTypeReqDescription
conversation_deletedboolean–True when a conversation record attached to the insight was deleted too
deletedbooleanyesTrue when the insight was deleted
insight_idstringyes–
notestring––
summarystring–The summary that was deleted

No examples provided.

find_related_passages ~242

Finds the quotes and notes in the reader's ReadingRate collection that are closest in meaning to one of their saved quotes or notes, across all their books, with each passage's book, author, page and a similarity score from 0 to 1. Use when the reader asks what else they have saved that connects to a particular quote or note, or for related passages in their collection. Get the id from list_saved_quotes (a quote) or get_reading_notes (a note). Examples: - {"id": "<quote id>", "type": "quote"} - {"id": "<note id>", "limit": 10, "threshold": 0.35}

NameTypeReqDescription
idstringyesThe id of the quote or note to start from
limitnumber–Maximum number of related passages (default 5, max 20)
thresholdnumber–Lowest similarity to include, 0 to 1 (default 0.42)
typestring–What the id is: "quote" for a saved quote, "marginalia" for a note (default "marginalia")
NameTypeReqDescription
connectionsarray–The reader's own quotes and notes closest in meaning, closest first
connections_countnumber–Number of related passages found
messagestring–Human-readable note when the entry cannot be compared yet
source_idstring–Id of the quote or note searched from
source_typestring–quote or marginalia (a note)

No examples provided.

get_award_winners ~498

Lists the winners, shortlists and longlists of the literary prizes ReadingRate tracks, grouped by year, newest first. The prizes include the Booker Prize, the International Booker Prize, the Pulitzer Prize for Fiction, the National Book Award, the Nobel Prize in Literature, the Women's Prize for Fiction, and the Hugo and Nebula awards. It also holds canonical lists, such as the Modern Library 100, and the set texts of national school curricula and exam boards. Each book links to its ReadingRate analysis. Use when the user asks who won or was shortlisted for a literary prize, for prize-winning books from a range of years, or which books a list or a school syllabus names. It holds results only, not news about a prize or the organization behind it. source_type picks the kind of source: "award" for prizes, "list" for canonical lists and publisher series, "curriculum" for school curricula and exam boards. Without it, prizes and lists come back and curricula do not. Each book's award_type and award_kind say which kind of source it came from. A curriculum sets a book for study; it is not a prize the book won. Examples: - {"award": "Booker Prize", "category": "winner", "limit": 10} - {"award": "Pulitzer", "year_min": 2020, "year_max": 2024} - {"year_min": 2023, "year_max": 2023, "category": "winner"} - {"award": "AQA", "source_type": "curriculum"}

NameTypeReqDescription
awardstring–Prize, list or syllabus name, or part of it, e.g. "Booker Prize", "Pulitzer", "Nobel", "Hugo", "AQA". When one source's name matches exactly, only that source is returned.
categorystring–Only winners, only the shortlist, or only the longlist
limitnumber–Maximum number of books (default 20, max 50)
source_typestring–Only prizes ("award"), only canonical lists and publisher series ("list"), or only school curricula and exam boards ("curriculum"). Leave it out for prizes and lists together, without curricula.
year_maxnumber–Latest prize year to include
year_minnumber–Earliest prize year to include
NameTypeReqDescription
awardsarrayyesAward results grouped by year, most recent first
filters_appliedobjectyesEcho of the filters used (award, year_min, year_max, category, source_type); only set filters appear
total_countnumberyesTotal number of recognitions returned
truncatedbooleanyesTrue when more matching recognitions exist than were returned; narrow the year range or raise the limit to see more

No examples provided.

get_book_club ~104

Describes one of the reader's ReadingRate book clubs: its description, how many members it has and their usernames and roles, and its five most recent books. Use when the reader asks about a particular club of theirs: who is in it, or what it has read. Get club_id from list_book_clubs. Example: {"club_id": "<club id>"}

NameTypeReqDescription
club_idstringyesThe club's id, from list_book_clubs
NameTypeReqDescription
clubobject–The club: id, name, description, cover_image_url, max_members, created_at
member_countnumber–Number of members
membersarray–Members by username and role; is_you marks the reader
recent_readsarray–Up to 5 most recent club books

No examples provided.

get_book_club_current_read ~106

Returns the book one of the reader's ReadingRate clubs is reading now, with its reading schedule: each milestone's pages, due date and discussion questions. Use when the reader asks what their club is reading, how far they should be by now, or for the discussion questions. Get club_id from list_book_clubs. Example: {"club_id": "<club id>"}

NameTypeReqDescription
club_idstringyesThe club's id, from list_book_clubs
NameTypeReqDescription
messagestring–Human-readable note when the club has no current book
milestone_countnumber–Number of milestones
milestonesarray–Milestones in order
readobject–The club's current book

No examples provided.

get_book_details ~426

Gives one book's full ReadingRate analysis and shows its difficulty profile as a radar chart: nine difficulty dimensions and four literary-regard dimensions, each scored 0 to 100 with a written reason, plus the book's description, genres, themes, word count, reading time, authors, awards and editions. awards holds prizes and canonical lists; taught_in holds the school curricula and exam boards that set the book, which are not awards. Use when the user asks how hard a specific book is, what makes it difficult, how long it takes to read, whether it has won prizes, or for details about it. To find books that match a description, use search_books. To set two or three books side by side, use compare_books. Identify the book with exactly one of book_id, slug or title_author. Difficulty dimensions: vocabulary_complexity, syntactic_complexity, abstraction_level and information_density (how hard the prose is); narrative_indirection, symbolic_density, ironic_distance, resolution_withholding and structural_complexity (how hard the meaning is). Regard dimensions: canonical_status, critical_acclaim, literary_influence, author_standing. Examples: - {"slug": "crime-and-punishment"} - {"title_author": {"title": "The Great Gatsby", "author": "Fitzgerald"}} - {"slug": "beloved", "include_similar": true} - {"slug": "war-and-peace", "include_time_estimate": true}

NameTypeReqDescription
book_idstring–The book's ReadingRate id, from another ReadingRate tool's results
include_similarboolean–Also list books similar to this one
include_time_estimateboolean–Also estimate how long the book takes to read at the average reader's pace (the reader's own pace is in get_currently_reading)
slugstring–The book's ReadingRate slug, e.g. "crime-and-punishment"
title_authorobject–The book's title and author. Close spellings match.
NameTypeReqDescription
authorsarrayyes–
awardsarray––
cover_url–––
difficultyobjectyes–
genresarray––
idstring–Work UUID, for book_id arguments of other tools
reading_time_minutes–––
regard_overall–––
slugstringyes–
taught_inarray–School curricula and exam boards that set the book (not awards)
titlestringyes–
word_count–––
year–––

No examples provided.

get_currently_reading ~109

Lists the books the reader is reading now, from their ReadingRate library: current page, percent complete, pages left, and the hours left at their own logged reading pace. Also lists poems they have recently read again, with how many times. Use when the user asks what they are reading, how far along they are in a book, or how long a book they are reading will take them to finish. For books they have finished or want to read, use get_reading_history.

Input schema present but exposes no named parameters.

NameTypeReqDescription
booksarray–Books in progress, with progress and time estimates
countnumber–Number of books in progress
poem_countnumber–Number of poems in the poems array
poemsarray–Poems the reader has read again recently, most recent first. return_count is how many times each was read.
summaryobject–Totals: total_books, total_pages_remaining, total_hours_remaining, reading_velocity_used

No examples provided.

get_daily_reading_connections ~130

Returns today's connections in the reader's reading: passages from different books they are reading, and from their saved quotes and notes, that share a theme, with the theme named and a question to reflect on. The first call each day creates them: ReadingRate sends a few of those passages to its AI provider to name the theme and write the question, then stores the result in the reader's account and counts it against their ReadingRate AI usage. Later calls the same day return the same connections. Use when the reader asks what connects their recent reading, or for today's reading connections or reflection prompt.

Input schema present but exposes no named parameters.

NameTypeReqDescription
connectionsarray–The connected passages
generated_atstring–When today's connections were made
messagestring–Why there is nothing today, when there is not
reflection_promptstring–A question for the reader to reflect on
themestring–The theme connecting today's passages

No examples provided.

get_monthly_reading_summary ~144

Returns ReadingRate's summary of one calendar month of the reader's reading: books finished, time and pages read, the difficulty of what they read, highlights, and how the month compares with the year so far. Summaries are made after each month ends. Use when the reader asks how a particular month of reading went. For any other range of dates, such as a year or a season, use summarize_reading_period. Example: {"year": 2026, "month": 9}

NameTypeReqDescription
monthintegeryesThe month, 1 to 12
yearintegeryesThe year, e.g. 2026
NameTypeReqDescription
created_atstring–When the summary was made
dataobject–The summary: hero, books_read, cognitive_terrain, highlights, year_so_far, growth, daily_words
messagestring–Why there is no summary, when there is none

No examples provided.

get_passages_near_reading_position ~258

Returns passages of text from a book the reader is reading, taken from the pages just before their current position in ReadingRate, with their progress in the book. It finds the book and the page itself, so the reader does not have to name the chapter. With a topic, it returns the passages near their position that are closest to that topic. Use when the reader asks for help with what they just read: the last chapter, a passage they did not understand, or what the author meant in the part they have reached. To search a whole book for a topic, use search_book_content. Text is available only for books the reader uploaded their own copy of in the ReadingRate app. For other books the result says the text is not available; the book's scores and analysis are in get_book_details. Examples: - {} - {"book_id": "<book id>", "topic": "the argument about metempsychosis"}

NameTypeReqDescription
book_idstring–The book: its ReadingRate id or library entry id (default: the book the reader read most recently)
topicstring–What the reader wants help with, e.g. "narrative voice"; focuses the passages returned
NameTypeReqDescription
bookobjectyesThe book and the user's reading position
notestringyesGuidance on how to use the passages (or why none were found)
passagesarrayyesText passages from near the user's reading position
passages_foundnumberyesNumber of passages returned

No examples provided.

get_personalized_recommendations ~211

Recommends books from the ReadingRate catalog for this reader, matched to the difficulty range they usually read, the genres and themes they return to, and their reading pace, with the reasons for each pick and a reading-time estimate at their pace. Books they have already finished are left out. It can draw only from their want-to-read list, leave out genres, or reach a little above their usual difficulty. Use when the reader asks what to read next, or which books would suit them. Examples: - {} - {"from_tbr": true} - {"difficulty_stretch": true, "exclude_genres": ["Horror"]}

NameTypeReqDescription
countnumber–Number of recommendations (default 5, max 20)
difficulty_stretchboolean–Include books a little harder than the reader usually reads
exclude_genresarray–Genres to leave out
from_tbrboolean–Recommend only from the reader's want-to-read list
NameTypeReqDescription
based_onobjectyesProfile data the recommendations were derived from
options_usedobjectyesEcho of the request options (from_tbr, exclude_genres, difficulty_stretch)
recommendationsarrayyesRecommended books, highest match score first

No examples provided.

get_poem ~210

Returns the text of a poem in the ReadingRate collection, with numbered lines. Titles, epigraphs, dedications and stage directions are marked apart from the verse. A long work in sections, such as an epic, returns its list of sections unless a section number is given. Use when the user asks to read or see a specific poem, or part of one. It returns only poems already in the collection; it does not write, continue or translate poems. Examples: - {"identifier": "wyatt/whoso-list-to-hunt"} - {"identifier": "milton/paradise-lost", "section": 1}

NameTypeReqDescription
identifierstringyesThe poem's anchor, "poet/poem" such as "wyatt/whoso-list-to-hunt", or its slug alone, such as "whoso-list-to-hunt"
sectionnumber–Section number, for a work in sections only. Omit to get the list of sections.
NameTypeReqDescription
linesarray–The text, in order. Apparatus lines are marked and carry no line number.
notestring–How to fetch a section, when sections were returned
poemobjectyesIdentity of the work, and the anchor every line hangs off
section––Section ordinal, when one was asked for
sectionsarray–Returned instead of lines when the work is sectioned and no section was named

No examples provided.

get_poetic_form_mastery ~78

Shows how widely the reader has read poetry in ReadingRate, by poetic form (sonnet, ode, ...), by era and by poet: distinct poems read, total reads and a mastery stage for each. Use when the reader asks which forms of poetry they have read, or how their poetry reading spreads across eras and poets.

Input schema present but exposes no named parameters.

NameTypeReqDescription
by_formarray–Mastery by poetic form (sonnet, ode, ...)
by_periodarray–Mastery by era (Classical Antiquity, Medieval, ... Contemporary, Undated)
by_poetarray–Mastery by poet

No examples provided.

get_poetry_reading_stats ~149

Summarizes the reader's poetry reading in ReadingRate: the poems they keep returning to, ranked by how often and how recently they read each one, with read counts and last-read dates; how many lines they know by heart; and whether they read widely or reread deeply. Use when the reader asks which poems they keep coming back to, how much poetry they read, or how many lines they know by heart. Example: {"limit": 10}

NameTypeReqDescription
half_life_daysnumber–Days for a read to count half as much in the ranking (default 30)
limitnumber–Maximum number of poems in the ranking (default 20)
NameTypeReqDescription
depth_signatureobject–Breadth (distinct poems read) against depth (median rereads within the rotation)
lines_by_heartnumber–Distinct poem lines the reader knows by heart
rotationarray–Poems ranked by how often and how recently the reader read them, highest first
rotation_half_life_daysnumber–The half-life used for recency

No examples provided.

get_reading_days ~289

Lists the page the reader reached on each day of one reading of a book in their ReadingRate library: for each day, the furthest page, the page they left off at, the pages read and the percent of their copy. Use when the user asks how far they got each day, how many pages they read on which days, how long a book took them day by day, or wants a chart of their progress through a book. For the books themselves, their status and dates, use get_reading_history. ReadingRate records each change of page from the time this history began, so days before logged_since are unknown, not unread. Days are counted in timezone: give the reader's IANA time zone when known (for example "Europe/London"); otherwise their notification setting is used, else UTC. Examples: - {"book_id": "<book id>"} - {"book_id": "<book id>", "timezone": "Europe/London"} - {"book_id": "<book id>", "reading_number": 1}

NameTypeReqDescription
book_idstringyesThe book's ReadingRate id or its library entry id
reading_numbernumber–Which reading: 1 for the first, 2 for a reread. Default: the latest
timezonestring–IANA time zone the days are counted in, for example "Europe/London"
NameTypeReqDescription
bookobjectyesThe book: id, slug, title, authors
current_page–––
current_page_label––current_page as the book prints it, e.g. "liv" or "10"
daysarrayyesOne entry per day with a page change, oldest first
end_date–––
front_matter_pages––Roman-numbered pages at the front of the reader's copy (an introduction numbered i–lx is 60). When set, every page here counts from page i, and the *_label fields give the page as printed
logged_since––When the first page change of this reading was recorded; days before it are not known
notestring–What the days do and do not cover
reading_numbernumber–Which reading of the book: 1 for the first, 2 for a reread
reverse_numberingboolean–The book counts down to page 1: its furthest page each day is the lowest
start_date–––
statusstring–read | reading | want_to_read | stopped | dnf
timezonestring–The time zone the days are counted in
total_pages––Printed pages in the reader's copy, without a roman-numbered introduction; percent counts the whole copy

No examples provided.

get_reading_domain ~113

Describes the reader's progress in one reading domain in ReadingRate: their mastery stage, books, words and hours read, quotes and reflections, and what the next stage requires. Use when the reader asks about their progress in a particular genre, culture, period or theme, or what it takes to reach the next stage. Get domain_id from list_reading_domains. Example: {"domain_id": "<domain id>"}

NameTypeReqDescription
domain_idstringyesThe domain's id, from list_reading_domains
NameTypeReqDescription
axisstring–genre | cultural | period | thematic | compound | user
description–––
domain_idstring––
is_focusedboolean–Whether the reader made this a focus domain
mastery_stagestring–newcomer | exploring | well_read | analytical | expert
metricsobject–Progress metrics
namestring––
next_stage––The next stage, or null at expert
next_stage_boosts––Optional signals that speed up the next stage, each { current, required, met }. Each one met lowers the requirements by 10%, up to 30%
next_stage_requirements––Books and weighted words needed for the next stage, each { current, required, met }, already reduced by met boosts
requirement_reductionnumber–Fraction (0-0.3) the met boosts currently take off the requirements
slugstring––
stage_progressnumber–Progress toward the next stage
work_countnumber–Books in the catalog in this domain

No examples provided.

get_reading_goals ~119

Shows the reader's yearly book goal from ReadingRate and their progress toward it: books finished, books left, whether they are on track, the pace needed, and books finished per month. When no goal is set, it says so and suggests one from their past reading. It does not set a goal. Use when the user asks how they are doing on their reading goal, whether they are on track, or how many books they have read this year.

NameTypeReqDescription
yearnumber–The goal year (default: the current year)
NameTypeReqDescription
goalobject–target_books, books_read, progress_percent, books_remaining, days_remaining, pace_needed_per_month, on_track, projected_finish
goal_setboolean–Whether the reader has set a goal for the year
monthly_breakdownarray–Books finished per month: month, books_read
statusstring–One-line summary of progress
suggestionstring–A goal suggested from past reading, when none is set
yearnumber–The goal year

No examples provided.

get_reading_history ~163

Lists the books in the reader's ReadingRate library with their status (read, reading, want to read, stopped), rating, start and finish dates, and the reader's own reflection, newest activity first. Use when the user asks what they have read or finished, what is on their want-to-read list, how they rated a book, or which of a set of books they have already read. Filter with status. Set include_sessions to add the reading sessions logged for each book.

NameTypeReqDescription
include_sessionsboolean–Include the reading sessions logged for each book (default false)
limitnumber–Maximum number of books (default 50, max 100)
statusstring–Only books with this status. Omit for all.
NameTypeReqDescription
filterobject–The filters applied: status, limit, include_sessions
historyarray–Books in the reader's library, newest activity first
statsobject–Summary counts: total_books, by_status

No examples provided.

get_reading_notes ~210

Returns what the reader has noted about their reading in ReadingRate: their highlights and notes, insights ReadingRate generated about their reading, and the reading insights they saved, each with its id. Pass book_id for one book's notes, or insight_query to get the saved insights closest to a topic, from any book. Use when the reader asks what they thought or noted about a book, for their highlights, what they concluded in an earlier discussion, or which saved insight to delete. To search the text of a book, use search_book_content. Examples: - {"book_id": "<book id>"} - {"insight_query": "unreliable narrators"}

NameTypeReqDescription
book_idstring–Only this book: its ReadingRate id or library entry id
insight_querystring–A topic; returns the saved insights closest to it in meaning, from any book
limitnumber–Maximum number of highlights and notes (default 10, max 50)
NameTypeReqDescription
bookContextobject–When book_id is given: title, author, pagesRead, totalPages, startedAt
conversation_insightsarray–Reading insights the reader saved (with save_reading_insight or in the app). Newest first, or closest to insight_query when it is given. Scoped to the book when book_id is given and insight_query is…
insight_querystring–The insight_query used, when one was given
insightsarray–Insights ReadingRate generated about the reader's reading, newest first
quotesarray–The reader's highlights and notes, newest first (one book's when book_id is given)
readingProfileobject–quoteCount, lastQuoteAt

No examples provided.

get_reading_stats ~82

Summarizes the reader's ReadingRate reading record: reading speed from their logged sessions, the difficulty range they usually read, their most-read genres and themes, books per month, and how they rate books. Use when the user asks how fast they read, what difficulty suits them, what genres or themes they read most, or how their ratings are spread.

Input schema present but exposes no named parameters.

NameTypeReqDescription
difficulty_comfort_zoneobject–min, max, average, description
genre_preferencesarray–Top genres with count, percentage, average_rating
rating_distributionarray–Counts and percentages per 1-5 rating
reading_paceobject–books_per_month, pages_per_day, most_active_period
theme_preferencesarray–Recurring themes with count, appeal_score
total_books_readnumber–Number of finished books
velocityobject–pages_per_hour, words_per_minute, confidence, description

No examples provided.

get_reading_trajectory ~156

Returns written insights about how the reader's reading has been changing: genres they are exploring, authors they return to, their pace, and how their themes are shifting. When none are current, ReadingRate generates them first: it sends the reader's past year of finished books (titles, authors, genres, themes, ratings and dates) to its AI provider, stores the new insights in the reader's account for seven days in place of the earlier ones, and counts the generation against the reader's ReadingRate AI usage. Generating takes several seconds and happens at most once a day. Use when the reader asks about their reading patterns, trends or trajectory. For numbers such as pace and genres, use get_reading_stats.

Input schema present but exposes no named parameters.

NameTypeReqDescription
insight_countnumber–Number of insights returned
insightsarray–Insights about the reader's patterns, newest first
messagestring–Why there are no insights, when there are none

No examples provided.

get_top_books ~706

Returns the top of one of the ranked book lists published on readingrate.com: the highest-ranked books from a country, in an original language, of a genre or on a subject, by women or by men, or at a difficulty. With no filter it returns ReadingRate's curated canon of 100, ranked by hand. Every other list is computed from literary-regard scores (canonical status, critical acclaim and influence), not readers' votes. Each answer gives the list's page address. Use when the user asks for the top, greatest or most important books of a country, a language, a genre, a period or a theme, for a ranked reading list, or for the hardest or easiest great books. For books matching a search, use search_books; for prize results, use get_award_winners. Filters combine: {"country": "Japan", "author_gender": "female"} ranks books by Japanese women. A country or language with no list page is still ranked when the catalog holds books from it, and the answer says how many books the list holds. Examples: - {"country": "Japan", "limit": 10} - {"country": "Nigeria"} - {"language": "Russian", "genre": "short-fiction"} - {"subject": "death-mortality"} - {"subject": "victorian-19th-century-literature", "author_gender": "female"} - {"difficulty": "hardest", "limit": 5} - {}

NameTypeReqDescription
author_genderstring–Only books by women, or only books by men
countrystring–The authors' country, e.g. "Japan", "United States", "Nigeria". These have list pages: Italy, Russia, France, Japan, the United States, Britain, Ireland, Germany, Canada, Spain, Poland, India, China,…
difficultystring–A difficulty band ("easy" under 45 of 100, "moderate" 45 to 64, "challenging" 65 and over), still ranked by literary regard; or "hardest" for the hardest books with high literary regard, ranked by di…
genrestring–A genre: literary-fiction, historical-fiction, romance, fantasy, science-fiction, mystery-crime, thriller, horror, satire-humor, coming-of-age, short-fiction, war-fiction, poetry, drama, memoir, biog…
languagestring–The original language, e.g. "French". These have list pages: French, Spanish, Russian, German, Chinese, Italian, Japanese, Polish.
limitnumber–How many books from the top of the list (default 10, max 100)
subjectstring–A period, theme, region or movement, by name or slug, e.g. "death-mortality", "war-conflict", "victorian-19th-century-literature", "magical-realism", "african-literature". A word from the name is eno…
NameTypeReqDescription
booksarrayyesThe top of the list, in rank order
countnumberyesNumber of books returned
filters_appliedobjectyesEach filter as it was matched, e.g. country: Japan; only set filters appear
listobjectyesThe list the books come from
notestring–Present when the list is short, empty, or has no page

No examples provided.

list_book_clubs ~84

Lists the ReadingRate book clubs the reader belongs to, with their role in each and the book each club is reading now. Use when the reader asks about their book clubs or what their clubs are reading. For one club's members and past books, use get_book_club; for its current book's schedule and discussion questions, use get_book_club_current_read.

Input schema present but exposes no named parameters.

NameTypeReqDescription
club_countnumber–Number of clubs the reader belongs to
clubsarray–The reader's clubs with their role and each club's current book
messagestring–Human-readable note when the reader is in no club

No examples provided.

list_quote_links ~181

Lists the links the reader has drawn between their own saved quotes in ReadingRate, newest first: the two quotes each link joins, with book and page, and the reader's line on why they belong together. Can be narrowed to the links of one quote, and can include links suggested to the reader that they have not accepted yet. Use when the reader asks what a quote is linked to, which quotes they have connected, or before suggesting a link, to avoid suggesting one they already have. Example: {"quote_id": "<quote id>"}

NameTypeReqDescription
include_suggestionsboolean–Also list suggested links the reader has not accepted yet (default false)
limitnumber–Maximum number of links (default 20, max 50)
quote_idstring–Only links of this quote: its id, from list_saved_quotes
NameTypeReqDescription
link_countnumber––
linksarray–Links, newest first
messagestring–Human-readable note when there are no links

No examples provided.

list_quotes_due_for_review ~121

Lists the reader's saved quotes and memorized poem passages that are due for review today in ReadingRate's spaced-repetition practice, earliest first, with how many poem lines they know by heart. Use when the reader asks to be quizzed on their quotes or passages, what is due for review, or how many lines they know by heart. After the reader answers, grade each one with record_quote_review. Example: {"limit": 5}

NameTypeReqDescription
limitnumber–Maximum number of items (default 5, max 20)
NameTypeReqDescription
due_countnumber–Number of quotes and passages due
lines_by_heartnumber–Distinct poem lines the reader currently knows by heart, across memorized passages in good standing
messagestring–Human-readable note when nothing is due
quotesarray–Quotes and poem passages due for review, earliest due first

No examples provided.

list_reading_domains ~126

Lists the reading domains (genres, cultures, periods and themes) the reader has made progress in through ReadingRate, with their mastery stage in each (newcomer, exploring, well read, analytical, expert), books completed and time spent. Up to 50 domains, the deepest first. Use when the reader asks what areas they have read deeply in, what they know most about, or how their domain progress looks. For one domain's full metrics and what the next stage needs, use get_reading_domain. For poetic forms, use get_poetic_form_mastery.

Input schema present but exposes no named parameters.

NameTypeReqDescription
domainsarray–Up to 50 domains, focus domains first, then by books completed
messagestring–Human-readable note when the reader has no domain progress yet
notestring–Present when some domains were left out
total_domainsnumber–Number of domains with progress

No examples provided.

list_saved_quotes ~139

Lists the quotes and passages the reader has saved in ReadingRate, newest first, with page, speaker, notes and themes. Can be narrowed to one book or to quotes containing given words. Use when the user asks for their saved quotes or highlights, or for what they saved from a particular book. Example: {"book_id": "<book id>", "search": "memory"}

NameTypeReqDescription
book_idstring–Only quotes from this book: its ReadingRate book id or library entry id
limitnumber–Maximum number of quotes (default 50, max 100)
searchstring–Only quotes containing these words
NameTypeReqDescription
countnumber–Number of quotes returned
quotesarray–Saved quotes, newest first

No examples provided.

log_poem_read ~181

Records that the reader read a poem from the ReadingRate collection, adding one read to its count. Poems the reader returns to often rank higher in get_poetry_reading_stats, and recent reads can feature in their daily reading connections. A work in sections, such as an epic, is logged one section at a time. Use when the reader says they read or reread a poem, or asks to mark one as read. Each call adds one more read. Examples: - {"identifier": "wyatt/whoso-list-to-hunt"} - {"identifier": "milton/paradise-lost", "section": 1}

NameTypeReqDescription
identifierstringyesThe poem's anchor ("poet/poem") or slug, as for get_poem
sectionnumber–Section number; required for a work in sections
NameTypeReqDescription
anchorstringyesWhat was logged: the whole work, or one section of it
poemobject––
read_atstring–ISO 8601
read_countnumberyesTimes the reader has now read this poem
successbooleanyes–

No examples provided.

log_reading_session ~531

Logs reading for a book in the reader's ReadingRate library: pages read, the page they reached, or a note. It sets the book's current page, adds the pages to today's entry in their reading journal, and adds the note to that entry. One journal entry per book per day: a second call the same day extends that day's pages and appends the note. A book on the want-to-read list moves to reading. Use when the user says how many pages they read, which page they are on, or wants a thought about today's reading saved with it. For a book not yet in their library, use add_book_to_library first. Give pages_read (pages read since the last log), current_page (the arabic page reached) or roman_page (a page of an introduction or preface numbered in roman numerals), only one of them; a note can be sent alone. Each call logs again, so do not repeat a call that succeeded. Introductions numbered i, ii, iii… count. When the reader says their copy's introduction runs to a roman page (for example lx), send front_matter_ends_on with it, alone or with the page; the copy keeps it, and later arabic pages count after it. "0" means the copy has none, or the reader skipped it, which takes its pages back out. Examples: - {"book_id": "<book id>", "pages_read": 30} - {"book_id": "<book id>", "current_page": 150} - {"book_id": "<book id>", "front_matter_ends_on": "lx", "roman_page": "liv"} - {"book_id": "<book id>", "notes": "The argument only lands once you have read the footnotes."}

NameTypeReqDescription
book_idstringyesThe book's ReadingRate id or its library entry id
current_pagenumber–The page the reader is now on, as printed in arabic numerals
front_matter_ends_onstring–The last roman-numbered page of the reader's copy, such as "lx" (or 60); "0" when it has none or they skipped it
notesstring–The reader's note on today's reading, added to today's journal entry
pages_readnumber–Pages read in this session, added to the current page
roman_pagestring–The page the reader is now on in the book's roman-numbered introduction or preface, such as "liv"
NameTypeReqDescription
bookobject–The book: id, slug, title, authors
estimate––hours_remaining and description; null when the total pages are unknown
messagestringyesHuman-readable result
progressobject–current_page (the stored position, counted from page i when the copy has roman front matter), page_label (the page as the book prints it, e.g. "liv" or "10"), front_matter_pages, total_pages (printed…
status_changed––Set when the book moved from want-to-read to reading
successbooleanyesWhether the session was logged
velocity_usednumber–Pages per hour used for the estimate

No examples provided.

lookup_books_batch ~246

Matches a list of books to the ReadingRate catalog in one call, from ISBNs, titles, or titles with authors, and returns each match's ReadingRate analysis with a confidence level (exact, high, medium, low). Matching tolerates misspellings, such as titles read off book spines in a photo. A book the catalog does not hold is looked up in Open Library, a public book database, and comes back unmatched with what Open Library knows about it. Use when the user gives several books at once, such as a photographed bookshelf or a pasted list, and wants them identified, ranked or compared. For a single book, use get_book_details. Takes up to 20 books per call, more on some accounts; a longer list returns an error that gives the limit, so split it. Example: {"books": [{"isbn": "9780140449136"}, {"title": "Crime and Punishment", "author": "Dostoevsky"}, {"title": "The Brothers Karamazov"}]}

NameTypeReqDescription
booksarrayyesThe books to identify. Give each one an isbn, a title, or a title and author.
NameTypeReqDescription
matchedarrayyesQueries matched to ReadingRate books
summaryobjectyesCounts for the batch
unmatchedarrayyesQueries with no catalog match

No examples provided.

record_quote_review ~214

Records how well the reader recalled one saved quote or poem passage during review, on a 0 to 5 scale, and reschedules its next review: good recall pushes the next review further out, poor recall brings it back soon. It replaces the item's previous schedule. Use when the reader has answered a review question from list_quotes_due_for_review and says, or it is clear, how well they remembered it. Grades: 0 no memory at all; 1 wrong, but remembered on seeing it; 2 wrong, but it felt familiar; 3 right with serious difficulty; 4 right after hesitation; 5 perfect. Each call records one review, so grade an item once per review. Example: {"quote_id": "<quote id>", "quality": 4}

NameTypeReqDescription
qualityintegeryesHow well the reader recalled it, from 0 (not at all) to 5 (perfectly)
quote_idstringyesThe quote's id, from list_quotes_due_for_review
NameTypeReqDescription
next_due_quote––The next quote due for review, or null when none is
scheduleobject–The quote's schedule after this review

No examples provided.

save_poem_line ~171

Saves one line of a poem to the reader's ReadingRate quotes, tied to its exact place in the poem, with an optional note. Saved lines appear with their other quotes and come up in quote review. Use when the reader asks to save, keep or remember a line of a poem. To write a note about a line without saving it as a quote, use annotate_poem_line. Each call saves the line again, so save a line once. Example: {"anchor": "wyatt/whoso-list-to-hunt/13"}

NameTypeReqDescription
anchorstringyesThe line's anchor as get_poem or search_poems returns it, e.g. "wyatt/whoso-list-to-hunt/13"
notestring–The reader's note on the line
NameTypeReqDescription
anchorstring––
idstring–The saved quote
messagestring–Why nothing was saved, when success is false
poet–––
settings_urlstring–Where the reader can allow saving quotes from assistants
successbooleanyes–
textstring–The line as saved
titlestring––
total_lines_saved_for_poemnumber––

No examples provided.

save_quote ~237

Saves a passage the reader asks to keep to their ReadingRate quotes, under a book in their library, with optional page, speaker, notes and themes. Saved quotes also appear in the ReadingRate app and in quote review. Use when the user asks to save, keep or remember a quote or passage from a book. For a line of a poem, use save_poem_line. Each call adds a new quote, so calling twice saves it twice. Example: {"book_id": "<book id>", "quote_text": "124 was spiteful.", "page_number": 1}

NameTypeReqDescription
book_idstringyesThe book the quote is from: its ReadingRate book id or library entry id
notesstring–The reader's note on the quote (max 2000 characters)
page_numbernumber–Page the quote is on
quote_textstringyesThe words of the quote
speakerstring–The character who says it, for dialogue (max 200 characters)
themesarray–Themes the quote touches (max 10, each max 100 characters)
NameTypeReqDescription
bookobject–Book the quote belongs to: id, slug, title, authors
messagestring–Human-readable result
quoteobject–The saved quote: id, text, page, speaker, notes, themes
settings_urlstring–Settings link, returned when the reader has turned off saving quotes from assistants
successboolean–Whether the quote was saved
total_quotes_for_booknumber–Total quotes saved for this book

No examples provided.

save_quote_link ~185

Links two of the reader's saved quotes in ReadingRate, with an optional line on why they belong together. The link is two-way and shows on both quotes in the app. Linking two quotes that are already linked changes nothing. Use only when the reader asks to link two quotes, or says yes to linking them. To propose a link the reader has not asked for, use suggest_quote_link. Example: {"quote_id": "<quote id>", "linked_quote_id": "<quote id>", "note": "Both ask how wide the present is."}

NameTypeReqDescription
linked_quote_idstringyesThe other quote: its id, from list_saved_quotes
notestring–Optional: one line on why the two belong together, at most 280 characters
quote_idstringyesOne of the two quotes: its id, from list_saved_quotes
NameTypeReqDescription
already_linkedboolean–True when the two were already linked; nothing changed
linkobject––
messagestring––

No examples provided.

save_reading_insight ~339

Saves a reading insight to the reader's ReadingRate account: a short summary and the key takeaways, in the reader's terms, about one or more books in their library, with optional topics. It is stored with those books, appears in their ReadingRate journal, comes back in later conversations through get_reading_notes, and is copied to the reader's Notion if they have connected Notion to ReadingRate. Only the fields below are sent; nothing else from the conversation is. Use only when the reader asks to save or keep something from the discussion. Show them the summary and takeaways first and save once they agree. Each call saves a new insight, so save a discussion once; the reader can remove one with delete_reading_insight. Example: {"book_ids": ["<book id>"], "summary": "Humbert's eloquence works on the reader as a defense brief.", "key_insights": ["The prose's beauty is a manipulation", "The reader is cast as the jury"], "topics": ["unreliable narration"]}

NameTypeReqDescription
book_idsarrayyesThe books the insight is about: ReadingRate book ids or library entry ids (1 to 20), books in the reader's library
key_insightsarrayyesThe takeaways, one sentence or two each (1 to 10)
summarystringyesWhat the reader wants to keep, in 2 to 4 sentences (20 to 1000 characters)
topicsarray–Themes the insight is about, e.g. "unreliable narration" (up to 20)
NameTypeReqDescription
insightobjectyesThe saved insight
messagestringyesHuman-readable confirmation naming the books
successbooleanyesTrue when the insight was saved
synced_to_notionbooleanyesTrue when a copy was written to the reader's Notion
view_urlstringyesWhere the reader can see the insight in ReadingRate

No examples provided.

search_book_content ~441

Searches the text of one book or one poem for passages about a topic, by meaning rather than exact words, and returns the passages with page and chapter (books) or the line and its neighbours (poems), plus a relevance score. Use when the user asks to find a passage, a scene, or what a book or poem says about something, in a book or poem already identified by id (from search_books, get_reading_history or get_currently_reading). For the text around the page the reader has reached, without a topic, use get_passages_near_reading_position. Book text is available only for books the reader uploaded their own copy of in the ReadingRate app; for other books the result says the text is not available. Poems are always searchable. Spoiler protection is on by default for books: for a book on the reader's want-to-read list no passages are returned, and for a book they are reading only pages up to their logged position are searched. If no position is logged, the whole book is searched, unless spoiler_protection is set to true, in which case passages are withheld and the result says so. Finished books are searched in full. Set spoiler_protection to false to search the whole book. Examples: - {"query": "marriage", "book_id": "<book id>"} - {"query": "the hunt", "poem_id": "whoso-list-to-hunt"}

NameTypeReqDescription
book_idstring–The book to search: its ReadingRate id or library entry id. Give this or poem_id.
limitnumber–Maximum number of passages (default 5, max 10)
poem_idstring–The poem to search: its anchor or slug, as for get_poem. Give this or book_id.
querystringyesWhat to look for, in words, e.g. "passages about memory"
spoiler_protectionboolean–Search only pages the reader has reached (default true). With no logged position, true withholds passages and the default searches the whole book. Not used for poems.
NameTypeReqDescription
filtered_to_bookobject–Present when book_id was provided: the resolved book
messagestring–Present when no passages were found: explains why
passagesarrayyesMatching passages ordered by relevance
querystringyesThe search query that was run
results_countnumberyesNumber of passages returned
spoiler_protectionobject–Present when spoiler protection was applied or explicitly requested

No examples provided.

search_books ~444

Searches the ReadingRate book catalog by title, author, genre, theme or difficulty, and shows the results as book cards. Each result carries a difficulty score from 0 to 100, built from nine scored dimensions of how hard the prose and the meaning are. Use when the user asks to find books by an author, on a subject, in a genre, or within a difficulty range. For one book's full analysis, use get_book_details. For prize winners, use get_award_winners. For many titles at once, such as a pasted list or a photographed shelf, use lookup_books_batch. Results do not say whether the user has read a book; get_reading_history does. Returns: title, authors, publication year, difficulty score, literary regard score, genres, description, awards, cover image. Examples: - {"query": "Toni Morrison"} - {"genres": ["Literary Fiction"], "difficulty_max": 50} - {"query": "war", "genres": ["Historical Fiction"], "difficulty_min": 40, "difficulty_max": 70} - {"query": "Преступление и наказание", "locale": "ru"}: answer in Russian using title_localized and description_localized. Difficulty scores do not depend on language.

NameTypeReqDescription
difficulty_maxnumber–Highest difficulty score to include (0-100; higher is harder to read)
difficulty_minnumber–Lowest difficulty score to include (0-100; lower is easier to read)
genresarray–Only books in any of these genres
limitnumber–Maximum number of results (default 10, max 50)
localestring–The reader's language. "ru" adds each book's Russian title and description (title_localized, description_localized) beside the English ones. Set automatically when the query is in Cyrillic.
querystring–Words from a title or an author's name. Close spellings match.
themesarray–Only books with any of these themes, e.g. 'grief', 'war', 'identity', 'memory'
NameTypeReqDescription
booksarrayyes–
countnumberyes–
localestring–Locale the localized fields are in

No examples provided.

search_poems ~244

Searches the words of every poem in the ReadingRate collection and returns the matching lines, the lines around each, and each poem's anchor, which get_poem, save_poem_line and annotate_poem_line accept. Use when the user half-remembers a line, or wants poems that mention an image or a subject, such as "the poem about the shattered statue in the desert". It returns only poems already in the collection; it does not write, continue or translate poems. It matches words, so a remembered phrase works better than a paraphrase. The poems are in English: for a reader writing in another language, search with the English words a poem would use, explain in the reader's language, and quote the poem's lines in the original English rather than in a translation of your own. Example: {"query": "the woods are lovely dark and deep"}

NameTypeReqDescription
limitnumber–Maximum number of results (default 10, max 25)
poem_idstring–Search one poem only: its anchor or slug, as for get_poem
querystringyesA line, a phrase, or the words remembered
NameTypeReqDescription
notestring–Guidance when the query could not match (e.g. written in a non-English script)
resultsarrayyesMatching passages, most similar first. Empty when nothing matched.

No examples provided.

Install

How do I install the ReadingRate MCP server?

ReadingRate is a hosted endpoint at https://mcp.readingrate.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.readingrate.com

# add to Claude Code
claude mcp add --transport http com-readingrate-readingrate 'https://mcp.readingrate.com/mcp'
Common questions

What is the ReadingRate MCP server?

ReadingRate is an MCP server listed in the public MCP registry as com.readingrate/readingrate. Book difficulty, reading times and ranked lists, plus your reading log, quotes and clubs. This page covers its hosted endpoint (https://mcp.readingrate.com/mcp).

Is the ReadingRate MCP server safe to use?

ReadingRate scores 64 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the ReadingRate MCP server expose?

ReadingRate exposes 45 tools: search_books, get_book_details, compare_books, get_award_winners, get_top_books, and 40 more. Their descriptions and schemas cost roughly 10,319 tokens of context every time the server is loaded.

Does the ReadingRate MCP server require authentication?

No. We connected to ReadingRate without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the ReadingRate MCP server still maintained?

ReadingRate is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.