Simple MCP server demonstrating core primitives: Tools, Resources, and Prompts
Three tools with basic schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. All tools have descriptions (10-50 chars, below the 50-200 char baseline for LLM optimization), and input schemas are present with type definitions. However, parameter descriptions are minimal or missing context about constraints, formats, and valid ranges. No error handling guidance, no output schema documentation, and no tool annotations. Naming follows verb_noun convention (calculate_, analyze_, convert_) which is good, but descriptions lack WHEN/WHY context needed for LLM tool selection.
Analyze text and return word count, character count, and reading time.
Calculate tip amount and total bill.
Convert temperature between Celsius, Fahrenheit, and Kelvin.
Tool descriptions are too brief (10-50 chars vs. baseline 50-200). Missing WHEN/WHY context for LLM selection. E.g., 'Calculate tip amount and total bill' does not explain when to use this vs. other financial tools or what the return structure contains.
Parameter descriptions lack constraint documentation. 'tip_percentage' has no range (e.g., 0-100?), 'from_unit' and 'to_unit' state 'C, F, or K' but no validation guidance if invalid input is passed. No mention of case-sensitivity or error recovery.
Output schemas are not documented. Tool docstrings describe return dicts but LLMs cannot see the actual field structure, types, or whether fields are always present. E.g., does analyze_text always return 'analyzed_at'? Is 'split_2_people' always included in calculate_tip output?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
No error handling or recovery guidance. convert_temperature raises ValueError for invalid units but tool description does not explain what happens on error or how to recover. No guidance like 'If conversion fails, check that from_unit and to_unit are one of: C, F, K'.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All three tools are read-only and idempotent, but this is not declared in the schema. LLMs cannot infer safety properties without explicit annotations.