This server exhibits significant definition quality gaps across nearly all tools. While naming conventions are generally reasonable (verb-prefixed), descriptions are sparse or generic, input schemas are minimal or absent in source artifacts, and output schemas are not documented. The server implements 13 tools but provides limited parameter descriptions and no structured output documentation. Most tools lack sufficient detail for an LLM to confidently select and invoke them. The codebase shows a Makefile and pyproject.toml but the critical file (mcp_server_standalone.py) is not provided in full, forcing inference of tool definitions from tool metadata alone. This caps per-tool scores significantly.
Tools (13)
add_sourcewritesource verified67/100
Process and add a new PDF source (rulebook or flavor text) to the system.
Output schemas not documented. No visible return type definitions for any tool. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does generate_npc return? Can its output feed into manage_session?).
Sparse descriptions on 'simple getter' tools (get_rulebook_personality, get_character_creation_rules, get_search_stats). Descriptions under 50 characters offer insufficient context. Missing WHEN to use them, WHAT they return, and dependencies.
Add comprehensive output schemas for all 13 tools. Document return types as JSON Schema objects with typed fields and descriptions. Example: search() should return {results: [{id, title, excerpt, source, relevance_score}], total_count, next_cursor}.
Expand descriptions on getter tools. Currently 'Get the personality for a rulebook' is too terse. Improve to: 'Retrieve the personality profile and tone guidelines for a rulebook, used to ensure NPC generation matches the source material's style. Use this before calling generate_npc to set context.'
Split manage_session into 6 separate tools: create_session(campaign_id, session_id), add_session_note(campaign_id, session_id, note_text), set_combat_initiative(campaign_id, session_id, combatants), add_monster(campaign_id, session_id, monster_details), update_monster_hp(campaign_id, session_id, monster_id, hp), get_session(campaign_id, session_id). Each tool should have a single, clear responsibility.
Document character_details parameter schema. In generate_backstory, define: character_details expects {name, class, race, background, level} (all strings). Include examples of valid structures.
Add pagination guidance to search(). Document: 'Results capped at max_results (default 5, max 100). For large searches, use next_cursor parameter (not yet implemented) or increase max_results up to 100. Large result sets degrade LLM reasoning.'
Add error handling descriptions to state-changing tools. Example for add_source: 'If PDF parsing fails, try a different file format or check file size (<50MB recommended). If you see permission error, verify file path and read access.'
Score history
Overall score trend
↑ 5 points across a rubric change (v1 → v2)
43/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
43
2026-07-28+
v2
2026-03-09
F
38
-
v1
source verified
52/100
Get the personality for a rulebook.
get_search_statsread onlysource verified45/100
Get search service statistics
install_content_packwritesource verified53/100
Install a content pack
manage_sessionwritesource verified48/100
Manage game session data
searchread onlysource verified75/100
Search TTRPG source material for rules, lore, etc. with enhanced search capabilities.
manage_session tool combines multiple concerns (start, add_note, set_initiative, add_monster, update_monster_hp, get). A single 'action' enum parameter masks 6 distinct operations with different semantics and side effects. Should split into separate tools: start_session, add_session_note, set_initiative, add_monster, update_monster_hp, get_session.
Parameter descriptions missing context. 'character_details' in generate_backstory is typed as 'object' with no schema, what fields does it expect? No guidance on format. LLMs will guess and fail.
No pagination parameters or result limits documented. search() accepts max_results but offers no cursor/offset, no documentation of what happens with large result sets, and no guidance on realistic limits.
No error handling guidance. Tools provide no recovery hints. If add_source fails because a PDF is invalid, what should the LLM do next? No 'retryable', 'user-fixable', or 'fatal' classification.
Source code artifact incomplete. The critical file mcp_server_standalone.py is referenced but not provided. Tool definitions are inferred from metadata only, not from actual registration code. Cannot verify schema correctness, actual parameter validation, or output structure.
all
Provide full mcp_server_standalone.py source code snippet showing actual tool registration with FastMCP decorators, including parameter validation, output schema, and error handling.
Add per-tool WHEN TO USE guidance in descriptions. Example: 'Call search() with a query when you need rules, lore, or mechanics. Use rulebook parameter to narrow results to a specific source book. Call suggest_completions() first if the user's query is vague.'
Document result limits for tools returning lists (generate_npc, suggest_completions, get_search_stats). Specify: 'Returns up to N items by default. Larger sets are truncated for token efficiency; use pagination or filtering parameters to refine.'
Add parameter constraints in descriptions. Example for max_results: 'Integer, 1 - 100. Defaults to 5. Higher limits increase latency and token cost.'
Include 'Required Permissions' note in tool descriptions where applicable (e.g., add_source might require file system access; manage_session might require campaign ownership).