A Spring Boot-based MCP server that integrates with Spring AI for tool registration and uses the studentService to provide MCP tools for managing student data
This server implements 2 tools with basic HTTP transport via Spring Boot. Both tools have input schemas and descriptions present, but quality is below production baseline. Tool names lack clear action verbs (queryListByName should be get_students_by_name or search_students), descriptions are minimal (under 100 chars), and parameter descriptions are generic. No output schema documentation visible. No error handling guidance. The implementation relies on Spring AI's MethodToolCallbackProvider for tool registration, which is reasonable, but the actual tool definitions lack the LLM-optimization depth needed for reliable agent selection and parameter binding. Compared to the 194-char average description baseline, these tools fall short. No evidence of pagination limits being enforced, permission gates, or structured error responses.
Get paginated student information with filtering options
Query student list by name
Tool names lack clear action verbs in verb_noun format. 'queryListByName' and 'pageInfo' are vague and do not convey the action or distinguish intent from similar tools.
Descriptions are too short (33 - 57 chars) and lack context on WHEN/WHY to call each tool, prerequisites, and distinctions between queryListByName and pageInfo. Baseline is 194 chars.
Parameter descriptions are generic single-phrase annotations (e.g., 'Student sex filter') lacking format guidance, valid values, constraints, or examples. LLM cannot infer whether 'sex' should be 'M'/'F', enum, or free text.
No output schema documentation visible in source code. LLM does not know what fields to expect from queryListByName or pageInfo responses, preventing reliable downstream tool chaining and field extraction.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
pageInfo lacks pagination constraints: no stated defaults (current=1? size=2?), no max page size limits, no total_count or next_cursor guidance.
No error handling guidance. If a student name is not found, does the tool return an empty list, a 404 error, or a null? If a filter is invalid (e.g., classRoom does not exist), does it fail silently or error with guidance on valid classrooms?
Parameter 'size' in pageInfo lacks bounds documentation. What is the max page size? If unbounded, an LLM could request 1,000,000 items, blowing context window or causing timeout.
Ambiguous filter fields in pageInfo (classRoom, address) lack enum constraints or format hints. LLM will guess values; server-side validation should return 'Invalid classRoom: got "room-101", valid options: class-A, class-B, class-C' on mismatch.