A mock-only MCP template for testing inbox search workflows with synthetic messages
Four tools with complete schemas and descriptions, but descriptions are generic and lack LLM-optimized guidance. All tools are read-only with no state-modifying operations. Parameter descriptions are present but minimal (10-30 chars). No error handling guidance, no recovery paths, and no examples of chaining IDs across tools. Naming is clear and verb-prefixed. Output schemas are implicit but not formally documented. Missing: actionable error messages, parameter constraints (enums for mailbox/sender), and composition guidance.
Get one synthetic message; body text is excluded unless explicitly requested.
Report the active mock connector and the template's data boundary.
List mailboxes represented by the bundled synthetic fixture set.
Search synthetic messages with optional mailbox, sender, and ISO date filters.
Parameter descriptions are too brief (10-30 chars). 'Optional exact mailbox filter' and 'Optional exact synthetic sender filter' lack context on valid values, format, or when to use them. LLMs cannot infer constraints from minimal text.
No enum constraints on 'mailbox' and 'sender' parameters. Free-form strings invite hallucinated values. search_messages should document valid mailbox names or reference list_mailboxes() to discover them.
Output schemas are not formally documented. Tool descriptions do not state what fields are returned (e.g., search_messages returns {count, results, ...?}). LLMs cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
No error handling guidance. If get_message(message_id='invalid') fails, the tool returns {found: False} but does not suggest recovery (e.g., 'Try search_messages() to find valid IDs'). Agents cannot self-correct.
Tool composition is unclear. search_messages returns message summaries; get_message retrieves full details. The response from search_messages should include message_id so agents can chain to get_message without extra lookups.