A multi-server MCP implementation providing math and text processing tools through separate FastMCP servers coordinated by a LangChain-based client
This server has 6 simple utility tools with basic but incomplete definitions. All tools have short, clear descriptions (10-40 chars) and properly typed parameters with descriptions. However, the definitions lack production-grade rigor: no output schemas are documented, no error handling guidance exists, and tool purposes are trivial (word counting, math operations). The naming follows verb_noun pattern correctly, but there is no discussion of when these tools should be called vs alternatives, no pagination support, no result limits, and no idempotent/destructive hints. The schema quality is moderate, each parameter has a type and description as required by fastmcp, but responses are undocumented. This is a toy/demo server; definition quality is acceptable for educational purposes but would not pass production code review.
Add two numbers together.
Count the number of words in given text.
Multiply two numbers together.
Reverse the given text.
Subtract b from a.
Convert text to uppercase.
No documented output schemas. Tools return untyped values (int, str) without structure documentation. LLMs cannot plan downstream calls or extract fields reliably.
Tool descriptions are minimal (under 50 chars each). They state WHAT the tool does but lack WHEN to use it or ANY context about error handling, side effects, or prerequisites.
No error handling guidance. Tools provide no recovery hints if inputs are invalid (e.g., if text is None, or numbers are out of range). LLM has no actionable guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Tool annotations are missing. No readOnlyHint, destructiveHint, or idempotentHint declared. Agents cannot determine if tools are safe to retry or have side effects.
Math operations lack input validation and bounds. No description of valid ranges for 'a' and 'b'. Tools silently accept any integer (risk of overflow or nonsensical results).