Laravel-based MCP server providing admin tools for e-commerce management including product catalog, inventory, orders, and dashboard metrics
AgentCart provides 12 tools with consistent naming conventions (verb_noun pattern: AdjustInventoryTool, CreateCategoryTool, etc.) and reasonable descriptions. However, significant gaps exist: output schemas are completely undocumented (no return type specifications for any tool), error handling is not described, and many parameter descriptions lack format constraints or validation guidance. The server appears to be a Laravel MCP implementation with well-structured tool files, but the tool definitions lack the LLM-optimization patterns needed for reliable agent reasoning. Descriptions average ~80-120 characters, which is below the 194-char production baseline. No tool descriptions mention prerequisites, return values, or error conditions. The schema quality is moderate, parameters have types and basic descriptions but lack enum constraints where appropriate (e.g., ListOrdersTool.status already has enums, but UpdateOrderStatusTool.new_status lacks clear guidance on valid transitions). Composition is sound: tools are atomic and relate to a single resource (products, categories, orders). Security descriptions mention 'admin authentication' but do not declare permission scopes or error handling for unauthorized access.
Adjusts inventory stock level for a product. Positive values increase stock, negative values decrease stock. Requires admin authentication.
Creates a new category in the catalog. Requires admin authentication.
Creates a new product in the catalog. Requires admin authentication.
Deletes a category. Cannot delete categories with associated products. Requires admin authentication.
Deletes a product from the catalog. Requires admin authentication.
Retrieves dashboard metrics including revenue, order count, customer count, and low stock alerts. Requires admin authentication.
No output schemas documented for any tool. LLMs cannot predict return structure, required fields, or downstream data available for tool chaining. This violates pattern:response-shaper and pattern:tool-chain.
No error handling guidance in any tool description. Tools fail with no recovery path described (e.g., DeleteCategoryTool says 'Cannot delete categories with associated products' but does not say what error the LLM receives or how to handle it). Violates pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Gets products with stock levels below the specified threshold. Requires admin authentication.
Lists all categories with product counts. Requires admin authentication.
Lists all orders with pagination and filtering options (status, date range). Requires admin authentication.
Lists all products with pagination and filtering options. Requires admin authentication.
Updates an existing category. Requires admin authentication.
Updates order status with validation for valid status transitions. Requires admin authentication.
Descriptions lack LLM-optimization. Most descriptions are 60-70 chars, below the 194-char production baseline. Descriptions do not answer: WHAT does the tool do? WHEN should the LLM call it? WHAT does it return? This forces LLMs to guess and increases misuse.
Permission scopes not declared. Tools mention 'Requires admin authentication' but do not declare permission scopes (e.g., 'write:inventory', 'read:orders'). This prevents least-privilege agent configuration and clear audit trails. Violates pattern:scope-declaration.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot tell at a glance which tools are safe to retry, which are destructive, and which are read-only. This violates current MCP spec (2026-07-28) which encourages tool annotations.
GetDashboardMetricsTool returns unspecified structure. Description says 'revenue, order count, customer count, and low stock alerts' but does not document field names, types, or format (e.g., is revenue a float, a string like '$1000.00', or a number in cents?). This forces LLMs to guess.
ListOrdersTool and ListProductsTool lack pagination guidance. Descriptions do not specify result limit or total count returned. Without this, LLMs cannot reason about whether results are complete or truncated. Violates pattern:paginated-result.
UpdateOrderStatusTool description mentions 'validation for valid status transitions' but does not document what transitions are allowed (e.g., can 'delivered' → 'cancelled'? Can 'shipped' → 'pending'?). This forces trial-and-error execution.
No idempotency guidance. Tools like CreateProductTool do not state whether calling twice with identical inputs returns the same product or creates a duplicate. Agents retry on ambiguous failures, without idempotency guarantees, retries risk duplicates.