MCP server: convert numbers between binary, octal, decimal, hex, and arbitrary bases (2-36).
Single tool 'convert' has a clear verb-noun name and complete input schema with proper type constraints (base 2-36). Description is adequate (97 chars) but lacks context on when to use it or what it returns. Parameter descriptions are minimal: 'from_base' and 'to_base' lack any explanation of what they represent. Output schema is not documented, LLMs cannot predict the ConvertResult structure (input, from_base, to_base, decimal, result fields). Error handling returns plain text messages without recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite being a pure read-only, idempotent operation.
Convert an integer between two bases (2-36). Supports arbitrary precision via BigInt.
Missing parameter descriptions for 'from_base' and 'to_base'. LLMs cannot infer that these are radix/base numbers (2-36 range). Descriptions should explain: 'The source base (radix) as an integer from 2 to 36. E.g., 2 for binary, 10 for decimal, 16 for hexadecimal.'
Output schema not documented. The tool returns a ConvertResult object with fields (input, from_base, to_base, decimal, result), but LLMs have no way to know this structure. Document the output schema in the tool description or via a separate schema field.
Tool description lacks context on when to use it and what it returns. Current: 'Convert an integer between two bases (2-36). Supports arbitrary precision via BigInt.' Should add: 'Returns the converted number as a string in the target base, plus the decimal representation for reference. Use this to convert between binary, octal, decimal, hexadecimal, or any base 2-36.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No tool annotations despite being a pure read-only, idempotent operation. Add readOnlyHint: true and idempotentHint: true to the tool definition so agents know it is safe to call repeatedly without side effects.
Error messages are plain text without recovery guidance. E.g., 'basenum failed: invalid digit for number: xyz' does not tell the LLM what to do next. Errors should suggest: 'Invalid digit in input. Ensure all characters are valid for the source base (0-9, a-z for bases > 10).'