MCP server that routes a home emergency described in plain words to the right trade: who to call, in what order, first steps, and sourced cost data.
Three well-named tools with clear, actionable descriptions (150 - 250 chars each). All tools have complete input schemas with typed properties and required fields. Tool names follow verb_noun pattern (route_, get_, list_). Descriptions explain WHAT, WHEN, and WHAT-RETURNS. Output schemas are partially documented via SCENARIO_ITEM_SCHEMA constant. State parameter accepts both abbreviations and full names with normalization logic. Error handling is present but minimal, no recovery guidance or actionable error messages visible in tool implementations. No pagination support for list_scenarios despite potentially large result sets. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are correctly applied to all three tools.
Fetch one situation in full: structured answer (who to call, costs, FAQ, sources) plus the complete step-by-step guide as markdown. Use category and slug values from route_emergency or list_scenarios.
List all available scenarios: the index of every situation the server knows about. Each entry carries title, description, category, and slug — enough to call get_scenario or route_emergency.
Given a home emergency described in plain words (e.g. "water coming through my ceiling"), returns the matching situation(s): who to call and in what order, first steps, typical costs, and a 24/7 dispatch phone number when one is available for the service vertical. Optionally pass a US state for region-aware dispatch numbers.
list_scenarios lacks pagination (limit, offset, cursor). No documented result count or next_cursor. Large scenario lists will blow context windows.
Error handling is minimal. No recovery guidance in tool implementations. Errors like 'scenario not found' should suggest alternatives or next steps.
Output schema for route_emergency and get_scenario is not explicitly documented in code. SCENARIO_ITEM_SCHEMA is defined but not tied to tool responses in CallToolResult.
list_scenarios description is generic ('List all available scenarios'). Does not explain when to call it vs route_emergency, or what structure it reveals.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
No batch or multi-call optimization. If an agent needs details for 5 scenarios, it must call get_scenario 5 times sequentially.