A Spring Boot MCP server implementation demonstrating tool registration and student data management
Two tools with minimal descriptions and no visible input schemas. studentDetails has a 127-char description (acceptable range) but lacks parameter type definitions in the visible schema. listStudentIds has a 56-char description (below 20-char floor for scoring). Neither tool has documented output schemas. No error handling guidance, no parameter constraints, no composition hints. The Tools class uses Spring AI annotations (@Tool, @ToolParam) but the actual JSON Schema registration is not visible in the provided source, tool definitions appear inferred from annotations rather than explicitly registered with full schemas.
Lists all student IDs in comma separated format
Gives details of a student, like name, age, GPA. calling listStudentIds() will give you a list of student IDs
No input schemas visible for either tool. studentDetails accepts a string parameter but no JSON Schema with type, format, or constraints is shown. listStudentIds accepts no parameters but this is not formally declared.
listStudentIds description is only 56 characters ('Lists all student IDs in comma separated format').
No output schemas documented. studentDetails returns a string but the structure is unknown, is it JSON, plain text, CSV? listStudentIds returns 'comma separated format' but no field names or structure are specified. LLMs cannot plan downstream calls without knowing output shape.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 33 | 2026-07-28+ | v2 |
studentDetails parameter 'studentId' has a description ('Student ID') but no type constraint, format, or validation rule. Is it numeric? Alphanumeric? What happens if it's null or invalid? The tool code checks for null/empty and returns an error message, but this is not documented in the parameter schema.
No error handling guidance. studentDetails returns plain-text error messages ('Student ID cannot be null or empty', 'No details found for student ID: X') but does not guide the LLM on recovery steps. Per pattern:recovery-guide, errors should suggest next actions (e.g., 'Call listStudentIds() first to see valid IDs').