MCP server for managing customer billing information, subscriptions, and contracts
Two tools with basic definitions and simple parameter schemas. Both tools have non-empty descriptions and typed input parameters, meeting minimal requirements. However, descriptions are generic, output schemas are not documented, error handling is minimal, and no parameter constraints are enforced. Tool names follow verb_noun convention (get_*) appropriately. The implementation uses mock data and basic string lookup, production-ready error messages and recovery guidance are absent.
Get the guaranteed uptime SLA and support level for a specific customer ID.
Retrieve the subscription tier and status for a customer using their email address.
Output schema not documented. Tools return raw text/JSON blobs without formal schema declaration. LLMs cannot plan downstream tool calls or validate expected fields.
Parameter descriptions lack format/constraint details. 'email' and 'customer_id' have minimal guidance. No regex pattern, character limit, or valid value ranges specified. LLMs cannot validate input before calling.
Tool descriptions are under 100 characters and lack WHEN/WHY guidance. 'Retrieve the subscription tier...' is a bare statement of what happens, not why an agent should call it or when to prefer it over alternatives. Descriptions should answer: what does it do, when to use it, what does it return?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Error handling is generic. Service layer returns {'error': '...'} as part of normal response. No distinction between retryable errors, user-fixable issues, or fatal failures. LLMs receive unhelpful error messages with no recovery guidance.
No input validation. Tools accept any string for 'email' and 'customer_id' without checking format, length, or SQL injection risk. Malformed input returns unhelpful 'not found' messages instead of actionable validation errors.
Response format is free-text JSON in a text blob. Tools return structured data as JSON-in-a-string rather than typed response objects with documented field schemas. Parsing unstructured text wastes tokens and increases LLM hallucination.