A Spring Boot-based MCP server that provides MongoDB-backed to-do list management tools
Spring AI MCP server defines 3 tools with basic annotations but significant quality gaps. All tools have descriptions (10-60 chars) and parameter schemas with types, but descriptions are too brief to guide LLM selection effectively. Parameter descriptions lack format constraints, enums, and dependency hints. No output schemas documented. No error handling guidance. Tool names follow verb_noun convention but lack clarity on state mutations. Missing idempotency markers and permission declarations.
Add a new to-do task to MongoDB
Mark a to-do task as complete by name
Retrieve to-do list items, optionally filtered by completion status
Parameter descriptions lack format constraints and enums. 'filter' param accepts 'complete', 'incomplete', 'all' but no enum declared, LLM may hallucinate invalid values like 'pending' or 'done'.
No output schemas documented. getTasks() returns List<Task>, addTask() returns String, completeTask() returns String, LLM cannot infer what fields Task contains or how to chain results to downstream calls.
Tool descriptions too brief (35-60 chars). 'Add a new to-do task to MongoDB' lacks WHEN to use it, what it returns, or whether it's idempotent. Baseline for A+ tools is 50-200 chars with context.
No error handling guidance. If addTask() fails (e.g., duplicate name, DB connection error), no recovery hint provided. LLM cannot determine if retry is safe or if user input is invalid.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Missing tool annotations. No @McpTool readOnlyHint, destructiveHint, or idempotentHint declared. LLM cannot distinguish safe reads from state-mutating writes without reading implementation.