IMEI validation MCP. Keyless, offline: validate a 15-digit IMEI (Luhn check digit) or a 16-digit IMEISV, and break out its parts — TAC (Type Allocation Code), serial number and check digit. Pure algorithm — no API, no key.
Two well-named, focused tools with clear descriptions and complete input schemas. Both tools are READ_ONLY and offline, reducing complexity. However, output schemas are not formally documented, LLMs must infer response structure from descriptions. Parameter descriptions are adequate but lack format/constraint details. Error handling is present but minimal (no recovery guidance). Tool names follow verb_noun convention and are unambiguous.
Compute the Luhn check digit for the first 14 digits of an IMEI (use to complete or repair an IMEI).
Validate an IMEI (15 digits, with Luhn check) or IMEISV (16 digits, no check). Keyless/offline. Returns validity and the parts: TAC (Type Allocation Code, first 8), serial number, and check digit. Spaces/dashes ignored. Validates the number, not the device.
Output schemas not documented. LLMs cannot see the structure of responses (e.g., validate_imei returns {input, valid, type, tac, serial_number, check_digit, expected_check_digit, reason}). Without formal output schema documentation, agents must infer field names and types from descriptions, increasing hallucination risk.
Parameter descriptions lack format constraints. 'A 15-digit IMEI or 16-digit IMEISV' is stated in description but not enforced via JSON Schema pattern or minLength/maxLength. The code validates (regex '^\d{15,16}$'), but LLMs cannot see this constraint in the schema.
Error responses lack recovery guidance. When validation fails (e.g., 'Expected 15 digits'), the response includes a reason but no actionable next step. Pattern: recovery-guide recommends 'Try X instead' or 'Call Y first'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, idempotentHint). Both tools are READ_ONLY and idempotent, but this is not declared in the tool definition. Modern MCP clients use annotations to optimize caching and retry logic.