This MCP server presents a single tool (calculator) with moderate structural issues. The tool definition is loaded from an external JSON file (/tools/calculator.json) which is NOT visible in the provided source code. While the CalculatorTool.java class shows execution logic with proper error handling (division by zero, invalid operations), the actual schema definition cannot be verified. The input schema appears to be present based on the preamble (a: number, b: number, operation: enum), but without seeing the JSON file, proper schema validation cannot be performed. The tool description in Korean ('수학 계산을 수행합니다' = 'Performs mathematical calculations') is extremely brief (11 chars in English equivalent) and lacks actionable detail for LLM selection. No parameter-level descriptions are visible in the code, the description quality must be inferred from the JSON file. The naming is generic ('calculator' vs 'calculate_math', 'add_numbers', etc.) and does not follow the verb_noun convention. Error handling within CalculatorTool.execute() is reasonable (throw exceptions with messages), but there is no evidence of structured error responses or recovery guidance.
수학 계산을 수행합니다
Tool definition loaded from external JSON file not provided in source code review. Schema cannot be fully verified. Per HARD SCORING RULES, if input schema is not visible, schema score must be 0; however, evidence in code (Tool.java and CalculatorTool references to inputSchema) suggests a schema exists, so score is capped at 30 for partial visibility.
Tool description is extremely brief ('수학 계산을 수행합니다' ≈ 11 characters in English). Does not meet baseline of 34 - 392 chars (p10 - p90). Lacks actionable detail: when should LLM call this vs other math tools? What does it return? This violates the 'WHAT, WHEN, RETURN' pattern.
Tool name 'calculator' is a noun, not a verb_noun action. Naming convention should be 'calculate_*' or 'perform_calculation'. The tool does not clearly signal its action (add, subtract, multiply, divide all in one). Consider renaming to 'calculate_numbers' or breaking into separate tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 28 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 21 | - | v1 |
No evidence of parameter descriptions in source code. The JSON schema file (/tools/calculator.json) is not provided for review, so descriptions for 'a', 'b', and 'operation' parameters cannot be verified. If missing, violates pattern:tool-description baseline (100% of A+ tools have param descriptions).
Output schema not documented in source or visible code. CalculatorTool.execute() returns a generic McpMessage but the structure of the result (what fields, types, examples) is not documented. LLMs cannot plan downstream tool calls without knowing the result format.
No error handling guidance for LLM recovery. The code throws IllegalArgumentException for division by zero and invalid operations, but McpMessage serialization and error response structure are not visible. If errors are returned as raw exceptions rather than actionable messages like 'Invalid operation: got "power", must be one of: add, subtract, multiply, divide', LLM recovery is impaired.