Personal Kindle reading highlights from 2018-2026. ~7000 highlights from 114 books. Exposes structured markdown files (CATALOG.md + per-book files) for intelligent navigation by Claude. No embeddings or vector search — the LLM reads actual text and reasons over it directly.
Three tools with READ_ONLY risk profile. browse_library and read_book have verbose, instruction-heavy descriptions (500+ chars) that read like prompts rather than tool specs, they coach the LLM on lateral thinking and multi-step workflows instead of stating what the tool does. Input schemas are present but minimal: browse_library has empty input {}, read_book has two params with descriptions but no type constraints (enums, ranges). get_library_stats has no visible schema. Descriptions exceed the 10 - 1024 char guideline (browse_library ~650 chars). No error handling guidance, no output schema documentation, no parameter validation rules. Tool names are verb-noun compliant but descriptions violate the pattern:tool-description baseline (194 chars avg; these are 2 - 3x longer and read as agent instructions, not tool specs).
Browse the compact catalog of all 114 books in the personal Kindle library. ALWAYS call this tool FIRST. Returns CATALOG.md — a compact index (~40K chars) where each book has: a personalized 1-sentence description, semantic tags, and cross-book links. Think LATERALLY when matching books to questions: - "entrepreneurship" → Shoe Dog, Elon Musk, Zero to One, Alibaba, DREAM BIG - "leadership" → Meditations, Principles, Steve Jobs, The Hard Thing - Biographies and narratives are often MORE relevant than self-help books Identify 5-8 relevant books, then call read_book() for each one.
Get statistics about the Kindle highlights library.
Read a book's full file with fingerprint, highlights, and chapter summaries. Each book file contains: semantic fingerprint (what this reader highlighted most, cross-book connections), book summary, chapter summaries, and all highlights organized by chapter. Golden nuggets (large ~4000-word context blocks from the original book) are included only if requested. Call browse_library first to identify which books to read.
Descriptions are instruction-heavy prompts (500 - 650 chars), not tool specs. browse_library and read_book coach the LLM on lateral thinking and multi-step workflows instead of stating WHAT the tool does, WHEN to use it, and WHAT it returns. Violates pattern:tool-description baseline (194 chars avg).
get_library_stats has no visible input schema in source code.
read_book parameters lack type constraints. 'book_title' is a free-form string with no enum, pattern, or length limit. 'include_nuggets' is boolean but no guidance on when nuggets are useful or their cost/benefit. No validation rules in descriptions.
No output schema documented for any tool. LLMs cannot plan downstream calls or extract structured data. browse_library returns 'CATALOG.md' (~40K chars) but no field structure documented. read_book returns book content but no schema for highlights, summaries, or nuggets.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
No error handling guidance. If CATALOG.md is missing, browse_library returns a plain string error. No recovery hints, no categorization (retryable vs fatal), no actionable next steps for the LLM.