A Laravel 13 + Livewire 4 demo shop that exposes its features to browser AI agents via the WebMCP navigator.modelContext API.
Server has 8 tools with consistent naming (verb_noun pattern) and complete input schemas. All tools have descriptions (avg 68 chars, within baseline 34-392). However, descriptions are generic and lack LLM-optimization guidance (e.g., 'when to use', 'prerequisites', 'what it returns'). Parameter descriptions are present but minimal. No output schemas documented. Error handling and recovery guidance absent. Missing tool annotations (readOnlyHint, destructiveHint). Composition is sound, tools are single-responsibility and chainable via SKU/slug identifiers.
Add a product to the shopping cart by SKU
Clear all items from the shopping cart
Retrieve the current shopping cart contents and limits
Look up a product by SKU or slug
List all product categories with metadata
Remove a product from the shopping cart by SKU
Search and filter products in the catalog with pagination support
Update the quantity of a product in the cart (0 removes it)
No output schemas documented. LLMs cannot infer response structure (fields, types, pagination). Forces agents to guess what data is returned and how to chain calls.
Descriptions lack LLM-optimization guidance. Missing 'WHEN to use', 'prerequisites', and 'what it returns'. E.g., search_products says 'Search and filter products' but doesn't explain when to call it vs get_product, or that it returns paginated results.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Catalog tools (search_products, get_product, list_categories, get_cart) should be marked readOnly=true. clear_cart should be marked destructive=true. Agents cannot distinguish safe from risky calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No error handling or recovery guidance. If add_to_cart fails (e.g., out of stock, invalid SKU), no actionable error message or next-step guidance. Agents cannot self-correct.
Parameter descriptions are minimal. E.g., 'sort' param lists enum values but doesn't explain what each sort order means or when to use each. 'per_page' lacks guidance on performance trade-offs or recommended defaults.