Java Spring Boot MCP client application that connects to multiple MCP servers (Brave Search, WebFlux, Stdio) and exposes their tools via REST API endpoints
This Spring Boot HTTP server defines 3 tools with basic schemas and descriptions, but exhibits significant quality gaps typical of early-stage implementations. Tool naming follows verb_noun convention (brave_web_search, get_current_weather, calculator), which is positive. However, descriptions are minimal (20-60 chars), parameter descriptions are sparse or absent, output schemas are undocumented, and no error handling guidance is provided. The codebase shows tool registration in McpController.java with JSON Schema input definitions, but lacks the LLM-optimized documentation and composition patterns expected of production-grade tools. Per-tool analysis: brave_web_search has a minimal description (57 chars) and a single parameter 'query' with a basic description; calculator has a similarly brief description (103 chars) and three parameters (operation, a, b) with minimal context; get_current_weather has a 93-char description and two parameters with limited detail. None of the tools document their return types, error conditions, or recovery paths. This places the server solidly in the 'fair to poor' range (C-D territory), consistent with community tooling.
Performs a search using Brave Search with a query parameter
Performs calculations using the calculator tool with operation and two numeric operands
Gets weather information for a specified location with optional temperature format
Output schemas are not documented anywhere in the codebase. LLMs cannot infer what fields to expect from tool responses, forcing them to guess at downstream data extraction and breaking tool composition chains.
Tool descriptions are extremely brief (20 - 103 chars), well below the baseline of 194 chars. They lack context for LLM selection: when should an agent choose calculator over a different tool? What does brave_web_search return? When is get_current_weather appropriate?
Parameter 'operation' in calculator lacks a description entirely and does not constrain to a known set of operations (add, subtract, multiply, divide, etc.). LLMs will hallucinate invalid operations like 'exponentiate' or 'modulo'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
No error handling guidance. Tools provide no documentation of failure modes, recovery paths, or actionable error messages. An LLM receiving a tool error has no guidance on whether to retry, adjust parameters, or escalate.
Parameter descriptions are missing or minimal. 'query' in brave_web_search has a basic description, but 'a' and 'b' in calculator lack context, is a number or string expected? What is the valid range? Natural language interpretation by LLMs will be inconsistent.
Tool 'calculator' does not document what operations are valid (add, subtract, multiply, divide, modulo, exponent). Without an enum or constraint, LLMs will invent operations, causing failures.
Parameter 'format' in get_current_weather has a default ('celsius') but no explicit enum constraint. LLMs may pass invalid formats like 'kelvin' or 'fahrenheit' (misspelled). Document the constraint clearly.