A REAL MCP server in pure Python — exposes three TOOLS wrapping a tiny school database (class sizes, grades, homework).
Three tools with complete schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. Tool names follow verb_noun convention (get_, lookup_, add_). Descriptions are present (10-100 chars) but lack actionable context for LLM selection. Error handling exists but lacks recovery guidance. Missing output schema documentation entirely.
Add a homework item (WRITES state — hosts should confirm with the user!).
How many students are in a class (3A or 3B)?
Look up one student's grade (read-only).
No parameter descriptions in any tool schema. Rubric requires every parameter to have a description explaining what it controls. 'class_name', 'student', 'title', 'due' lack context for LLM reasoning.
Output schema not documented. Rubric requires documenting what fields LLMs should expect in responses. Callers cannot plan downstream tool calls without knowing response structure.
Error messages lack recovery guidance. LookupError for missing student returns raw exception text. Should guide LLM: 'Student not found. Try search_students() or list available students in the class.'
add_homework description does not explain when to use it vs other tools, or what prerequisites exist. Baseline descriptions are 194 chars; this is 100 chars and lacks context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Missing tool annotations (readOnlyHint, destructiveHint). get_student_count and lookup_grade should be marked readOnly; add_homework should be marked destructive per current spec.