A collection of MCP server implementations and clients in Python and TypeScript, including base classes for MCP server/client functionality, math expression evaluators (SymPy, MathJS), and Microsoft Learn integration.
This server provides two mathematical evaluation tools with minimal but present definitions. Both tools have short, functional descriptions and proper JSON Schema input parameters. However, descriptions lack depth and context for LLM decision-making, parameter descriptions are minimal, output schemas are not documented, and there is no error handling guidance. The tool names are reasonably clear but lack the action-verb convention. The codebase shows a solid FastMCP foundation with proper server infrastructure, but the actual tool definitions fall short of production quality. The server is functional but would benefit from substantially richer descriptions, documented output schemas, error recovery guidance, and clearer parameter intent.
Use MathJS to execute the mathematical expressions
Use SymPy to execute the mathematical expressions
Tool descriptions are extremely brief (27-29 chars) and lack context about when to use each tool. 'Use SymPy to execute the mathematical expressions' does not explain the difference between SymPy and MathJS, when to prefer one over the other, or what types of expressions each handles. LLMs cannot infer tool selection criteria from such minimal descriptions.
Parameter 'expression' has only a brief description ('the SymPy mathematical expression' or 'the mathematical expression') that does not specify format constraints, supported operators, expected syntax, or examples of valid/invalid inputs. Parameters should be 50-150 characters with clear intent and constraints.
Output schemas are not documented anywhere in the tool definitions. LLMs need to know what fields to expect from the result (is it a scalar number, an object with 'result' and 'type' fields, etc.). Without documented output, agents cannot plan downstream operations or extract results reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 28 | - | v1 |
No error handling guidance is present. Tools that evaluate user expressions are error-prone (invalid syntax, division by zero, undefined variables, timeout on expensive computation). Error responses should guide recovery: 'Invalid syntax: missing operator. Check parentheses and operator spacing.' Currently, agents will receive raw exceptions with no recovery path.
Tool names do not follow verb_noun convention. 'SymPy_MathExpressionEvaluator' and 'MathJS_MathExpressionEvaluator' are noun-first compound names (library_task pattern) rather than action-verb names like 'evaluate_expression_sympy' or 'evaluate_math_expression_mathjs'. This reduces clarity for LLM tool selection.
No distinction between tool capabilities is documented. Why would an LLM choose SymPy over MathJS or vice versa? What expressions does each handle? What are the trade-offs (speed, precision, supported functions)? This ambiguity will lead to suboptimal tool selection.