A Java-based MCP server and client application with employee data tools and AI agent integration using Spring AI
This MCP server exposes 2 tools with basic Spring-AI annotations. Both tools have descriptions and are READ_ONLY, but critically lack comprehensive schema documentation and parameter descriptions. The naming is reasonable (verb_noun pattern: getEmployee, getAllEmployee), but parameter guidance is sparse. The server appears functional but falls well below production quality standards for agentic tool patterns.
Get All Employees
Get information about a given employee
getEmployee: Parameter 'name' lacks sufficient guidance on expected format, valid values, or whether partial matches are supported. LLMs cannot infer whether to pass 'Hassan', 'hassan', or a partial string like 'Has'. Description is '1 sentence' rather than 'What it expects, when to use it, what to return'.
getAllEmployee: Name does not follow verb_noun convention. 'getAllEmployee' uses camelCase and mixes verb+noun awkwardly. Standard naming would be 'list_employees' or 'get_all_employees' (snake_case for MCP tools). Naming is ambiguous, LLMs prefer explicit list_ or get_ prefixes.
Output schemas not documented. Both tools return objects (Employee record with salary, years fields) but the schema structure is inferred, not explicitly declared. LLMs cannot plan downstream calls or extract fields reliably without knowing the exact response schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
getAllEmployee returns a hardcoded list of 3 employees with no pagination, limits, or offset parameters. Production tools should cap results (recommend 20 - 50 items) and offer pagination. The description 'Get All Employees' does not mention the actual limit.
No error handling documented. If getEmployee receives an invalid name, no guidance on expected behavior (404? null? error message?). Error responses should tell LLMs what to do next (e.g., 'Try search_employees() with a partial name').
getEmployee has no parameter description for 'name' beyond 'The employee name'. Does not specify format (first name only? full name? case-sensitive?), allowed lengths, or examples.