Strong tool naming (all verb-prefixed), comprehensive descriptions (avg 180 chars, well within 10-1024 range), and complete input schemas with type definitions. All 9 tools have descriptions and parameters are well-documented. However, output schemas are not documented, LLMs cannot predict return structure. No error handling guidance, no enum constraints for categorical parameters (e.g., tag values, verdict types), and no pagination/limit enforcement documented for large result sets. Missing tool annotations (readOnlyHint, idempotentHint). Composition is sound: tools chain well (list_authors → random_quote, search_quotes → check_attribution). No security issues detected (read-only operations, no secrets in params).
Given a quote and (optionally) the author it is claimed to be by, return one of four verdicts: "verified" (genuine, with citation), "misattributed" (no primary source — popular but fake), "paraphrase_of_verified" (popular corruption of a real quote, returns the actual text), or "no_match" (not in corpus). Useful for journalists, researchers, and anyone tired of fake Mark Twain quotes.
Return the full text of an entire act (all scenes within it). Use this to read a full structural unit at once. Returned object contains nested scenes with their speeches and lines.
Return the full text of a chapter from a novel/prose work (all paragraphs in order). Example: author_id="oscar-wilde", work_slug="the-picture-of-dorian-gray", chapter=2 returns the entire chapter where Lord Henry tempts Dorian. Use list_full_text_works to discover which works are chapter-based.
Return the full text of a specific scene from a play (every speech, every line, in order). Example: author_id="william-shakespeare", work_slug="hamlet", act=3, scene=1 returns the entire "To be, or not to be" scene including all of Hamlet's soliloquy and the subsequent dialogue with Ophelia. Useful for context, citation, or close reading.
Return all authors available in the corpus — each entry includes author id (used as input to other tools), display name, birth/death dates, and public-domain status.
Output schemas not documented. LLMs cannot predict return structure (fields, types, pagination). Affects all 9 tools.
No enum constraints for categorical parameters. 'tag' in random_quote lists examples ('wit', 'love', 'misattributed') in description instead of formal enum. 'verdict' values in check_attribution description are free-form text, not constrained.
No error handling guidance. Tools do not document what happens on invalid author_id, missing work_title, or out-of-range act/scene/chapter. LLMs cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List works for which the full text (every scene, speech, and line) is loaded — beyond just the famous-quote excerpts. Use this to discover what is available for deep structural lookup via get_scene and get_act.
Look up quotes by structural address within a work — act/scene for plays, chapter for novels. Example: author_id="william-shakespeare", work_title="Hamlet", act=3, scene=1 returns the "To be, or not to be" line.
Return a random quote from the corpus, optionally filtered by author, fame, verification status, or tag. Each result includes citation: work, year, speaker (for plays/fiction), and source URL.
Search quotes by substring. Matches both canonical text and known popular paraphrases — searching for 'protest' finds Hamlet's 'The lady doth protest too much, methinks' even though the popular form 'Methinks the lady doth protest too much' is what most people remember.
Pagination not documented. search_quotes accepts 'limit' (default 10, max 25) but no offset/cursor or total_count return documented. Large result sets risk context window exhaustion.
No tool annotations. All tools are read-only but lack readOnlyHint in schema. Helps LLMs understand safety and retry semantics.