A Spring Boot-based Model Context Protocol server implementation with reactive (WebFlux) and servlet (WebMVC) variants, providing tools for person and product data management
Spring MCP Server exposes 4 tools (2 unique, duplicated across webflux/webmvc) with minimal descriptions and no visible input schemas in the MCP protocol layer. Tools use Spring AI @Tool annotations but lack formal JSON Schema definitions, parameter constraints, and output documentation. Descriptions are extremely brief (13-32 chars), below the 50-200 char baseline for LLM-optimized tools. No error handling guidance, no pagination support for list operations, and no tool annotations (readOnlyHint, etc.). The server appears to be a Spring AI wrapper rather than a true MCP implementation with proper schema exposure.
Find person by ID
Find person by ID
Find all persons by nationality
Find all persons by nationality
Descriptions critically short (13-32 chars). 'Find person by ID' and 'Find all persons by nationality' lack context for LLM selection. No explanation of when to use each tool, what they return, or dependencies.
No visible input schemas in MCP protocol layer. Spring @ToolParam annotations exist but are not exposed as formal JSON Schema with type constraints, enums, or ranges. LLM cannot validate inputs before calling.
No output schema documentation. Callers cannot predict response structure (Person object fields, list cardinality, null handling). getPersonsByNationality returns List<Person>? but nullable semantics are undocumented.
getPersonsByNationality lacks pagination. No limit, offset, or page parameters. Returning all matching persons risks context window exhaustion and violates enforce-result-limits pattern.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 28 | <=2025-11-25 | v2 |
Duplicate tool definitions across webflux and webmvc modules. Same tools (getPersonById, getPersonsByNationality) registered twice with identical signatures. LLM cannot disambiguate which to call.