Spring Boot e-commerce application with shopping cart, product catalog, and user authentication. Includes a React/Next.js frontend UI and Java backend API server.
Cartly exposes 5 CRUD tools for cart management via Spring Boot MCP server. All tools have basic descriptions and input schemas are visible in the code. However, descriptions are extremely brief (10-40 chars), parameter descriptions are largely absent, output schemas are undocumented, and error handling is absent. Tool names follow verb_noun convention (get, create, update, delete) which is correct. The server uses Streamable HTTP (spring-ai-starter-mcp-server-webflux) and supports the modern MCP framework. However, definition quality falls well below production standards. Descriptions like 'Retrieve all cart status records' (29 chars) lack context for LLM selection. Parameters like cartStatus object have no per-field descriptions. Output structure is not documented. No error guidance, no validation rules, no recovery hints. This is typical community-grade scaffolding that would require significant refinement before agent deployment.
Create a new cart status record
Delete a cart status record by cartId
Retrieve all cart status records
Retrieve a specific cart status record by cartId
Update an existing cart status record by cartId
Tool descriptions are under 40 characters and lack LLM selection context. 'Retrieve all cart status records' (29 chars) does not explain when to call this vs getCartStatusById, what data structure is returned, or expected result volume.
Parameter object properties (userId, productId, quantity in cartStatus) lack individual descriptions. 'userId' could be a string email or integer ID, ambiguous without field-level docs. No type hints visible in parameter schema for nested object fields.
Output schemas are not documented. getCartStatus likely returns a list but pagination (limit, offset, total_count) is not declared. Without documented return types, LLMs cannot plan downstream tool calls or extract the required fields (e.g., cartId for update/delete operations).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
No error handling guidance. Destructive operation deleteCartStatusById has no recovery instructions. What if cartId does not exist? Returns 404 or 200? No mention of idempotency. No actionable error messages for LLM self-correction.
Missing validation rules in parameter descriptions. For example, quantity parameter: is it an integer >= 0? Is there a maximum? cartId: is it always a positive integer? These constraints must be explicit in descriptions, not inferred from JSON Schema type alone.
No idempotency hints. For updateCartStatusById and deleteCartStatusById, it is unclear whether they are safe to retry. Agents may retry on ambiguous failures, without idempotency guarantees, this risks duplicate deletions or silent failures.
No confirmation or dry-run pattern for deleteCartStatusById. A destructive operation with no safeguard invites catastrophic agent mistakes.