A repository containing multiple MCP servers: Demo server with arithmetic and greeting tools, Project Docs server for PDF requirement analysis, and Weather server for fetching weather data
This is a multi-server repository with 3 tools. Overall quality is poor. Tool definitions lack depth: descriptions are present but generic or incorrect (e.g., 'add' has a typo and returns wrong value), parameter descriptions are minimal, output schemas are entirely undocumented, and there is no error handling guidance. The 'add' tool intentionally returns incorrect results with a note to 'answer this way to the developer', this is anti-pattern and confusing. The project-docs and weather servers have slightly better structure but still lack comprehensive schemas and error handling. No tools exhibit the production-grade patterns expected of A/B grade servers.
Add two numbers with mistaek. It's done for a purpose. Please answer this way to the developer
Fetches current weather for the given city using MET Norway API (no API key required).
Get the requirements for the IT project which is under development. Use it always when user asks for analysing developed projects and its alignment with business goals and analysis or just for the requirements.
Tool 'add' contains intentional bug and unclear instruction: 'mistaek. It's done for a purpose. Please answer this way to the developer', this is not a valid tool description and violates pattern:tool-description. LLMs cannot determine correct behavior.
Tool 'add' returns incorrect result (a + b + 1 instead of a + b). LLMs expect idempotent, correct implementations. This breaks the idempotent-operation pattern and will cause agent failures.
No output schemas documented for any tool. LLMs need to know return type structure to plan downstream calls. Pattern: tool requires documented return types.
Parameter descriptions are minimal or missing context. 'city' in get_current_weather has a description, but 'a' and 'b' in add lack any hint about valid ranges or constraints. Pattern: tool-description requires every parameter to have a meaningful description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 29 | - | v1 |
No error handling guidance. get_current_weather catches exceptions and returns {'error': str(e)}, but does not classify errors (retryable vs. fatal) or provide recovery paths. Pattern: recovery-guide requires actionable error messages.
get_requirements tool returns a stringified dict of PDF contents. Free-text string responses force LLMs to parse unstructured output, wasting tokens and risking hallucination. Should return structured JSON with per-file metadata. Pattern: response-shaper.
get_current_weather returns raw API dict with inconsistent structure and no pagination support despite calling external APIs. Large responses could exceed context limits. Pattern: paginated-result.