{"id":2533124,"recorded_at":"2026-11-03T05:34:18.420376Z","observed_at":"2026-11-03T05:34:18.420245Z","subject_kind":"endpoint","subject":"dfd6ff3b-e8b8-42b3-8016-bf6b83c962a0","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":45,"tools":[{"description":"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\".\n\nUse 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.\n\nA 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.\n\nExamples:\n- {\"title_author\": {\"title\": \"The Great Gatsby\", \"author\": \"F. Scott Fitzgerald\"}}\n- {\"isbn\": \"9780140449136\", \"status\": \"read\", \"rating\": 5}\n- {\"book_id\": \"<book id>\", \"status\": \"reading\"}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book's ReadingRate id, from another ReadingRate tool's results","type":"string"},"date_finished":{"description":"Finish date, YYYY-MM-DD, for a book added as read (default: today)","type":"string"},"isbn":{"description":"ISBN-10 or ISBN-13","type":"string"},"rating":{"description":"Rating from 1 to 5, for a book added as read","type":"number"},"status":{"description":"The shelf to put the book on instead of want-to-read","enum":["reading","read","stopped"],"type":"string"},"title_author":{"additionalProperties":false,"description":"The book's title and author. Close spellings match.","properties":{"author":{"description":"Author's name","type":"string"},"title":{"description":"Book title","type":"string"}},"required":["title","author"],"type":"object"}},"required":[],"type":"object"},"name":"add_book_to_library"},{"description":"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.\n\nUse 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.\n\nExample: {\"book_ids\": [\"<book id>\", \"<book id>\"], \"status\": \"read\"}","inputSchema":{"additionalProperties":false,"properties":{"book_ids":{"description":"ReadingRate book ids, as lookup_books_batch returns them (max 40)","items":{"type":"string"},"type":"array"},"status":{"description":"The shelf to put every newly added book on instead of want-to-read","enum":["reading","read","stopped"],"type":"string"}},"required":["book_ids"],"type":"object"},"name":"add_matched_books_to_library"},{"description":"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.\n\nUse 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.\n\nExample: {\"anchor\": \"wyatt/whoso-list-to-hunt/13\", \"note\": \"The hunt as courtship, and its exhaustion.\"}","inputSchema":{"additionalProperties":false,"properties":{"anchor":{"description":"The line's anchor as get_poem or search_poems returns it","type":"string"},"note":{"description":"The reader's note","type":"string"}},"required":["anchor","note"],"type":"object"},"name":"annotate_poem_line"},{"description":"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\".\n\nUse 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.\n\nDefault aspects: difficulty, themes, length.\n\nExamples:\n- {\"book_ids\": [\"crime-and-punishment\", \"the-brothers-karamazov\"]}\n- {\"book_ids\": [\"1984\", \"brave-new-world\", \"fahrenheit-451\"], \"aspects\": [\"themes\", \"difficulty\"]}","inputSchema":{"additionalProperties":false,"properties":{"aspects":{"description":"What to compare (default: difficulty, themes, length)","items":{"enum":["difficulty","themes","length","style","awards"],"type":"string"},"type":"array"},"book_ids":{"description":"Two or three ReadingRate book ids or slugs","items":{"type":"string"},"type":"array"}},"required":["book_ids"],"type":"object"},"name":"compare_books"},{"description":"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.\n\nUse 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.\n\nExample: {\"insight_id\": \"<insight id>\"}","inputSchema":{"additionalProperties":false,"properties":{"insight_id":{"description":"The saved insight's id, as get_reading_notes or save_reading_insight returned it","type":"string"}},"required":["insight_id"],"type":"object"},"name":"delete_reading_insight"},{"description":"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.\n\nUse 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).\n\nExamples:\n- {\"id\": \"<quote id>\", \"type\": \"quote\"}\n- {\"id\": \"<note id>\", \"limit\": 10, \"threshold\": 0.35}","inputSchema":{"additionalProperties":false,"properties":{"id":{"description":"The id of the quote or note to start from","type":"string"},"limit":{"description":"Maximum number of related passages (default 5, max 20)","type":"number"},"threshold":{"description":"Lowest similarity to include, 0 to 1 (default 0.42)","type":"number"},"type":{"description":"What the id is: \"quote\" for a saved quote, \"marginalia\" for a note (default \"marginalia\")","enum":["marginalia","quote"],"type":"string"}},"required":["id"],"type":"object"},"name":"find_related_passages"},{"description":"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.\n\nUse 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.\n\nsource_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.\n\nExamples:\n- {\"award\": \"Booker Prize\", \"category\": \"winner\", \"limit\": 10}\n- {\"award\": \"Pulitzer\", \"year_min\": 2020, \"year_max\": 2024}\n- {\"year_min\": 2023, \"year_max\": 2023, \"category\": \"winner\"}\n- {\"award\": \"AQA\", \"source_type\": \"curriculum\"}","inputSchema":{"additionalProperties":false,"properties":{"award":{"description":"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.","type":"string"},"category":{"description":"Only winners, only the shortlist, or only the longlist","enum":["winner","shortlist","longlist"],"type":"string"},"limit":{"description":"Maximum number of books (default 20, max 50)","type":"number"},"source_type":{"description":"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.","enum":["award","list","curriculum"],"type":"string"},"year_max":{"description":"Latest prize year to include","type":"number"},"year_min":{"description":"Earliest prize year to include","type":"number"}},"required":[],"type":"object"},"name":"get_award_winners"},{"description":"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.\n\nUse 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.\n\nExample: {\"club_id\": \"<club id>\"}","inputSchema":{"additionalProperties":false,"properties":{"club_id":{"description":"The club's id, from list_book_clubs","type":"string"}},"required":["club_id"],"type":"object"},"name":"get_book_club"},{"description":"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.\n\nUse 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.\n\nExample: {\"club_id\": \"<club id>\"}","inputSchema":{"additionalProperties":false,"properties":{"club_id":{"description":"The club's id, from list_book_clubs","type":"string"}},"required":["club_id"],"type":"object"},"name":"get_book_club_current_read"},{"description":"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.\n\nUse 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.\n\nIdentify the book with exactly one of book_id, slug or title_author.\n\nDifficulty 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.\n\nExamples:\n- {\"slug\": \"crime-and-punishment\"}\n- {\"title_author\": {\"title\": \"The Great Gatsby\", \"author\": \"Fitzgerald\"}}\n- {\"slug\": \"beloved\", \"include_similar\": true}\n- {\"slug\": \"war-and-peace\", \"include_time_estimate\": true}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book's ReadingRate id, from another ReadingRate tool's results","type":"string"},"include_similar":{"description":"Also list books similar to this one","type":"boolean"},"include_time_estimate":{"description":"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)","type":"boolean"},"slug":{"description":"The book's ReadingRate slug, e.g. \"crime-and-punishment\"","type":"string"},"title_author":{"additionalProperties":false,"description":"The book's title and author. Close spellings match.","properties":{"author":{"description":"Author's name","type":"string"},"title":{"description":"Book title","type":"string"}},"required":["title","author"],"type":"object"}},"required":[],"type":"object"},"name":"get_book_details"},{"description":"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.\n\nUse 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.\n\nFor books they have finished or want to read, use get_reading_history.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"get_currently_reading"},{"description":"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.\n\nUse when the reader asks what connects their recent reading, or for today's reading connections or reflection prompt.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"get_daily_reading_connections"},{"description":"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.\n\nUse 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.\n\nExample: {\"year\": 2026, \"month\": 9}","inputSchema":{"additionalProperties":false,"properties":{"month":{"description":"The month, 1 to 12","type":"integer"},"year":{"description":"The year, e.g. 2026","type":"integer"}},"required":["year","month"],"type":"object"},"name":"get_monthly_reading_summary"},{"description":"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.\n\nUse 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.\n\nText 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.\n\nExamples:\n- {}\n- {\"book_id\": \"<book id>\", \"topic\": \"the argument about metempsychosis\"}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book: its ReadingRate id or library entry id (default: the book the reader read most recently)","type":"string"},"topic":{"description":"What the reader wants help with, e.g. \"narrative voice\"; focuses the passages returned","type":"string"}},"required":[],"type":"object"},"name":"get_passages_near_reading_position"},{"description":"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.\n\nUse when the reader asks what to read next, or which books would suit them.\n\nExamples:\n- {}\n- {\"from_tbr\": true}\n- {\"difficulty_stretch\": true, \"exclude_genres\": [\"Horror\"]}","inputSchema":{"additionalProperties":false,"properties":{"count":{"description":"Number of recommendations (default 5, max 20)","type":"number"},"difficulty_stretch":{"description":"Include books a little harder than the reader usually reads","type":"boolean"},"exclude_genres":{"description":"Genres to leave out","items":{"type":"string"},"type":"array"},"from_tbr":{"description":"Recommend only from the reader's want-to-read list","type":"boolean"}},"required":[],"type":"object"},"name":"get_personalized_recommendations"},{"description":"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.\n\nUse 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.\n\nExamples:\n- {\"identifier\": \"wyatt/whoso-list-to-hunt\"}\n- {\"identifier\": \"milton/paradise-lost\", \"section\": 1}","inputSchema":{"additionalProperties":false,"properties":{"identifier":{"description":"The poem's anchor, \"poet/poem\" such as \"wyatt/whoso-list-to-hunt\", or its slug alone, such as \"whoso-list-to-hunt\"","type":"string"},"section":{"description":"Section number, for a work in sections only. Omit to get the list of sections.","type":"number"}},"required":["identifier"],"type":"object"},"name":"get_poem"},{"description":"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.\n\nUse when the reader asks which forms of poetry they have read, or how their poetry reading spreads across eras and poets.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"get_poetic_form_mastery"},{"description":"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.\n\nUse when the reader asks which poems they keep coming back to, how much poetry they read, or how many lines they know by heart.\n\nExample: {\"limit\": 10}","inputSchema":{"additionalProperties":false,"properties":{"half_life_days":{"description":"Days for a read to count half as much in the ranking (default 30)","type":"number"},"limit":{"description":"Maximum number of poems in the ranking (default 20)","type":"number"}},"required":[],"type":"object"},"name":"get_poetry_reading_stats"},{"description":"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.\n\nUse 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.\n\nReadingRate 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.\n\nExamples:\n- {\"book_id\": \"<book id>\"}\n- {\"book_id\": \"<book id>\", \"timezone\": \"Europe/London\"}\n- {\"book_id\": \"<book id>\", \"reading_number\": 1}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book's ReadingRate id or its library entry id","type":"string"},"reading_number":{"description":"Which reading: 1 for the first, 2 for a reread. Default: the latest","type":"number"},"timezone":{"description":"IANA time zone the days are counted in, for example \"Europe/London\"","type":"string"}},"required":["book_id"],"type":"object"},"name":"get_reading_days"},{"description":"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.\n\nUse 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.\n\nExample: {\"domain_id\": \"<domain id>\"}","inputSchema":{"additionalProperties":false,"properties":{"domain_id":{"description":"The domain's id, from list_reading_domains","type":"string"}},"required":["domain_id"],"type":"object"},"name":"get_reading_domain"},{"description":"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.\n\nUse 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.","inputSchema":{"additionalProperties":false,"properties":{"year":{"description":"The goal year (default: the current year)","type":"number"}},"required":[],"type":"object"},"name":"get_reading_goals"},{"description":"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.\n\nUse 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.\n\nFilter with status. Set include_sessions to add the reading sessions logged for each book.","inputSchema":{"additionalProperties":false,"properties":{"include_sessions":{"description":"Include the reading sessions logged for each book (default false)","type":"boolean"},"limit":{"description":"Maximum number of books (default 50, max 100)","type":"number"},"status":{"description":"Only books with this status. Omit for all.","enum":["read","reading","want_to_read","stopped"],"type":"string"}},"required":[],"type":"object"},"name":"get_reading_history"},{"description":"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.\n\nUse 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.\n\nExamples:\n- {\"book_id\": \"<book id>\"}\n- {\"insight_query\": \"unreliable narrators\"}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"Only this book: its ReadingRate id or library entry id","type":"string"},"insight_query":{"description":"A topic; returns the saved insights closest to it in meaning, from any book","type":"string"},"limit":{"description":"Maximum number of highlights and notes (default 10, max 50)","type":"number"}},"required":[],"type":"object"},"name":"get_reading_notes"},{"description":"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.\n\nUse 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.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"get_reading_stats"},{"description":"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.\n\nUse when the reader asks about their reading patterns, trends or trajectory. For numbers such as pace and genres, use get_reading_stats.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"get_reading_trajectory"},{"description":"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.\n\nUse 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.\n\nFilters 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.\n\nExamples:\n- {\"country\": \"Japan\", \"limit\": 10}\n- {\"country\": \"Nigeria\"}\n- {\"language\": \"Russian\", \"genre\": \"short-fiction\"}\n- {\"subject\": \"death-mortality\"}\n- {\"subject\": \"victorian-19th-century-literature\", \"author_gender\": \"female\"}\n- {\"difficulty\": \"hardest\", \"limit\": 5}\n- {}","inputSchema":{"additionalProperties":false,"properties":{"author_gender":{"description":"Only books by women, or only books by men","enum":["female","male"],"type":"string"},"country":{"description":"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, Australia, Norway, Sweden, Nigeria, Austria, South Africa. Another country is ranked from the books the catalog holds by its authors.","type":"string"},"difficulty":{"description":"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 difficulty","enum":["easy","moderate","challenging","hardest"],"type":"string"},"genre":{"description":"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, biography, essays, philosophy, history, science, politics-society, psychology-self, religion, childrens, young-adult, graphic-novels, lgbtq, nonfiction","type":"string"},"language":{"description":"The original language, e.g. \"French\". These have list pages: French, Spanish, Russian, German, Chinese, Italian, Japanese, Polish.","type":"string"},"limit":{"description":"How many books from the top of the list (default 10, max 100)","type":"number"},"subject":{"description":"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 enough when it names one (\"gothic\"). An unknown subject returns the full list of subjects.","type":"string"}},"required":[],"type":"object"},"name":"get_top_books"},{"description":"Lists the ReadingRate book clubs the reader belongs to, with their role in each and the book each club is reading now.\n\nUse 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.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"list_book_clubs"},{"description":"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.\n\nUse 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.\n\nExample: {\"quote_id\": \"<quote id>\"}","inputSchema":{"additionalProperties":false,"properties":{"include_suggestions":{"description":"Also list suggested links the reader has not accepted yet (default false)","type":"boolean"},"limit":{"description":"Maximum number of links (default 20, max 50)","type":"number"},"quote_id":{"description":"Only links of this quote: its id, from list_saved_quotes","type":"string"}},"required":[],"type":"object"},"name":"list_quote_links"},{"description":"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.\n\nUse 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.\n\nExample: {\"limit\": 5}","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Maximum number of items (default 5, max 20)","type":"number"}},"required":[],"type":"object"},"name":"list_quotes_due_for_review"},{"description":"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.\n\nUse 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.","inputSchema":{"additionalProperties":false,"properties":{},"required":[],"type":"object"},"name":"list_reading_domains"},{"description":"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.\n\nUse when the user asks for their saved quotes or highlights, or for what they saved from a particular book.\n\nExample: {\"book_id\": \"<book id>\", \"search\": \"memory\"}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"Only quotes from this book: its ReadingRate book id or library entry id","type":"string"},"limit":{"description":"Maximum number of quotes (default 50, max 100)","type":"number"},"search":{"description":"Only quotes containing these words","type":"string"}},"required":[],"type":"object"},"name":"list_saved_quotes"},{"description":"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.\n\nUse when the reader says they read or reread a poem, or asks to mark one as read. Each call adds one more read.\n\nExamples:\n- {\"identifier\": \"wyatt/whoso-list-to-hunt\"}\n- {\"identifier\": \"milton/paradise-lost\", \"section\": 1}","inputSchema":{"additionalProperties":false,"properties":{"identifier":{"description":"The poem's anchor (\"poet/poem\") or slug, as for get_poem","type":"string"},"section":{"description":"Section number; required for a work in sections","type":"number"}},"required":["identifier"],"type":"object"},"name":"log_poem_read"},{"description":"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.\n\nUse 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.\n\nGive 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.\n\nIntroductions 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.\n\nExamples:\n- {\"book_id\": \"<book id>\", \"pages_read\": 30}\n- {\"book_id\": \"<book id>\", \"current_page\": 150}\n- {\"book_id\": \"<book id>\", \"front_matter_ends_on\": \"lx\", \"roman_page\": \"liv\"}\n- {\"book_id\": \"<book id>\", \"notes\": \"The argument only lands once you have read the footnotes.\"}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book's ReadingRate id or its library entry id","type":"string"},"current_page":{"description":"The page the reader is now on, as printed in arabic numerals","type":"number"},"front_matter_ends_on":{"description":"The last roman-numbered page of the reader's copy, such as \"lx\" (or 60); \"0\" when it has none or they skipped it","type":"string"},"notes":{"description":"The reader's note on today's reading, added to today's journal entry","type":"string"},"pages_read":{"description":"Pages read in this session, added to the current page","type":"number"},"roman_page":{"description":"The page the reader is now on in the book's roman-numbered introduction or preface, such as \"liv\"","type":"string"}},"required":["book_id"],"type":"object"},"name":"log_reading_session"},{"description":"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.\n\nUse 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.\n\nTakes up to 20 books per call, more on some accounts; a longer list returns an error that gives the limit, so split it.\n\nExample: {\"books\": [{\"isbn\": \"9780140449136\"}, {\"title\": \"Crime and Punishment\", \"author\": \"Dostoevsky\"}, {\"title\": \"The Brothers Karamazov\"}]}","inputSchema":{"additionalProperties":false,"properties":{"books":{"description":"The books to identify. Give each one an isbn, a title, or a title and author.","items":{"additionalProperties":false,"properties":{"author":{"description":"Author's name; improves matching alongside a title","type":"string"},"isbn":{"description":"ISBN-10 or ISBN-13","type":"string"},"title":{"description":"Book title","type":"string"}},"type":"object"},"type":"array"}},"required":["books"],"type":"object"},"name":"lookup_books_batch"},{"description":"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.\n\nUse 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.\n\nEach call records one review, so grade an item once per review.\n\nExample: {\"quote_id\": \"<quote id>\", \"quality\": 4}","inputSchema":{"additionalProperties":false,"properties":{"quality":{"description":"How well the reader recalled it, from 0 (not at all) to 5 (perfectly)","type":"integer"},"quote_id":{"description":"The quote's id, from list_quotes_due_for_review","type":"string"}},"required":["quote_id","quality"],"type":"object"},"name":"record_quote_review"},{"description":"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.\n\nUse 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.\n\nExample: {\"anchor\": \"wyatt/whoso-list-to-hunt/13\"}","inputSchema":{"additionalProperties":false,"properties":{"anchor":{"description":"The line's anchor as get_poem or search_poems returns it, e.g. \"wyatt/whoso-list-to-hunt/13\"","type":"string"},"note":{"description":"The reader's note on the line","type":"string"}},"required":["anchor"],"type":"object"},"name":"save_poem_line"},{"description":"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.\n\nUse 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.\n\nEach call adds a new quote, so calling twice saves it twice.\n\nExample: {\"book_id\": \"<book id>\", \"quote_text\": \"124 was spiteful.\", \"page_number\": 1}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book the quote is from: its ReadingRate book id or library entry id","type":"string"},"notes":{"description":"The reader's note on the quote (max 2000 characters)","type":"string"},"page_number":{"description":"Page the quote is on","type":"number"},"quote_text":{"description":"The words of the quote","type":"string"},"speaker":{"description":"The character who says it, for dialogue (max 200 characters)","type":"string"},"themes":{"description":"Themes the quote touches (max 10, each max 100 characters)","items":{"type":"string"},"type":"array"}},"required":["book_id","quote_text"],"type":"object"},"name":"save_quote"},{"description":"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.\n\nUse 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.\n\nExample: {\"quote_id\": \"<quote id>\", \"linked_quote_id\": \"<quote id>\", \"note\": \"Both ask how wide the present is.\"}","inputSchema":{"additionalProperties":false,"properties":{"linked_quote_id":{"description":"The other quote: its id, from list_saved_quotes","type":"string"},"note":{"description":"Optional: one line on why the two belong together, at most 280 characters","type":"string"},"quote_id":{"description":"One of the two quotes: its id, from list_saved_quotes","type":"string"}},"required":["quote_id","linked_quote_id"],"type":"object"},"name":"save_quote_link"},{"description":"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.\n\nUse 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.\n\nExample: {\"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\"]}","inputSchema":{"additionalProperties":false,"properties":{"book_ids":{"description":"The books the insight is about: ReadingRate book ids or library entry ids (1 to 20), books in the reader's library","items":{"type":"string"},"type":"array"},"key_insights":{"description":"The takeaways, one sentence or two each (1 to 10)","items":{"type":"string"},"type":"array"},"summary":{"description":"What the reader wants to keep, in 2 to 4 sentences (20 to 1000 characters)","type":"string"},"topics":{"description":"Themes the insight is about, e.g. \"unreliable narration\" (up to 20)","items":{"type":"string"},"type":"array"}},"required":["book_ids","summary","key_insights"],"type":"object"},"name":"save_reading_insight"},{"description":"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.\n\nUse 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.\n\nBook 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.\n\nSpoiler 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.\n\nExamples:\n- {\"query\": \"marriage\", \"book_id\": \"<book id>\"}\n- {\"query\": \"the hunt\", \"poem_id\": \"whoso-list-to-hunt\"}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book to search: its ReadingRate id or library entry id. Give this or poem_id.","type":"string"},"limit":{"description":"Maximum number of passages (default 5, max 10)","type":"number"},"poem_id":{"description":"The poem to search: its anchor or slug, as for get_poem. Give this or book_id.","type":"string"},"query":{"description":"What to look for, in words, e.g. \"passages about memory\"","type":"string"},"spoiler_protection":{"description":"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.","type":"boolean"}},"required":["query"],"type":"object"},"name":"search_book_content"},{"description":"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.\n\nUse 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.\n\nReturns: title, authors, publication year, difficulty score, literary regard score, genres, description, awards, cover image.\n\nExamples:\n- {\"query\": \"Toni Morrison\"}\n- {\"genres\": [\"Literary Fiction\"], \"difficulty_max\": 50}\n- {\"query\": \"war\", \"genres\": [\"Historical Fiction\"], \"difficulty_min\": 40, \"difficulty_max\": 70}\n- {\"query\": \"Преступление и наказание\", \"locale\": \"ru\"}: answer in Russian using title_localized and description_localized. Difficulty scores do not depend on language.","inputSchema":{"additionalProperties":false,"properties":{"difficulty_max":{"description":"Highest difficulty score to include (0-100; higher is harder to read)","type":"number"},"difficulty_min":{"description":"Lowest difficulty score to include (0-100; lower is easier to read)","type":"number"},"genres":{"description":"Only books in any of these genres","items":{"enum":["Literary Fiction","Historical Fiction","Science Fiction","Fantasy","Mystery","Thriller","Horror","Romance","Biography & Memoir","History","Science & Nature","Philosophy","Essays","Poetry","Drama","Short Stories","Graphic Novel","Young Adult","Children's"],"type":"string"},"type":"array"},"limit":{"description":"Maximum number of results (default 10, max 50)","type":"number"},"locale":{"description":"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.","enum":["en","ru"],"type":"string"},"query":{"description":"Words from a title or an author's name. Close spellings match.","type":"string"},"themes":{"description":"Only books with any of these themes, e.g. 'grief', 'war', 'identity', 'memory'","items":{"type":"string"},"type":"array"}},"required":[],"type":"object"},"name":"search_books"},{"description":"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.\n\nUse 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.\n\nIt 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.\n\nExample: {\"query\": \"the woods are lovely dark and deep\"}","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Maximum number of results (default 10, max 25)","type":"number"},"poem_id":{"description":"Search one poem only: its anchor or slug, as for get_poem","type":"string"},"query":{"description":"A line, a phrase, or the words remembered","type":"string"}},"required":["query"],"type":"object"},"name":"search_poems"},{"description":"Suggests a link between two of the reader's saved quotes in ReadingRate, with a line on why they belong together. The suggestion waits in the app until the reader accepts or dismisses it; it is not a link until they accept.\n\nUse when you notice two of the reader's quotes, usually from different books, that speak to each other in a way the reader may not have seen, and the reader has not asked you to link them. Say in the conversation which two you suggested and why. Check list_quote_links first so you do not suggest a link they already have.\n\nExample: {\"quote_id\": \"<quote id>\", \"linked_quote_id\": \"<quote id>\", \"note\": \"Both describe living only in the present.\"}","inputSchema":{"additionalProperties":false,"properties":{"linked_quote_id":{"description":"The other quote: its id, from list_saved_quotes","type":"string"},"note":{"description":"Optional: one line on why the two belong together, at most 280 characters","type":"string"},"quote_id":{"description":"One of the two quotes: its id, from list_saved_quotes","type":"string"}},"required":["quote_id","linked_quote_id","note"],"type":"object"},"name":"suggest_quote_link"},{"description":"Builds a summary of the reader's reading between two dates, up to a year apart: books finished, time and pages read, the difficulty of what they read and highlights. ReadingRate computes it from the reader's records and saves it in their account, where it replaces any summary saved earlier for the same dates.\n\nUse when the reader asks for a review of a period that is not one calendar month, such as a year in review or a season. For a single calendar month, use get_monthly_reading_summary.\n\nExample: {\"start_date\": \"2025-01-01\", \"end_date\": \"2025-12-31\", \"period_label\": \"2025\"}","inputSchema":{"additionalProperties":false,"properties":{"end_date":{"description":"Last day, YYYY-MM-DD, at most 366 days after the first","type":"string"},"period_label":{"description":"A name for the period, e.g. \"Summer 2026\" (max 60 characters)","type":"string"},"start_date":{"description":"First day, YYYY-MM-DD","type":"string"}},"required":["start_date","end_date"],"type":"object"},"name":"summarize_reading_period"},{"description":"Moves a book that is already in the reader's ReadingRate library to another status: \"reading\" (sets the start date if there is none), \"read\" (sets the finish date, with an optional rating), \"stopped\", or \"want_to_read\" (clears the finish date). It replaces the book's current status, and for \"read\" its rating and finish date. Marking a book read also adds it to 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): on the profile, and for people who follow the reader in their feed and on the book's page.\n\nUse when the user says they started, finished, stopped or gave up a book in their library, wants to rate a finished book, or wants a book back on their want-to-read list. For a book not yet in their library, use add_book_to_library.\n\nExamples:\n- {\"book_id\": \"<book id>\", \"status\": \"reading\"}\n- {\"book_id\": \"<book id>\", \"status\": \"read\", \"rating\": 5}","inputSchema":{"additionalProperties":false,"properties":{"book_id":{"description":"The book's ReadingRate id or its library entry id","type":"string"},"date_finished":{"description":"Finish date, YYYY-MM-DD, only with status \"read\" (default: today)","type":"string"},"rating":{"description":"Rating from 1 to 5, only with status \"read\"","type":"number"},"status":{"description":"The new status","enum":["want_to_read","reading","read","stopped"],"type":"string"}},"required":["book_id","status"],"type":"object"},"name":"update_book_status"}]},"body_sha256":"73686e8eecca309bedbd06235d32017bc40138871bd869c26561ece4d05cf179","prev_id":null,"leaf":"0x69b43340d0ead807cd724cfcfc61c52cbcb74b6647189214ad1bcb719155a449","leaf_text":"{\"body\":\"73686e8eecca309bedbd06235d32017bc40138871bd869c26561ece4d05cf179\",\"id\":2533124,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793684058420245,\"prev\":null,\"subject\":\"dfd6ff3b-e8b8-42b3-8016-bf6b83c962a0\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-11-03","leaves":425475,"root":"0xb646ffa569e24bf8336b0a15a9d98d0a2f1239f58e10c2b18a9d22e43343566a","chained":"0x35e926359fd19031c6b5e08fb3b44f2524386a57c8fdd353336c185603f53d43","anchor_chain":"eip155:5042002","anchor_tx":"0xa5f9dadba13cde129126b950e64b815e6833cb8ff53b75026c9dbe769c3768c7","anchor_block":70601990},"proof":["0x69b48428b12fa760f02da4e891d3067f3f2566a90787ec5a445947b79931d908","0x3149fe3a48cafb9a88bf8b573c4092bd3ba8b17bfecbb018949059de0719fb2c","0x3912bda4f1e58488ff19c84c238dec95a538325ff4ac5ca9ef99ab47eb1003b4","0x0a212299b973be39e2b11ed79392c84d283a39745ed0e6dba8e09422152efcff","0xcf754f93da953565fe662317af41b834e35fcb4b8ac4ac3e694b1071f3c33d87","0x87b99ef037036dac7b44a8e7a9b8e6add6ca0775d218adb799e3a459336fe84d","0x1d0f5c786c04721a36edd73555093bcd2ff9601693fdc1722b3e57ba73a4669a","0x1e1ac1cb7c7bc83b1dcf537f9aa260abcb4dd7ef09918bb670b38a5553be0556","0x64ccc0a81a3d7df28081e9a9321a9b543b7e5d7b5bd8d53ca405c40ebc604335","0x21841dc178d867ad9535cf0209ef5c45b550113f007bd809ffd25859c66a7028","0x7ec06d6031982e5dc089061474f8815fc1b524e8cb016b3d0b2033aae3ca0823","0x15418015b6916f973980ea96eed198c85bed48f9e65565e436edd526df3cd86a","0x49f77922e3c0c0d3ba9192584c8edb707aedf3ee37ea613d6583857a202724be","0xb3db8b63788b8a266b4e7a4464683e6583189a54ea3ed27e3979d71ea98215f4","0xa8458bc8c8ab1d4945ab9da0d4203ddba2468a0fef808e9febae01e3e86bcd40","0x4f2735e4d41cb2a5d48f6769cc066ea1066bbcd0623dd42fe7bc81e54092cd64","0x3ef2d6c56d2bc5990e646c07605e90ed24d1c642cbcca8f60a35422b8b7981ee","0x717b5d7cbc24826c5b1f7b7433bf30b76e9ba1370476af4e1b494a5211897cc3","0xe35032d4b064b015fe60638756eeb0bc24e7c7943586468d33349341ee0ed3d6"]}