Production-ready MCP server for e-commerce customer service AI integration with support for customers, orders, tickets, and products management
The server provides three well-named tools with complete JSON Schema input definitions and enum-constrained parameters. Tool descriptions are present and substantive (85-95 characters each). However, the server lacks documented output schemas, missing critical fields like return types and structure. Error handling guidance is absent, tools provide no recovery hints. The naming is clear and action-oriented (create_, update_), and parameters are well-typed with descriptions. Security-sensitive operations (WRITE risk) lack confirmation/dry-run patterns. No tool annotations (readOnlyHint/destructiveHint) present despite MCP SDK support. Relative to the rubric baseline of 194-char descriptions, these average ~90 chars, which is lean but acceptable. All parameters are properly typed (no scores capped at 30 for type issues). Overall: solid definition foundation with gaps in output documentation and error recovery.
Create a new support ticket
Update the status of an existing order
Update an existing support ticket
No documented output schemas for any tool. LLMs cannot infer return structure, response fields, or what data to extract for downstream tool chaining.
All three tools are WRITE operations but lack error recovery guidance. No descriptions tell the LLM what to do if the operation fails (e.g., 'If ticket creation fails due to duplicate, call search_ticket() with the subject to find the existing ticket').
No tool annotations (destructiveHint, readOnlyHint, idempotentHint) in schema despite MCP SDK 1.0.0 supporting them. This forces LLMs to reason about side effects without explicit guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 36 | - | v1 |
update_ticket has five parameters with three enums. The relationship between 'status' and 'resolution' (resolution only makes sense for resolved/closed statuses) is undocumented, risking invalid state transitions.
create_ticket and update_ticket both have 'priority' enum with identical values (low, medium, high, urgent), but update_ticket's 'status' enum includes states (open, in_progress, waiting_customer, resolved, closed) that create_ticket's description does not cover. No guidance on initial state.