Universal code + logic calculator for AI models: execute 31 languages, evaluate logic, analyze complexity. Exposed via MCP.
codecalc provides 8 tools with mostly complete schemas and basic descriptions. However, descriptions are generic and often under-optimized for LLM reasoning. Parameter descriptions exist but lack detail about constraints, valid ranges, and error cases. Output schemas are not documented. The server conflates concerns (execute_code vs execute_code_stream) and lacks error guidance. Tool names are clear and verb-leading, but the descriptions do not explain WHEN to use each tool or distinguish similar tools effectively. No tool annotations (readOnlyHint/destructiveHint) despite the risk declarations provided. Security concerns are flagged but not addressed in tool design.
Analyze time and space complexity of code
Empirical complexity analysis via benchmarking at multiple input sizes
Run one code snippet per language; return a side-by-side result table
Diagnose codecalc installation and configuration status
Evaluate logical expressions and symbolic computations
Execute code in a specified language with optional stdin, timeout, and resource limits
Execute code with streaming output
List all supported programming languages
Destructive tools lack tool annotations. execute_code, execute_code_stream, compare_execution, and benchmark all risk code execution but do not carry destructiveHint annotations. LLMs cannot reason about irreversible consequences without explicit marking.
Descriptions lack WHEN guidance. 'Execute code in a specified language...' tells WHAT but not WHEN to use execute_code vs execute_code_stream. LLMs cannot distinguish without explicit guidance: 'Use for single execution results; see execute_code_stream for streaming output.'
Output schemas not documented. Tools like execute_code, benchmark, and compare_execution return results but do not document what fields the LLM should expect in responses. LLMs cannot plan downstream tool calls without knowing output structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
Parameter descriptions lack constraints. 'timeout': integer with no bounds, min/max, or guidance on reasonable values. 'language': string with no enum of supported languages or format specification. 'mode' in evaluate_logic lists no valid values.
No error guidance in descriptions. Destructive tools (execute_code, benchmark) can fail (timeout, syntax error, resource limit) but descriptions do not explain what errors to expect or how to recover. Example: 'Timeout in seconds' should note 'If code times out, return error 408; retry with larger timeout or simpler code.'
Tool redundancy with unclear differentiation. execute_code and execute_code_stream both execute code; the distinction (streaming vs non-streaming output) is buried in names. compare_execution and benchmark both run multiple code samples. Descriptions do not explain when to prefer one over the other.
No idempotency guarantees documented. execute_code, benchmark, compare_execution all have side effects (CPU/memory usage, timeout risk). Descriptions should clarify whether re-running the same call produces the same result or whether prior execution state affects outcomes.
evaluate_logic has vague 'mode' parameter. Accepts 'symbolic' and 'numeric' (inferred from description) but no enum constraint. What other modes exist? What does each return? LLMs will guess invalid modes.