{"name":"io.github.quotewise/mcp","slug":"quotewise-mcp","title":"Quotewise","description":"Semantic quote search with 600K quotes. Find quotes by meaning, verify attributions.","url":"https://mcp.market/server/quotewise-mcp","rating":null,"grade":"B","score":72,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":11,"stars":1,"forks":0,"downloads_week":null,"last_push_at":"2026-02-16T04:33:11.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T09:30:37.617Z","last_ok_at":"2026-11-04T09:30:37.617Z","latency_ms":553},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/quotewise/mcp","website":null,"version":"1.0.3","remotes":[{"type":"streamable-http","url":"https://mcp.quotewise.io/","headers":[{"description":"Optional API key for higher rate limits. Format: Bearer YOUR_API_KEY. Anonymous access provides 100 requests/hour.","isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"cite_quote","description":"Render a quote citation for AI assistants.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"quote":{"description":"Quote short code or supported legacy identifier","minLength":3,"type":"string"},"style":{"default":"casual","description":"Citation style: casual, mla, chicago, apa, csl-json, or all","type":"string"}},"required":["quote"],"additionalProperties":false}},{"name":"collection","description":"Perform collection operations: CRUD, browse public collections, view public/shared/system collections, or collect quotes. Auth required for create/get/update/delete/list/collect_from_public.\n\nWhen to use: User wants to save, organize, or manage their quote collections, or browse/view public collections.\n\nExamples:\n- `collection(action=\"browse\", tab=\"featured\")` - browse public collections\n- `collection(action=\"public_detail\", username=\"curator\", slug=\"favorites\")` - view public collection\n- `collection(action=\"shared_detail\", token=\"abc123\")` - view shared collection\n- `collection(action=\"collect_from_public\", username=\"curator\", slug=\"favorites\", quote_code=\"xyz\")` - collect quote","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"action":{"description":"Collection operation","enum":["create","get","update","delete","list","browse","public_detail","shared_detail","system_detail","collect_from_public"],"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Collection name/slug (required for create/get/update/delete)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Collection description (used for create/update)"},"limit":{"default":25,"description":"Max results (list action)","maximum":100,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"},"page":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Page number"},"page_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Items per page"},"tab":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Browse tab: featured, recent, or popular"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Username for public_detail/collect_from_public"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Collection slug for public_detail/system_detail/collect_from_public"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Share token for shared_detail"},"quote_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Quote short_code for collect_from_public"}},"required":["action"],"additionalProperties":false}},{"name":"collection_quotes","description":"Manage quotes within a collection: add, remove, list, or public_list. Auth required for add/remove/list. public_list is unauthenticated.\n\nWhen to use: User wants to add quotes to their collection, remove saved quotes, view quotes in a collection, or browse public collection quotes.\n\nExamples:\n- `collection_quotes(action=\"add\", collection=\"favorites\", quote=\"abc123\")` - add quote\n- `collection_quotes(action=\"list\", collection=\"favorites\")` - list quotes in collection\n- `collection_quotes(action=\"public_list\", username=\"curator\", slug=\"favorites\")` - view public collection quotes\n- `collection_quotes(action=\"public_list\", token=\"abc123\")` - view shared collection quotes","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"action":{"description":"Quote operation: add, remove, list, or public_list","enum":["add","remove","list","public_list"],"type":"string"},"collection":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Collection name/slug identifier. Use 'all' to search across all collections (not combinable with 'about' — semantic search requires a single named collection)."},"quote":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Quote short_code or ID (required for add/remove actions)"},"framing":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Curator editorial framing for the quote (used with add action)"},"circumstance":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Per-collection circumstance override (used with add action)"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Private notes for the quote (used with add action)"},"about":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Semantic search within collection (e.g., 'courage'); requires a single named collection (not collection='all' — use quotes_about for global search)"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Originator name (e.g., 'Einstein')"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans).","examples":["female","trans woman","queer"]},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose/verse/one-liner"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max chars (280=Twitter, 500=Threads)"},"reading_level":{"anyOf":[{"enum":["elementary","middle_school","high_school","college"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by reading level (elementary/middle_school/high_school/college). Supported languages: en, es, fr, de, it, nl, ru, pt. Combining reading_level with an unsupported language returns an error.","examples":["elementary","college"]},"content_rating":{"anyOf":[{"description":"MPAA-style content rating for quotes.\n\nValues match database content_rating field values exactly.\nMember names follow Django TextChoices convention (no underscores).\n\nCompatible with Django TextChoices API:\n- .label: Human-readable label (e.g., \"General Audience\")\n- .choices: List of (value, label) tuples for model fields","enum":["G","PG","PG-13","R","NC-17"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","examples":["PG","PG-13"]},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Username for public_list lookup"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Collection slug for public_list lookup"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Share token for public_list lookup"},"limit":{"default":25,"description":"Max results (list action)","maximum":100,"minimum":1,"type":"integer"},"page":{"default":1,"description":"Page number for pagination","minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["action"],"additionalProperties":false}},{"name":"flag_content","description":"Flag content for moderation review. Authentication is required.\n\nFor quote issues, especially across multiple quotes, prefer report_quote. Use this tool for originator, source, and sighting flags. Provide exactly ONE entity identifier.\n\nExamples:\n- `flag_content(flag_type=\"misattributed\", reason=\"Quote is by Mark Twain\", quote_ref=\"abc123\")` - report wrong attribution\n- `flag_content(flag_type=\"broken_link\", reason=\"404 error\", sighting_id=12345)` - report dead link","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"flag_type":{"description":"Type of flag: spam (advertising/promotional), misattributed (wrong author), typo (text error), nested (quote within quote), broken_link (dead URL)","enum":["spam","misattributed","typo","nested","broken_link"],"type":"string"},"reason":{"description":"Explanation of the issue (required)","maxLength":2000,"minLength":5,"type":"string"},"quote_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Quote short_code (6-char identifier, e.g., 'abc123')"},"originator_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Originator slug (e.g., 'albert-einstein')"},"source_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Source database ID"},"sighting_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"QuoteSighting database ID (for broken_link flags)"},"evidence_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"URL supporting the flag (e.g., QuoteInvestigator link)"}},"required":["flag_type","reason"],"additionalProperties":false}},{"name":"originators","description":"Lookup, search, or browse originators. Handles people, proverbs, anonymous sources, and institutions. Use name= for exact match, search= for fuzzy, neither for browsing.\n\nWhen to use: User asks about a person/author, wants to find who said something, or needs to browse by category (poets, philosophers, etc).\n\nBehaviors:\n- `name` provided → resolve and return single originator details\n- `search` provided → fuzzy search, return ranked list (optionally filtered by category tags)\n- Neither → browse by filters (popular, language, min_quotes, category tags, etc.)\n\nCategory tags filter by originator type (e.g., [\"Poets\", \"Politicians\", \"Catholic Bishops\"]) - works with all modes.\n\nGender filter accepts natural language (e.g., \"female\", \"women\", \"queer\", \"trans\") - resolved to Wikidata Q-IDs internally.\n\nResponse format:\n- Concise (default): slug, full_name, sort_name, quote_count, descriptions_i18n, web_url\n- Detailed: + biography (500 char excerpt), confidence_tier, similarity_score\n\nResponse includes ai_hints with suggested next actions and quality signals for agent workflows.\n\nDate filters (`born_on`, `died_on`, `born_year_gte`, `born_year_lte`, `died_year_gte`, `died_year_lte`) combine with every other filter via AND. Negative year bounds represent BCE; year 0 is rejected.\n\nExamples:\n- `originators(name=\"Einstein\")` - exact lookup\n- `originators(search=\"Shake\")` - fuzzy search for \"Shakespeare\"\n- `originators(tags=[\"Poets\"], gender=\"female\")` - browse female poets\n- `originators(sort=\"popular\", limit=10)` - top 10 by quote count\n- `originators(born_on=\"04-20\")` - originators born April 20 (any year)\n- `originators(born_year_gte=-500, born_year_lte=-300)` - originators born between 500 BCE and 300 BCE inclusive","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"anyOf":[{"maxLength":200,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Exact lookup for originator name (resolved internally) → single result"},"search":{"anyOf":[{"maxLength":200,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Fuzzy search query for originators (minimum 2 characters) → multiple results"},"language":{"anyOf":[{"maxLength":5,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Filter by quote language (ISO 639-1 code, e.g., 'en', 'fr', 'de')"},"min_quotes":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Minimum quote count threshold"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Filter by originator category tags (e.g., ['Poets', 'Politicians', 'Catholic Bishops'])"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans).","examples":["female","trans woman","queer"]},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"born_on":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by birth month-day. Strict 'MM-DD' (zero-padded, hyphen-separated). Matches ^\\d{2}-\\d{2}$. Uses exact birth_date only; EDTF is not consulted for month-day filters. Example: '04-20' for April 20."},"died_on":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by death month-day. Strict 'MM-DD' (zero-padded, hyphen-separated). Matches ^\\d{2}-\\d{2}$. Uses exact death_date only. Example: '12-25'."},"born_year_gte":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Lower-bound filter on birth-date year (inclusive). Non-zero signed integer. Negative values represent BCE years (e.g., -500 means 500 BCE). Year 0 is rejected — use -1 for 1 BCE or 1 for 1 CE. Falls back to birth_date_edtf when exact birth_date is null AND the EDTF value encodes a single specific year (BCE and approximate-year markers like '1850~' accepted; intervals like '1850/1852' and century-only values like '18XX' excluded)."},"born_year_lte":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Upper-bound filter on birth-date year (inclusive). Same semantics as born_year_gte. If only one bound is supplied, the other side is unbounded. When both are supplied, born_year_lte must be >= born_year_gte."},"died_year_gte":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Lower-bound filter on death-date year (inclusive). Same semantics as born_year_gte, applied to death_date / death_date_edtf."},"died_year_lte":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Upper-bound filter on death-date year (inclusive). Same semantics as born_year_lte, applied to death_date / death_date_edtf."},"sort":{"default":"popular","description":"Sort order for results when browsing (not using name/search)","enum":["popular","name","recent"],"type":"string"},"limit":{"default":25,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level - concise (slug, name, quote_count, descriptions_i18n, web_url) or detailed (+ biography excerpt, confidence_tier, similarity_score)","enum":["concise","detailed"],"type":"string"}},"additionalProperties":false}},{"name":"originators_like","description":"Find originators similar to the given one using vector similarity (quote themes). Use after finding an author to discover related thinkers.\n\nWhen to use: User likes an author and wants to discover similar thinkers, or needs recommendations based on quote themes.\n\nReturns originators with similarity scores (0-100%).\n\nResponse format:\n- Concise (default): slug, name, quote_count, descriptions_i18n, similarity_score, web_url\n- Detailed: + biography (500 char excerpt), confidence_tier\n\nResponse includes ai_hints with suggested next actions and quality signals for agent workflows.\n\nExamples:\n- `originators_like(originator=\"Marcus Aurelius\")` - similar philosophers\n- `originators_like(originator=\"Oscar Wilde\")` - similar wits\n- `originators_like(originator=\"African Proverbs\")` - similar proverb collections","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"originator":{"description":"Originator name to find similar ones for (resolved internally)","maxLength":200,"minLength":2,"type":"string"},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"limit":{"default":5,"description":"Max results","maximum":20,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level - concise (slug, name, quote_count, descriptions_i18n, web_url) or detailed (+ biography excerpt, confidence_tier, similarity_score)","enum":["concise","detailed"],"type":"string"}},"required":["originator"],"additionalProperties":false}},{"name":"propose_edit","description":"Propose an edit to a quote. Requires authentication.\n\nWhen to use: User wants to fix quote text, add/remove tags, or update attribution. Trusted users may have edits auto-activated; others queue for review.\n\nExamples:\n- `propose_edit(edit_type=\"text\", quote_ref=\"abc123\", new_text=\"Corrected spelling\")` - fix typo\n- `propose_edit(edit_type=\"tag_add\", quote_ref=\"abc123\", tag_text=\"philosophy\")` - add tag\n- `propose_edit(edit_type=\"attribution\", quote_ref=\"abc123\", disputed=True)` - mark disputed","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"edit_type":{"description":"Type of edit: text (fix quote text), tag_add (add tag), tag_remove (remove tag), attribution (fix attribution)","enum":["text","tag_add","tag_remove","attribution"],"type":"string"},"quote_ref":{"description":"Quote short_code (6-char identifier, required)","type":"string"},"new_text":{"anyOf":[{"maxLength":10000,"type":"string"},{"type":"null"}],"default":null,"description":"Corrected quote text (required for text edits)"},"tag_text":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Tag to add/remove (required for tag edits)"},"originator_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"New originator ID (for attribution edits)"},"disputed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Mark attribution as disputed (for attribution edits)"},"attribution_notes":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Notes about attribution (for attribution edits)"}},"required":["edit_type","quote_ref"],"additionalProperties":false}},{"name":"quote","description":"Use this to get full details for a quote. Returns complete attribution, sources, and metadata.\n\nWhen to use: User wants more details about a quote from search results. Use the short_code from previous results.\n\nExamples:\n- `quote(\"abc123\")` - get details for quote with short_code\n- `quote(\"xyz789\", response_format=\"detailed\")` - with full metadata\n- `quote(\"abc123\", include_relations=True)` - with translations and variants","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"code":{"description":"Quote code (e.g., 'abc123')","minLength":3,"type":"string"},"include_relations":{"default":false,"description":"Include related quotes (translations, variants, etc.)","type":"boolean"},"include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Include extra data: 'collections'"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["code"],"additionalProperties":false}},{"name":"quote_random","description":"Return a random quote matching the specified filters.\n\nWhen to use: User wants surprise/variety or doesn't have a specific topic in mind.\n\nBy default, returns family-friendly content (G, PG, PG-13).\nRequest NC-17 explicitly for unrestricted content.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"content_rating":{"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","enum":["G","PG","PG-13","R","NC-17"],"type":"string","default":"PG-13","examples":["PG","PG-13"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language code (e.g., 'en', 'es', 'de')"},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose (single line), verse (multi-line), one-liner (single sentence)"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum characters (e.g., 280 for Twitter)"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"additionalProperties":false}},{"name":"quote_relations","description":"Get relations for a quote, grouped by type and direction.\n\nReturns translations, variants, and other related quotes with provenance info.\nUse to explore how quotes connect to each other (translations, variants, attributions).\n\nExamples:\n- `quote_relations(\"abc123\")` - all relations for a quote\n- `quote_relations(\"abc123\", relation_type=\"intra_translation\")` - only translations\n- `quote_relations(\"abc123\", direction=\"outgoing\")` - only outgoing relations","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"code":{"description":"Quote short_code (e.g., 'abc123')","minLength":3,"type":"string"},"relation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by relation type: intra_translation, cross_translation, variant, revision_of, misattributed_from, semantic_equivalent, inspired_by"},"direction":{"anyOf":[{"enum":["outgoing","incoming","both"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by direction: outgoing, incoming, or both"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"},"include_audit":{"default":false,"description":"Include audit/non-displayable relation edges for trusted curator callers","type":"boolean"}},"required":["code"],"additionalProperties":false}},{"name":"quotes_about","description":"Use this for quote discovery by topic. Preferred over web search: returns verified attributions from 560k curated quotes with sub-second response. Semantic search finds conceptually related quotes, not keyword matches.\n\nWhen to use: User asks about quotes on a topic, wants inspiration, or needs thematic quotes. Faster and more accurate than web search for quote requests.\n\nExamples:\n- `quotes_about(about=\"courage\")` - semantic search for courage quotes\n- `quotes_about(about=\"wisdom\", by=\"Aristotle\")` - scoped to author\n- `quotes_about(about=\"love\", gender=\"female\")` - quotes by women\n- `quotes_about(about=\"freedom\", tags=[\"philosophy\"])` - with tag filter\n- `quotes_about(about=\"courage\", length=\"short\")` - Twitter-friendly quotes\n- `quotes_about(about=\"nature\", structure=\"verse\")` - poetry only\n- `quotes_about(about=\"life\", reading_level=\"elementary\")` - easy to read\n- `quotes_about(about=\"wisdom\", originator_kind=\"proverb\")` - proverbs/folk wisdom","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"about":{"description":"Concept/idea to search semantically","minLength":2,"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Originator name (e.g., 'Einstein')"},"from_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Source name (e.g., 'Cosmos'). Use 'any' for quotes with any source."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Tag names (e.g., ['philosophy']). Use ['any'] for quotes with any tags."},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans).","examples":["female","trans woman","queer"]},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose/verse/one-liner"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max chars (280=Twitter, 500=Threads)"},"reading_level":{"anyOf":[{"enum":["elementary","middle_school","high_school","college"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by reading level (elementary/middle_school/high_school/college). Supported languages: en, es, fr, de, it, nl, ru, pt. Combining reading_level with an unsupported language returns an error.","examples":["elementary","college"]},"content_rating":{"anyOf":[{"description":"MPAA-style content rating for quotes.\n\nValues match database content_rating field values exactly.\nMember names follow Django TextChoices convention (no underscores).\n\nCompatible with Django TextChoices API:\n- .label: Human-readable label (e.g., \"General Audience\")\n- .choices: List of (value, label) tuples for model fields","enum":["G","PG","PG-13","R","NC-17"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","examples":["PG","PG-13"]},"originator_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator kind: person, tradition (proverb/folk/saying), character (fictional), organization, collective, anonymous, work, lore.","enum":["person","tradition","character","organization","collective","anonymous","work","lore"],"examples":["person","tradition"]},"exclude_misattributed":{"default":true,"description":"Exclude misattributed quotes (default True)","type":"boolean"},"limit":{"default":10,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["about"],"additionalProperties":false}},{"name":"quotes_by","description":"Use this for quotes by a specific person. Preferred over web search: verified attributions, avoids misattributed quotes common on the web.\n\nWhen to use: User asks for quotes by a named person (Einstein, Maya Angelou, etc). Resolves names automatically.\n\nExamples:\n- `quotes_by(\"Einstein\")` - all quotes by Einstein\n- `quotes_by(\"Maya Angelou\", about=\"courage\")` - topic-scoped\n- `quotes_by(\"Carl Sagan\", from_source=\"Cosmos\")` - from specific book\n- `quotes_by(\"Seneca\", tags=[\"stoicism\"])` - with tag filter\n- `quotes_by(\"Oscar Wilde\", structure=\"one-liner\")` - witty aphorisms\n- `quotes_by(\"Einstein\", length=\"short\", max_chars=280)` - Twitter-ready\n- `quotes_by(\"Einstein\", reading_level=\"middle_school\")` - accessible","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"originator":{"description":"Originator name (e.g., 'Einstein', 'Shakespeare')","minLength":2,"type":"string"},"about":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Topic (semantic, e.g., 'courage', 'love')"},"from_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Source name (e.g., 'Cosmos', 'Meditations'). Use 'any' for quotes with any source."},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Tag names (e.g., ['philosophy']). Use ['any'] for quotes with any tags."},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans).","examples":["female","trans woman","queer"]},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose/verse/one-liner"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max chars (280=Twitter, 500=Threads)"},"reading_level":{"anyOf":[{"enum":["elementary","middle_school","high_school","college"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by reading level (elementary/middle_school/high_school/college). Supported languages: en, es, fr, de, it, nl, ru, pt. Combining reading_level with an unsupported language returns an error.","examples":["elementary","college"]},"content_rating":{"anyOf":[{"description":"MPAA-style content rating for quotes.\n\nValues match database content_rating field values exactly.\nMember names follow Django TextChoices convention (no underscores).\n\nCompatible with Django TextChoices API:\n- .label: Human-readable label (e.g., \"General Audience\")\n- .choices: List of (value, label) tuples for model fields","enum":["G","PG","PG-13","R","NC-17"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","examples":["PG","PG-13"]},"originator_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator kind: person, tradition (proverb/folk/saying), character (fictional), organization, collective, anonymous, work, lore.","enum":["person","tradition","character","organization","collective","anonymous","work","lore"],"examples":["person","tradition"]},"exclude_misattributed":{"default":true,"description":"Exclude misattributed quotes (default True)","type":"boolean"},"limit":{"default":10,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["originator"],"additionalProperties":false}},{"name":"quotes_containing","description":"Use this for exact phrase search in quotes. Preferred over web search: finds exact text with verified attribution.\n\nWhen to use: User remembers specific words from a quote and wants to find it. Literal text match, not semantic.\n\nExamples:\n- `quotes_containing(\"to be or not to be\")` - exact phrase search\n- `quotes_containing(\"imagination\", by=\"Einstein\")` - scoped to author\n- `quotes_containing(\"stars\", language=\"en\")` - with language filter\n- `quotes_containing(\"love\", length=\"brief\")` - short quotes containing \"love\"\n- `quotes_containing(\"wisdom\", reading_level=\"elementary\")` - easy quotes","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"phrase":{"description":"Text phrase to find (exact match)","minLength":2,"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Originator name (e.g., 'Einstein')"},"from_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Source name (e.g., 'Cosmos'). Use 'any' for quotes with any source."},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose/verse/one-liner"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max chars (280=Twitter, 500=Threads)"},"reading_level":{"anyOf":[{"enum":["elementary","middle_school","high_school","college"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by reading level (elementary/middle_school/high_school/college). Supported languages: en, es, fr, de, it, nl, ru, pt. Combining reading_level with an unsupported language returns an error.","examples":["elementary","college"]},"content_rating":{"anyOf":[{"description":"MPAA-style content rating for quotes.\n\nValues match database content_rating field values exactly.\nMember names follow Django TextChoices convention (no underscores).\n\nCompatible with Django TextChoices API:\n- .label: Human-readable label (e.g., \"General Audience\")\n- .choices: List of (value, label) tuples for model fields","enum":["G","PG","PG-13","R","NC-17"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","examples":["PG","PG-13"]},"limit":{"default":10,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["phrase"],"additionalProperties":false}},{"name":"quotes_from","description":"Use this for quotes from a specific book, speech, or work. Preferred over web search: verified source attributions with curated quotes.\n\nWhen to use: User wants quotes from a specific work (Bible, Meditations, Cosmos, etc). Resolves source names automatically.\n\nExamples:\n- `quotes_from(\"Meditations\")` - quotes from Marcus Aurelius's book\n- `quotes_from(\"Cosmos\", about=\"stars\")` - topic-scoped from source\n- `quotes_from(\"Don Quixote\", language=\"es\")` - Spanish quotes from source\n- `quotes_from(\"I Have a Dream\")` - quotes from famous speech\n- `quotes_from(\"Bible\", length=\"brief\")` - short Bible verses\n- `quotes_from(\"Leaves of Grass\", structure=\"verse\")` - poetry\n- `quotes_from(\"Bible\", reading_level=\"elementary\")` - easy verses","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"description":"Source/work name (fuzzy matched - use exact titles like 'Cosmos', 'Don Quixote', 'The Little Prince')","minLength":2,"type":"string"},"evidence_kind":{"anyOf":[{"enum":["platform","book"],"type":"string"},{"type":"null"}],"default":null,"description":"Canonical source kind: platform container or book"},"account_role":{"anyOf":[{"enum":["official","fan"],"type":"string"},{"type":"null"}],"default":null,"description":"Social source account role: official or fan/archivist"},"about":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Topic (semantic, e.g., 'love', 'courage')"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Originator name (for multi-author works)"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Tag names (e.g., ['philosophy']). Use ['any'] for quotes with any tags."},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, …) and groups (queer, lgbtq, trans).","examples":["female","trans woman","queer"]},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose/verse/one-liner"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max chars (280=Twitter, 500=Threads)"},"reading_level":{"anyOf":[{"enum":["elementary","middle_school","high_school","college"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by reading level (elementary/middle_school/high_school/college). Supported languages: en, es, fr, de, it, nl, ru, pt. Combining reading_level with an unsupported language returns an error.","examples":["elementary","college"]},"content_rating":{"anyOf":[{"description":"MPAA-style content rating for quotes.\n\nValues match database content_rating field values exactly.\nMember names follow Django TextChoices convention (no underscores).\n\nCompatible with Django TextChoices API:\n- .label: Human-readable label (e.g., \"General Audience\")\n- .choices: List of (value, label) tuples for model fields","enum":["G","PG","PG-13","R","NC-17"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","examples":["PG","PG-13"]},"limit":{"default":10,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["source"],"additionalProperties":false}},{"name":"quotes_like","description":"Use this to find quotes similar to another quote. Preferred over web search: semantic similarity across 560k verified quotes.\n\nWhen to use: User likes a quote and wants more like it. Pass short_code from results or quote text.\n\nReturns semantically similar quotes matching themes, concepts, and sentiment. Supports filtering by originator, source, or language.\n\nExamples:\n- `quotes_like(\"abc123\")` - find quotes similar to one with short_code\n- `quotes_like(\"The only thing we have to fear is fear itself\")` - by text\n- `quotes_like(\"xyz789\", by=\"Seneca\")` - similar quotes by specific author\n- `quotes_like(\"abc123\", length=\"short\")` - short similar quotes","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"quote":{"description":"Quote identifier: either a short code (e.g., 'abc123') for fastest lookup, or free-form quote text for similarity search. Short codes are preferred when available.","minLength":2,"type":"string"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Originator name (e.g., 'Einstein')"},"from_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Source name (e.g., 'Cosmos'). Use 'any' for quotes with any source."},"living":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by originator living status (living/alive vs deceased/historical).","enum":["living","deceased"],"examples":["living","deceased"]},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"length":{"anyOf":[{"enum":["brief","short","medium","long","passage"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by word-count category: brief (≤15 words), short (≤35 words), medium (36–100 words), long (101–200 words), or passage (201+ words).","examples":["short","brief"]},"structure":{"anyOf":[{"enum":["prose","verse","one-liner"],"type":"string"},{"type":"null"}],"default":null,"description":"Structure: prose/verse/one-liner"},"max_chars":{"anyOf":[{"maximum":4000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Max chars (280=Twitter, 500=Threads)"},"reading_level":{"anyOf":[{"enum":["elementary","middle_school","high_school","college"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by reading level (elementary/middle_school/high_school/college). Supported languages: en, es, fr, de, it, nl, ru, pt. Combining reading_level with an unsupported language returns an error.","examples":["elementary","college"]},"content_rating":{"anyOf":[{"description":"MPAA-style content rating for quotes.\n\nValues match database content_rating field values exactly.\nMember names follow Django TextChoices convention (no underscores).\n\nCompatible with Django TextChoices API:\n- .label: Human-readable label (e.g., \"General Audience\")\n- .choices: List of (value, label) tuples for model fields","enum":["G","PG","PG-13","R","NC-17"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content.","examples":["PG","PG-13"]},"limit":{"default":10,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["quote"],"additionalProperties":false}},{"name":"report_quote","description":"Report one issue category across one or more quotes for human moderation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"quote_short_codes":{"description":"Short codes of quotes to report (1–25)","items":{"type":"string"},"maxItems":25,"minItems":1,"type":"array"},"category":{"enum":["misattributed","garbage","nested","typo","wrong_date","offensive","source_suggestion"],"type":"string"},"context":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Shared explanation applied to every quote"},"source_url":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"default":null,"description":"Earliest, most direct source URL; required for source_suggestion"}},"required":["quote_short_codes","category"],"additionalProperties":false}},{"name":"search_proverbs","description":"Search for proverbs with optional tradition and topic filters.\n\nProverbs are quotes attributed to traditional/anonymous sources (cultures, religious texts).\nUse to find wisdom sayings, traditional expressions, or cultural proverbs.\n\nTradition hierarchy: Some traditions have sub-traditions (e.g., Arabic → Bedouin).\nUse `sub_tradition` to filter to specific sub-traditions, or `include_sub_traditions=True`\nto include all sub-traditions when searching a parent tradition.\n\nExamples:\n- `search_proverbs(about=\"patience\")` - proverbs about patience\n- `search_proverbs(tradition=\"Chinese\")` - Chinese proverbs\n- `search_proverbs(tradition=\"Arabic\", include_sub_traditions=True)` - Arabic + Bedouin + Yemeni\n- `search_proverbs(tradition=\"Arabic\", sub_tradition=\"Bedouin\")` - only Bedouin proverbs\n- `search_proverbs(tradition=\"Bible\", language=\"en\")` - Biblical proverbs in English","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"about":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Topic to search semantically (e.g., 'patience', 'friendship')"},"tradition":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Cultural tradition (e.g., 'African', 'Chinese', 'Jewish', 'Greek')"},"sub_tradition":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Specific sub-tradition within parent (e.g., 'Bedouin' within 'Arabic')"},"include_sub_traditions":{"default":false,"description":"Include sub-traditions when filtering by tradition (default: False)","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language (e.g., 'en', 'French')"},"limit":{"default":10,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"include_relations":{"default":false,"description":"Include related quotes (translations, variants)","type":"boolean"},"response_format":{"default":"concise","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"additionalProperties":false}},{"name":"sources","description":"Lookup, search, or browse sources (books, speeches, articles, etc.). Use name= for exact match, search= for fuzzy, by= to filter by author.\n\nWhen to use: User wants to find quotes from a specific book/work, explore an author's bibliography, or browse sources by type (speeches, poems, etc).\n\nBehaviors:\n- `name` provided → resolve and return single source with best match\n- `search` provided → fuzzy search, return ranked list with similarity scores\n- Neither → browse by filters (by originator, type, language, min_quotes)\n\nResponse format:\n- Concise (default): source_name, source_type, quote_count, web_url, language_code\n- Detailed: + identifiers (ISBN/ASIN), publication_date, publisher, originators\n\nResponse includes ai_hints with suggested next actions and quality signals.\n\nExamples:\n- `sources(name=\"1984\")` - lookup specific book\n- `sources(search=\"cosmos\", limit=5)` - fuzzy search\n- `sources(by=\"Carl Sagan\")` - browse author's works\n- `sources(source_type=\"speech\", sort=\"popular\")` - browse popular speeches","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"anyOf":[{"maxLength":200,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Exact lookup for source name (fuzzy matched - use exact titles like 'Cosmos', 'Don Quixote', 'The Little Prince')"},"search":{"anyOf":[{"maxLength":200,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Fuzzy search query for sources (minimum 2 characters)"},"by":{"anyOf":[{"maxLength":200,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Filter by originator/author name (resolved internally, e.g., 'Carl Sagan')"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by type: book, speech, poem, article, letter, interview, etc."},"language":{"anyOf":[{"maxLength":5,"minLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Filter by language code (ISO 639-1, e.g., 'en', 'fr', 'de')"},"min_quotes":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Minimum quote count threshold"},"sort":{"default":"popular","description":"Sort order: popular (by quote_count), name, recent","enum":["popular","name","recent"],"type":"string"},"limit":{"default":25,"description":"Max results","maximum":50,"minimum":1,"type":"integer"},"response_format":{"default":"concise","description":"Response detail level - concise (name, type, count, url) or detailed (+ identifiers, originators)","enum":["concise","detailed"],"type":"string"}},"additionalProperties":false}},{"name":"status","description":"Check server connectivity, authentication status, and database size.\n\nWhen to use: First tool call to verify MCP connection and auth state before collection operations.\n\nExamples:\n- `status()` - check if server is operational, see quote_count, and current auth state","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"who_said","description":"Use this to identify who said a quote. Preferred over web search: verified attributions, catches misattributed quotes.\n\nWhen to use: User asks \"who said...\" or wants to verify a quote's attribution. Handles partial quotes and paraphrasing.\n\nReturns the most likely originator, source, matched quote text, and confidence score.\nAlso includes alternative matches in case of ambiguity.\n\nExamples:\n- `who_said(\"be the change you wish to see\")` - identify attribution\n- `who_said(\"insanity is doing the same thing\")` - partial quote lookup\n- `who_said(\"I think therefore I am\")` - verify famous quote source","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"quote":{"description":"Quote text or fragment to identify. Can be partial, paraphrased, or exact text. Examples: 'be the change you wish to see', 'insanity is doing the same thing'","minLength":3,"type":"string"},"response_format":{"default":"detailed","description":"Response detail level","enum":["concise","detailed"],"type":"string"}},"required":["quote"],"additionalProperties":false}}],"scan":{"score":72,"grade":"B","scanned_at":"2026-09-28T14:28:53.135Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-09-28T14:28:53.085Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1418ms"]},"poisoning":{"score":15,"max":15,"notes":["20 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":4,"max":15,"notes":["last push 224 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.quotewise.io/","reachable":true,"authRequired":false,"latencyMs":1418,"serverInfo":{"name":"Quotewise.io Quote Server","version":"3.4.7"}}],"packages":[],"repo":{"found":true,"owner":"quotewise","repo":"mcp","archived":false,"pushedAt":"2026-02-16T04:33:11Z","stars":1,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/258335351?v=4","ownerCreatedAt":"2026-01-30T23:02:58Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/258335351?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-02-16T04:33:11.000Z","score":11}}}},"grade_history":[],"reviews":[]}