Exposes the Tiro reading library to Claude Desktop and Claude Code via MCP, enabling semantic search, filtering, and article management.
Single tool 'search_articles' has a well-structured schema with 11 parameters, all typed and described. Naming follows verb_noun convention (search_articles). Description is 194 chars, explaining semantic search, filters, and default behavior. However, output schema is not documented, the response structure is not visible in the source. Parameter descriptions are adequate but lack format constraints (e.g., date_from/date_to state 'YYYY-MM-DD format' but no regex or validation guidance). No error handling guidance is visible. The tool is read-only (good), but lacks idempotent/destructive annotations. Overall: solid foundation, but incomplete output documentation and missing error recovery patterns prevent a higher score.
Search the reading library with optional filters. If query is provided, searches by semantic similarity then applies filters. If query is empty, does a SQL-only filtered search. Filters: author, source (name/domain), tag, ai_tier (must-read/summary-enough/discard), is_unread, is_vip, rating_min (-1/1/2), date_from/date_to (YYYY-MM-DD), ingestion_method (manual/extension/imap/api).
Output schema not documented. Response structure (fields, types, pagination) is not visible in source code. LLMs cannot plan downstream operations or extract required data without knowing what fields to expect.
No error handling guidance. Tool description does not explain what happens on invalid filters, empty results, or database errors. LLMs have no recovery path if a call fails.
Missing tool annotations. No readOnlyHint, destructiveHint, or idempotentHint declared. Although search_articles is read-only, explicit annotation helps clients optimize caching and retry logic.
Parameter constraints lack formal validation rules. date_from/date_to mention 'YYYY-MM-DD format' in text but no regex pattern or minLength/maxLength in schema. rating_min lists valid values (-1/1/2) in description but not as enum. LLMs cannot reliably infer constraints from prose.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No pagination guidance in tool description. max_results defaults to 20, but no mention of whether results are paginated, how to fetch next page, or total count. Large result sets could exhaust context.