Triage customer chat messages by intent, urgency, and sentiment. Route to correct team.
This MCP server has fundamental gaps across all dimensions of the definition quality rubric. The two tools ('triage' and 'batch_triage') have adequate names but are severely underspecified in their schemas, parameter descriptions, and output documentation. The server appears to be a Python SDK wrapper without proper MCP tool registration. Critical issues: (1) Input schemas visible in the assessment show only parameter names and loose type hints ('message': string, 'customer_context': object, 'available_teams': array) but lack detailed JSON Schema with proper constraints, enums, or validation rules. (2) Parameter descriptions are minimal ('Raw customer message text', 'Optional context with order_id, past_tickets, is_vip'), falling well below the 50-200 character target for LLM-optimized descriptions. (3) Output schemas are entirely undocumented, the triage() method returns a dict with fields like 'intent', 'urgency', 'sentiment', 'routed_to', 'suggested_response', 'escalate', 'escalate_reason', 'message_length', but the return type and field descriptions are absent from any MCP tool definition context. (4) No error handling guidance, the code has no try-catch blocks, no validation of enum values, and no structured error responses. (5) The tool definitions appear inferred from Python method signatures rather than explicitly registered with proper MCP tool metadata.
Triage multiple messages at once.
Triage a customer chat message. Detects intent, urgency, sentiment, and recommends routing and response.
Input schemas lack proper JSON Schema structure and constraints. 'customer_context' is typed as 'object' with no shape definition; 'available_teams' is 'array' with no item type or enum constraints. This forces LLMs to guess valid values and structure.
Output schemas entirely undocumented. The triage() method returns a dict with 8 fields (intent, urgency, sentiment, routed_to, suggested_response, escalate, escalate_reason, message_length), but no MCP tool definition specifies the return type, field types, or which fields are present. LLMs cannot plan downstream tool calls or extract results reliably.
Parameter descriptions are too brief (10-30 characters) and lack formatting constraints or dependency hints. 'Optional context with order_id, past_tickets, is_vip' assumes the LLM knows the structure of customer_context; it should specify: 'Dict with optional keys: order_id (string), past_tickets (int, 0-100), is_vip (bool). Include any known customer history to improve routing logic.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 33 | 2026-07-28+ | v2 |
No error handling or validation guidance. The code contains hardcoded intent patterns and urgency rules with no fallback for unexpected input. If an LLM passes an empty message or malformed customer_context, the tool silently falls back to 'general' intent. No structured error response guides the LLM on what to retry or what went wrong.
'batch_triage' combines two concerns: triaging multiple messages AND sorting by urgency. This violates single-responsibility principle. A separate 'sort_triage_results' tool would be more composable and allow agents to call batch_triage and optionally sort results.
No documentation of when to use each tool. The description for 'triage' does not explain when an agent should use 'triage' (single message) vs 'batch_triage' (multiple messages). This causes unnecessary reasoning and potential wrong tool selection.
Hardcoded team names ('billing', 'shipping', 'returns', 'general') in the default available_teams parameter mean the tool is not extensible. If a customer adds a new team, the tool defaults fail. Parameter description should clarify this assumption and suggest passing all known team names.
Tool definitions appear inferred from Python method signatures rather than explicitly registered with MCP metadata. No evidence of proper MCP tool.Resource or tools list with name, description, inputSchema, and outputSchema. This suggests the server may not be a compliant MCP implementation.