A minimal MCP server for educational purposes with FastMCP and JSON-RPC implementations
GhostTown MCP is a minimal educational server with severe definition quality gaps. Two tools named identically ('add_tool') with nearly identical schemas and descriptions. While schemas are present and properly typed, descriptions are minimal (under 100 chars), parameter descriptions exist but are generic, and there is no error handling guidance. The duplicate tool naming violates single-responsibility principle and confuses agent tool selection. No output schema documentation. No error handling patterns. No security considerations for parameter validation. This is a toy implementation suitable for learning but unsuitable for production agent integration.
Add two numbers.
Add two floating point numbers using the add tool.
Duplicate tool names: both servers define 'add_tool'. Agents cannot distinguish between them. When an MCP client loads both servers, naming collision causes one to overwrite the other or creates undefined behavior.
Tool descriptions are under 50 characters and lack context. 'Add two numbers.' and 'Add two floating point numbers using the add tool.' do not explain WHEN to use this tool, what edge cases exist (e.g., overflow, precision), or what the return value represents.
No output schema documented. Callers do not know what type is returned (int? float? string?), whether it's wrapped in a response object, or what fields accompany the result. LLMs cannot reason about downstream tool composition without documented return types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 38 | - | v1 |
No error handling guidance. What happens if inputs are NaN, infinity, or numbers exceeding float range? No try/catch, validation, or error messages that guide the LLM toward recovery. Per pattern:recovery-guide, error responses must tell the LLM what to do next.
Parameter descriptions are generic and lack constraints. 'The first number to add' does not specify range (min/max), whether negative numbers are allowed, precision limits, or behavior on edge cases.
No idempotency guarantee documented. In a retry scenario, calling add_tool(2, 3) twice should return 5 both times, but the description does not confirm idempotency, and there's no mention of side effects or state mutations. Per pattern:idempotent-operation, agents must know if retries are safe.