A locally-hosted fantasy-scribe AI that grounds D&D lore answers in your campaign documents.
Three well-named, read-only tools with clear descriptions and complete input schemas. ask_lore and search_lore have strong, action-oriented names and detailed descriptions (120 - 180 chars). All parameters are typed and described. However, output schemas are not documented in the visible code, LLMs cannot predict response structure. Error handling is present (isError flag) but lacks recovery guidance. No tool annotations (readOnlyHint) despite all being read-only. Composition is sound: ask_lore generates answers; search_lore retrieves without generation; list_sources discovers corpus structure. Parameter validation (str/int helpers) is defensive. Missing: documented output schemas, error categorization, and tool annotations.
Ask a question about the campaign and get an answer grounded in the loaded lore, with citations to the source documents. Use this when you want an answer; use search_lore when you would rather read the sources yourself.
What the corpus contains.
Find which lore documents and DM clarifications match a query, without generating an answer. Returns document names and matching clarifications so a caller can decide what to read. Costs no model tokens.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). ask_lore and search_lore return ToolResult with content array, but downstream field names (e.g., citation format, clarification structure) are invisible to the agent.
Error responses lack recovery guidance. isError flag signals failure, but no actionable next steps. E.g., 'Question refused' does not tell the LLM why or what to try instead.
No tool annotations. All three tools are read-only and idempotent, but readOnlyHint is absent. Agents cannot infer safety without explicit hints.
list_sources description is generic ('What the corpus contains'). Does not explain when to call it, what structure it reveals, or how to use results downstream.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 82 | <=2025-11-25 | v2 |
search_lore limit parameter (1 - 25, default 5) lacks rationale in description. Why 25? Why default 5? Agents benefit from understanding the constraint.