A Rust-based MCP server framework with high-level server builder and tool registration SDK. Includes a reference implementation (Promptia Context MCP) for story/narrative context management.
Three tools with complete schemas and basic descriptions, but significant gaps in parameter documentation and error guidance. All tools are READ_ONLY and follow verb_noun naming (get_*, search_*). Schemas are present and properly typed. However, parameter descriptions are entirely missing, LLMs cannot infer what 'limit' controls or why 'query' is needed. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint, etc.). Output structure is wrapped in a custom ContextEnvelope, which is undocumented for LLM consumption.
Get recent episode summaries for a story
Get story metadata, current arc, and summary
Search lore and world settings for a story
Parameter descriptions missing entirely. 'limit' in get_recent_episodes has no description, LLMs cannot infer whether it's a page size, max results, or days. 'query' in search_lore lacks context on search scope or format.
Output schema undocumented. Tools return a ContextEnvelope wrapper with fields 'payload', 'domain', 'context_id', 'source', LLMs have no schema to parse this structure. Downstream tool chaining is impossible without guessing field names.
Error handling lacks recovery guidance. ToolError::not_found() and ToolError::invalid_args() are raised but no guidance on next steps. E.g., 'Story ID not found' should suggest 'Try search_stories() with a partial title.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
No tool annotations. Tools are READ_ONLY but lack readOnlyHint annotation in schema. This prevents clients from optimizing caching or parallelization.
Parameter 'limit' in get_recent_episodes has no type constraint (min/max). Unbounded numbers let LLMs pass absurd values (limit=999999) that could timeout or exhaust memory.