MCP 서버

Quotewise

io.github.quotewise/mcp
미디어 및 콘텐츠 검색 및 리서치 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Searches a large curated quote collection by meaning, wording, author, source, proverb tradition, and similarity, with attribution and collection tools.

cite_quote
Cite quote
Render a quote citation for AI assistants.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['quote'], 'properties': {'quote': {'type': 'string', 'minLength': 3, 'description': 'Quote short code or supported legacy identifier'}, 'style': {'type': 'string', 'default': 'casual', 'description': 'Citation style: casual, mla, chicago, apa, csl-json, or all'}}, 'additionalProperties': False}
collection
Manage quote collections
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. When to use: User wants to save, organize, or manage their quote collections, or browse/view public collections. Examples: - `collection(action="browse", tab="featured")` - browse public collections - `collection(action="public_detail", username="curator", slug="favorites")` - view public collection - `collection(action="shared_detail", token="abc123")` - view shared collection - `collection(action="collect_from_public", username="curator", slug="favorites", quote_code="xyz")` - collect quote
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['action'], 'properties': {'tab': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Browse tab: featured, recent, or popular'}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Collection name/slug (required for create/get/update/delete)'}, 'page': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Page number'}, 'slug': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Collection slug for public_detail/system_detail/collect_from_public'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Max results (list action)'}, 'token': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Share token for shared_detail'}, 'action': {'enum': ['create', 'get', 'update', 'delete', 'list', 'browse', 'public_detail', 'shared_detail', 'system_detail', 'collect_from_public'], 'type': 'string', 'description': 'Collection operation'}, 'username': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Username for public_detail/collect_from_public'}, 'page_size': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Items per page'}, 'quote_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Quote short_code for collect_from_public'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Collection description (used for create/update)'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
collection_quotes
Manage quotes in collections
Manage quotes within a collection: add, remove, list, or public_list. Auth required for add/remove/list. public_list is unauthenticated. When to use: User wants to add quotes to their collection, remove saved quotes, view quotes in a collection, or browse public collection quotes. Examples: - `collection_quotes(action="add", collection="favorites", quote="abc123")` - add quote - `collection_quotes(action="list", collection="favorites")` - list quotes in collection - `collection_quotes(action="public_list", username="curator", slug="favorites")` - view public collection quotes - `collection_quotes(action="public_list", token="abc123")` - view shared collection quotes
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['action'], 'properties': {'by': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Originator name (e.g., 'Einstein')"}, 'page': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'Page number for pagination'}, 'slug': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Collection slug for public_list lookup'}, 'about': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Semantic search within collection (e.g., 'courage'); requires a single named collection (not collection='all' â\x80\x94 use quotes_about for global search)"}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Max results (list action)'}, 'notes': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Private notes for the quote (used with add action)'}, 'quote': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Quote short_code or ID (required for add/remove actions)'}, 'token': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Share token for public_list lookup'}, 'action': {'enum': ['add', 'remove', 'list', 'public_list'], 'type': 'string', 'description': 'Quote operation: add, remove, list, or public_list'}, 'gender': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['female', 'trans woman', 'queer'], 'description': 'Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, â\x80¦) and groups (queer, lgbtq, trans).'}, 'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'framing': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Curator editorial framing for the quote (used with add action)'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'username': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Username for public_list lookup'}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Max chars (280=Twitter, 500=Threads)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose/verse/one-liner'}, 'collection': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Collection name/slug identifier. Use 'all' to search across all collections (not combinable with 'about' â\x80\x94 semantic search requires a single named collection)."}, 'circumstance': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Per-collection circumstance override (used with add action)'}, 'reading_level': {'anyOf': [{'enum': ['elementary', 'middle_school', 'high_school', 'college'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['elementary', 'college'], '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.'}, 'content_rating': {'anyOf': [{'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', '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'}, {'type': 'null'}], 'default': None, 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
flag_content
Flag content for moderation
Flag content for moderation review. Authentication is required. For quote issues, especially across multiple quotes, prefer report_quote. Use this tool for originator, source, and sighting flags. Provide exactly ONE entity identifier. Examples: - `flag_content(flag_type="misattributed", reason="Quote is by Mark Twain", quote_ref="abc123")` - report wrong attribution - `flag_content(flag_type="broken_link", reason="404 error", sighting_id=12345)` - report dead link
입력 스키마
{'type': 'object', 'required': ['flag_type', 'reason'], 'properties': {'reason': {'type': 'string', 'maxLength': 2000, 'minLength': 5, 'description': 'Explanation of the issue (required)'}, 'flag_type': {'enum': ['spam', 'misattributed', 'typo', 'nested', 'broken_link'], 'type': 'string', 'description': 'Type of flag: spam (advertising/promotional), misattributed (wrong author), typo (text error), nested (quote within quote), broken_link (dead URL)'}, 'quote_ref': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Quote short_code (6-char identifier, e.g., 'abc123')"}, 'source_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Source database ID'}, 'sighting_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'QuoteSighting database ID (for broken_link flags)'}, 'evidence_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'URL supporting the flag (e.g., QuoteInvestigator link)'}, 'originator_slug': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Originator slug (e.g., 'albert-einstein')"}}, 'additionalProperties': False}
originators
Search or browse originators
Lookup, search, or browse originators. Handles people, proverbs, anonymous sources, and institutions. Use name= for exact match, search= for fuzzy, neither for browsing. When to use: User asks about a person/author, wants to find who said something, or needs to browse by category (poets, philosophers, etc). Behaviors: - `name` provided → resolve and return single originator details - `search` provided → fuzzy search, return ranked list (optionally filtered by category tags) - Neither → browse by filters (popular, language, min_quotes, category tags, etc.) Category tags filter by originator type (e.g., ["Poets", "Politicians", "Catholic Bishops"]) - works with all modes. Gender filter accepts natural language (e.g., "female", "women", "queer", "trans") - resolved to Wikidata Q-IDs internally. Response format: - Concise (default): slug, full_name, sort_name, quote_count, descriptions_i18n, web_url - Detailed: + biography (500 char excerpt), confidence_tier, similarity_score Response includes ai_hints with suggested next actions and quality signals for agent workflows. Date 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. Examples: - `originators(name="Einstein")` - exact lookup - `originators(search="Shake")` - fuzzy search for "Shakespeare" - `originators(tags=["Poets"], gender="female")` - browse female poets - `originators(sort="popular", limit=10)` - top 10 by quote count - `originators(born_on="04-20")` - originators born April 20 (any year) - `originators(born_year_gte=-500, born_year_lte=-300)` - originators born between 500 BCE and 300 BCE inclusive
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'name': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': 'Exact lookup for originator name (resolved internally) â\x86\x92 single result'}, 'sort': {'enum': ['popular', 'name', 'recent'], 'type': 'string', 'default': 'popular', 'description': 'Sort order for results when browsing (not using name/search)'}, 'tags': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Filter by originator category tags (e.g., ['Poets', 'Politicians', 'Catholic Bishops'])"}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'gender': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['female', 'trans woman', 'queer'], 'description': 'Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, â\x80¦) and groups (queer, lgbtq, trans).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'search': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': 'Fuzzy search query for originators (minimum 2 characters) â\x86\x92 multiple results'}, 'born_on': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, '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': None, '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'."}, 'language': {'anyOf': [{'type': 'string', 'maxLength': 5, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': "Filter by quote language (ISO 639-1 code, e.g., 'en', 'fr', 'de')"}, 'min_quotes': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Minimum quote count threshold'}, 'born_year_gte': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, '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 â\x80\x94 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': None, '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': None, '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': None, 'description': 'Upper-bound filter on death-date year (inclusive). Same semantics as born_year_lte, applied to death_date / death_date_edtf.'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level - concise (slug, name, quote_count, descriptions_i18n, web_url) or detailed (+ biography excerpt, confidence_tier, similarity_score)'}}, 'additionalProperties': False}
originators_like
Find similar originators
Find originators similar to the given one using vector similarity (quote themes). Use after finding an author to discover related thinkers. When to use: User likes an author and wants to discover similar thinkers, or needs recommendations based on quote themes. Returns originators with similarity scores (0-100%). Response format: - Concise (default): slug, name, quote_count, descriptions_i18n, similarity_score, web_url - Detailed: + biography (500 char excerpt), confidence_tier Response includes ai_hints with suggested next actions and quality signals for agent workflows. Examples: - `originators_like(originator="Marcus Aurelius")` - similar philosophers - `originators_like(originator="Oscar Wilde")` - similar wits - `originators_like(originator="African Proverbs")` - similar proverb collections
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['originator'], 'properties': {'limit': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1, 'description': 'Max results'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'originator': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'Originator name to find similar ones for (resolved internally)'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level - concise (slug, name, quote_count, descriptions_i18n, web_url) or detailed (+ biography excerpt, confidence_tier, similarity_score)'}}, 'additionalProperties': False}
propose_edit
Propose content edit
Propose an edit to a quote. Requires authentication. When 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. Examples: - `propose_edit(edit_type="text", quote_ref="abc123", new_text="Corrected spelling")` - fix typo - `propose_edit(edit_type="tag_add", quote_ref="abc123", tag_text="philosophy")` - add tag - `propose_edit(edit_type="attribution", quote_ref="abc123", disputed=True)` - mark disputed
입력 스키마
{'type': 'object', 'required': ['edit_type', 'quote_ref'], 'properties': {'disputed': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None, 'description': 'Mark attribution as disputed (for attribution edits)'}, 'new_text': {'anyOf': [{'type': 'string', 'maxLength': 10000}, {'type': 'null'}], 'default': None, 'description': 'Corrected quote text (required for text edits)'}, 'tag_text': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}], 'default': None, 'description': 'Tag to add/remove (required for tag edits)'}, 'edit_type': {'enum': ['text', 'tag_add', 'tag_remove', 'attribution'], 'type': 'string', 'description': 'Type of edit: text (fix quote text), tag_add (add tag), tag_remove (remove tag), attribution (fix attribution)'}, 'quote_ref': {'type': 'string', 'description': 'Quote short_code (6-char identifier, required)'}, 'originator_id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'New originator ID (for attribution edits)'}, 'attribution_notes': {'anyOf': [{'type': 'string', 'maxLength': 2000}, {'type': 'null'}], 'default': None, 'description': 'Notes about attribution (for attribution edits)'}}, 'additionalProperties': False}
quote
Get quote details by code
Use this to get full details for a quote. Returns complete attribution, sources, and metadata. When to use: User wants more details about a quote from search results. Use the short_code from previous results. Examples: - `quote("abc123")` - get details for quote with short_code - `quote("xyz789", response_format="detailed")` - with full metadata - `quote("abc123", include_relations=True)` - with translations and variants
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string', 'minLength': 3, 'description': "Quote code (e.g., 'abc123')"}, 'include': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Include extra data: 'collections'"}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}, 'include_relations': {'type': 'boolean', 'default': False, 'description': 'Include related quotes (translations, variants, etc.)'}}, 'additionalProperties': False}
quote_random
Discover a random quote
Return a random quote matching the specified filters. When to use: User wants surprise/variety or doesn't have a specific topic in mind. By default, returns family-friendly content (G, PG, PG-13). Request NC-17 explicitly for unrestricted content.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language code (e.g., 'en', 'es', 'de')"}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Maximum characters (e.g., 280 for Twitter)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose (single line), verse (multi-line), one-liner (single sentence)'}, 'content_rating': {'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', 'default': 'PG-13', 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
quote_relations
Get quote relations
Get relations for a quote, grouped by type and direction. Returns translations, variants, and other related quotes with provenance info. Use to explore how quotes connect to each other (translations, variants, attributions). Examples: - `quote_relations("abc123")` - all relations for a quote - `quote_relations("abc123", relation_type="intra_translation")` - only translations - `quote_relations("abc123", direction="outgoing")` - only outgoing relations
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string', 'minLength': 3, 'description': "Quote short_code (e.g., 'abc123')"}, 'direction': {'anyOf': [{'enum': ['outgoing', 'incoming', 'both'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by direction: outgoing, incoming, or both'}, 'include_audit': {'type': 'boolean', 'default': False, 'description': 'Include audit/non-displayable relation edges for trusted curator callers'}, 'relation_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by relation type: intra_translation, cross_translation, variant, revision_of, misattributed_from, semantic_equivalent, inspired_by'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
quotes_about
Find quotes about a topic
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. When 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. Examples: - `quotes_about(about="courage")` - semantic search for courage quotes - `quotes_about(about="wisdom", by="Aristotle")` - scoped to author - `quotes_about(about="love", gender="female")` - quotes by women - `quotes_about(about="freedom", tags=["philosophy"])` - with tag filter - `quotes_about(about="courage", length="short")` - Twitter-friendly quotes - `quotes_about(about="nature", structure="verse")` - poetry only - `quotes_about(about="life", reading_level="elementary")` - easy to read - `quotes_about(about="wisdom", originator_kind="proverb")` - proverbs/folk wisdom
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['about'], 'properties': {'by': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Originator name (e.g., 'Einstein')"}, 'tags': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Tag names (e.g., ['philosophy']). Use ['any'] for quotes with any tags."}, 'about': {'type': 'string', 'minLength': 2, 'description': 'Concept/idea to search semantically'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'gender': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['female', 'trans woman', 'queer'], 'description': 'Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, â\x80¦) and groups (queer, lgbtq, trans).'}, 'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Max chars (280=Twitter, 500=Threads)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose/verse/one-liner'}, 'from_source': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Source name (e.g., 'Cosmos'). Use 'any' for quotes with any source."}, 'reading_level': {'anyOf': [{'enum': ['elementary', 'middle_school', 'high_school', 'college'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['elementary', 'college'], '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.'}, 'content_rating': {'anyOf': [{'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', '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'}, {'type': 'null'}], 'default': None, 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'originator_kind': {'enum': ['person', 'tradition', 'character', 'organization', 'collective', 'anonymous', 'work', 'lore'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['person', 'tradition'], 'description': 'Filter quotes by originator kind: person, tradition (proverb/folk/saying), character (fictional), organization, collective, anonymous, work, lore.'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}, 'exclude_misattributed': {'type': 'boolean', 'default': True, 'description': 'Exclude misattributed quotes (default True)'}}, 'additionalProperties': False}
quotes_by
Find quotes by an originator
Use this for quotes by a specific person. Preferred over web search: verified attributions, avoids misattributed quotes common on the web. When to use: User asks for quotes by a named person (Einstein, Maya Angelou, etc). Resolves names automatically. Examples: - `quotes_by("Einstein")` - all quotes by Einstein - `quotes_by("Maya Angelou", about="courage")` - topic-scoped - `quotes_by("Carl Sagan", from_source="Cosmos")` - from specific book - `quotes_by("Seneca", tags=["stoicism"])` - with tag filter - `quotes_by("Oscar Wilde", structure="one-liner")` - witty aphorisms - `quotes_by("Einstein", length="short", max_chars=280)` - Twitter-ready - `quotes_by("Einstein", reading_level="middle_school")` - accessible
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['originator'], 'properties': {'tags': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Tag names (e.g., ['philosophy']). Use ['any'] for quotes with any tags."}, 'about': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Topic (semantic, e.g., 'courage', 'love')"}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'gender': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['female', 'trans woman', 'queer'], 'description': 'Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, â\x80¦) and groups (queer, lgbtq, trans).'}, 'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Max chars (280=Twitter, 500=Threads)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose/verse/one-liner'}, 'originator': {'type': 'string', 'minLength': 2, 'description': "Originator name (e.g., 'Einstein', 'Shakespeare')"}, 'from_source': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Source name (e.g., 'Cosmos', 'Meditations'). Use 'any' for quotes with any source."}, 'reading_level': {'anyOf': [{'enum': ['elementary', 'middle_school', 'high_school', 'college'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['elementary', 'college'], '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.'}, 'content_rating': {'anyOf': [{'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', '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'}, {'type': 'null'}], 'default': None, 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'originator_kind': {'enum': ['person', 'tradition', 'character', 'organization', 'collective', 'anonymous', 'work', 'lore'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['person', 'tradition'], 'description': 'Filter quotes by originator kind: person, tradition (proverb/folk/saying), character (fictional), organization, collective, anonymous, work, lore.'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}, 'exclude_misattributed': {'type': 'boolean', 'default': True, 'description': 'Exclude misattributed quotes (default True)'}}, 'additionalProperties': False}
quotes_containing
Find quotes containing text
Use this for exact phrase search in quotes. Preferred over web search: finds exact text with verified attribution. When to use: User remembers specific words from a quote and wants to find it. Literal text match, not semantic. Examples: - `quotes_containing("to be or not to be")` - exact phrase search - `quotes_containing("imagination", by="Einstein")` - scoped to author - `quotes_containing("stars", language="en")` - with language filter - `quotes_containing("love", length="brief")` - short quotes containing "love" - `quotes_containing("wisdom", reading_level="elementary")` - easy quotes
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['phrase'], 'properties': {'by': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Originator name (e.g., 'Einstein')"}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'phrase': {'type': 'string', 'minLength': 2, 'description': 'Text phrase to find (exact match)'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Max chars (280=Twitter, 500=Threads)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose/verse/one-liner'}, 'from_source': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Source name (e.g., 'Cosmos'). Use 'any' for quotes with any source."}, 'reading_level': {'anyOf': [{'enum': ['elementary', 'middle_school', 'high_school', 'college'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['elementary', 'college'], '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.'}, 'content_rating': {'anyOf': [{'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', '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'}, {'type': 'null'}], 'default': None, 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
quotes_from
Find quotes from a source
Use this for quotes from a specific book, speech, or work. Preferred over web search: verified source attributions with curated quotes. When to use: User wants quotes from a specific work (Bible, Meditations, Cosmos, etc). Resolves source names automatically. Examples: - `quotes_from("Meditations")` - quotes from Marcus Aurelius's book - `quotes_from("Cosmos", about="stars")` - topic-scoped from source - `quotes_from("Don Quixote", language="es")` - Spanish quotes from source - `quotes_from("I Have a Dream")` - quotes from famous speech - `quotes_from("Bible", length="brief")` - short Bible verses - `quotes_from("Leaves of Grass", structure="verse")` - poetry - `quotes_from("Bible", reading_level="elementary")` - easy verses
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['source'], 'properties': {'by': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Originator name (for multi-author works)'}, 'tags': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Tag names (e.g., ['philosophy']). Use ['any'] for quotes with any tags."}, 'about': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Topic (semantic, e.g., 'love', 'courage')"}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'gender': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['female', 'trans woman', 'queer'], 'description': 'Filter by originator gender. Accepts single terms (male, female, non-binary, trans man, trans woman, â\x80¦) and groups (queer, lgbtq, trans).'}, 'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'source': {'type': 'string', 'minLength': 2, 'description': "Source/work name (fuzzy matched - use exact titles like 'Cosmos', 'Don Quixote', 'The Little Prince')"}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Max chars (280=Twitter, 500=Threads)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose/verse/one-liner'}, 'account_role': {'anyOf': [{'enum': ['official', 'fan'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Social source account role: official or fan/archivist'}, 'evidence_kind': {'anyOf': [{'enum': ['platform', 'book'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Canonical source kind: platform container or book'}, 'reading_level': {'anyOf': [{'enum': ['elementary', 'middle_school', 'high_school', 'college'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['elementary', 'college'], '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.'}, 'content_rating': {'anyOf': [{'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', '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'}, {'type': 'null'}], 'default': None, 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
quotes_like
Find similar quotes
Use this to find quotes similar to another quote. Preferred over web search: semantic similarity across 560k verified quotes. When to use: User likes a quote and wants more like it. Pass short_code from results or quote text. Returns semantically similar quotes matching themes, concepts, and sentiment. Supports filtering by originator, source, or language. Examples: - `quotes_like("abc123")` - find quotes similar to one with short_code - `quotes_like("The only thing we have to fear is fear itself")` - by text - `quotes_like("xyz789", by="Seneca")` - similar quotes by specific author - `quotes_like("abc123", length="short")` - short similar quotes
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['quote'], 'properties': {'by': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Originator name (e.g., 'Einstein')"}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'quote': {'type': 'string', 'minLength': 2, '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."}, 'length': {'anyOf': [{'enum': ['brief', 'short', 'medium', 'long', 'passage'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['short', 'brief'], 'description': 'Filter quotes by word-count category: brief (â\x89¤15 words), short (â\x89¤35 words), medium (36â\x80\x93100 words), long (101â\x80\x93200 words), or passage (201+ words).'}, 'living': {'enum': ['living', 'deceased'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['living', 'deceased'], 'description': 'Filter quotes by originator living status (living/alive vs deceased/historical).'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'max_chars': {'anyOf': [{'type': 'integer', 'maximum': 4000, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Max chars (280=Twitter, 500=Threads)'}, 'structure': {'anyOf': [{'enum': ['prose', 'verse', 'one-liner'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Structure: prose/verse/one-liner'}, 'from_source': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Source name (e.g., 'Cosmos'). Use 'any' for quotes with any source."}, 'reading_level': {'anyOf': [{'enum': ['elementary', 'middle_school', 'high_school', 'college'], 'type': 'string'}, {'type': 'null'}], 'default': None, 'examples': ['elementary', 'college'], '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.'}, 'content_rating': {'anyOf': [{'enum': ['G', 'PG', 'PG-13', 'R', 'NC-17'], 'type': 'string', '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'}, {'type': 'null'}], 'default': None, 'examples': ['PG', 'PG-13'], 'description': "Filter quotes by maximum MPAA-style content rating. Cumulative: requesting 'PG' includes G and PG content."}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}}, 'additionalProperties': False}
report_quote
Report quote issues
Report one issue category across one or more quotes for human moderation.
입력 스키마
{'type': 'object', 'required': ['quote_short_codes', 'category'], 'properties': {'context': {'anyOf': [{'type': 'string', 'maxLength': 1000}, {'type': 'null'}], 'default': None, 'description': 'Shared explanation applied to every quote'}, 'category': {'enum': ['misattributed', 'garbage', 'nested', 'typo', 'wrong_date', 'offensive', 'source_suggestion'], 'type': 'string'}, 'source_url': {'anyOf': [{'type': 'string', 'maxLength': 2048}, {'type': 'null'}], 'default': None, 'description': 'Earliest, most direct source URL; required for source_suggestion'}, 'quote_short_codes': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'minItems': 1, 'description': 'Short codes of quotes to report (1â\x80\x9325)'}}, 'additionalProperties': False}
search_proverbs
Search proverbs
Search for proverbs with optional tradition and topic filters. Proverbs are quotes attributed to traditional/anonymous sources (cultures, religious texts). Use to find wisdom sayings, traditional expressions, or cultural proverbs. Tradition hierarchy: Some traditions have sub-traditions (e.g., Arabic → Bedouin). Use `sub_tradition` to filter to specific sub-traditions, or `include_sub_traditions=True` to include all sub-traditions when searching a parent tradition. Examples: - `search_proverbs(about="patience")` - proverbs about patience - `search_proverbs(tradition="Chinese")` - Chinese proverbs - `search_proverbs(tradition="Arabic", include_sub_traditions=True)` - Arabic + Bedouin + Yemeni - `search_proverbs(tradition="Arabic", sub_tradition="Bedouin")` - only Bedouin proverbs - `search_proverbs(tradition="Bible", language="en")` - Biblical proverbs in English
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'about': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Topic to search semantically (e.g., 'patience', 'friendship')"}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'language': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Language (e.g., 'en', 'French')"}, 'tradition': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Cultural tradition (e.g., 'African', 'Chinese', 'Jewish', 'Greek')"}, 'sub_tradition': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Specific sub-tradition within parent (e.g., 'Bedouin' within 'Arabic')"}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level'}, 'include_relations': {'type': 'boolean', 'default': False, 'description': 'Include related quotes (translations, variants)'}, 'include_sub_traditions': {'type': 'boolean', 'default': False, 'description': 'Include sub-traditions when filtering by tradition (default: False)'}}, 'additionalProperties': False}
sources
Search or browse sources
Lookup, search, or browse sources (books, speeches, articles, etc.). Use name= for exact match, search= for fuzzy, by= to filter by author. When 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). Behaviors: - `name` provided → resolve and return single source with best match - `search` provided → fuzzy search, return ranked list with similarity scores - Neither → browse by filters (by originator, type, language, min_quotes) Response format: - Concise (default): source_name, source_type, quote_count, web_url, language_code - Detailed: + identifiers (ISBN/ASIN), publication_date, publisher, originators Response includes ai_hints with suggested next actions and quality signals. Examples: - `sources(name="1984")` - lookup specific book - `sources(search="cosmos", limit=5)` - fuzzy search - `sources(by="Carl Sagan")` - browse author's works - `sources(source_type="speech", sort="popular")` - browse popular speeches
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'by': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': "Filter by originator/author name (resolved internally, e.g., 'Carl Sagan')"}, 'name': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': "Exact lookup for source name (fuzzy matched - use exact titles like 'Cosmos', 'Don Quixote', 'The Little Prince')"}, 'sort': {'enum': ['popular', 'name', 'recent'], 'type': 'string', 'default': 'popular', 'description': 'Sort order: popular (by quote_count), name, recent'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 50, 'minimum': 1, 'description': 'Max results'}, 'search': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': 'Fuzzy search query for sources (minimum 2 characters)'}, 'language': {'anyOf': [{'type': 'string', 'maxLength': 5, 'minLength': 2}, {'type': 'null'}], 'default': None, 'description': "Filter by language code (ISO 639-1, e.g., 'en', 'fr', 'de')"}, 'min_quotes': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Minimum quote count threshold'}, 'source_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by type: book, speech, poem, article, letter, interview, etc.'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'concise', 'description': 'Response detail level - concise (name, type, count, url) or detailed (+ identifiers, originators)'}}, 'additionalProperties': False}
status
Check server and authentication status
Check server connectivity, authentication status, and database size. When to use: First tool call to verify MCP connection and auth state before collection operations. Examples: - `status()` - check if server is operational, see quote_count, and current auth state
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
who_said
Identify quote attribution
Use this to identify who said a quote. Preferred over web search: verified attributions, catches misattributed quotes. When to use: User asks "who said..." or wants to verify a quote's attribution. Handles partial quotes and paraphrasing. Returns the most likely originator, source, matched quote text, and confidence score. Also includes alternative matches in case of ambiguity. Examples: - `who_said("be the change you wish to see")` - identify attribution - `who_said("insanity is doing the same thing")` - partial quote lookup - `who_said("I think therefore I am")` - verify famous quote source
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['quote'], 'properties': {'quote': {'type': 'string', 'minLength': 3, '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'"}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'default': 'detailed', 'description': 'Response detail level'}}, 'additionalProperties': False}
추가됨
report_quote
2026년 9월 17일 12:49 PM
추가됨
propose_edit
2026년 9월 17일 12:49 PM
추가됨
flag_content
2026년 9월 17일 12:49 PM
추가됨
collection_quotes
2026년 9월 17일 12:49 PM
추가됨
collection
2026년 9월 17일 12:49 PM
추가됨
status
2026년 9월 17일 12:49 PM
추가됨
search_proverbs
2026년 9월 17일 12:49 PM
추가됨
quote_relations
2026년 9월 17일 12:49 PM
추가됨
cite_quote
2026년 9월 17일 12:49 PM
추가됨
sources
2026년 9월 17일 12:49 PM
추가됨
originators_like
2026년 9월 17일 12:49 PM
추가됨
originators
2026년 9월 17일 12:49 PM
추가됨
quote_random
2026년 9월 17일 12:49 PM
추가됨
who_said
2026년 9월 17일 12:49 PM
추가됨
quotes_like
2026년 9월 17일 12:49 PM
추가됨
quote
2026년 9월 17일 12:49 PM
추가됨
quotes_containing
2026년 9월 17일 12:49 PM
추가됨
quotes_by
2026년 9월 17일 12:49 PM
추가됨
quotes_from
2026년 9월 17일 12:49 PM
추가됨
quotes_about
2026년 9월 17일 12:49 PM