An AI-powered e-commerce storefront demo integrating Sanity CMS, Clerk authentication, and AI SDK with MCP tools for product querying, filtering, and conversation classification
This is a Next.js/Sanity ecommerce demo, not a standalone MCP server. Only 2 tools are defined in client-tools.ts. Both have descriptions and basic schemas, but lack depth. get_page_context has an empty input schema ({}), violating the schema requirement. set_product_filters has a reasonable schema with enums and descriptions, but the overall tool set is minimal and the codebase shows this is a reference implementation, not a production MCP server. No error handling guidance, no output schemas documented, no tool annotations. The descriptions are adequate (50-100 chars) but lack the LLM-optimization and dependency hints expected of production tools.
Get the current page content as text. Use when you need to know what the shopper is looking at right now.
Update the /products listing filters in the shopper's browser and navigate there. First use groq_query to confirm valid values (category slugs, sizes) and that matching products exist.
get_page_context has empty input schema ({}). This tool accepts no parameters but provides no output schema documentation.
No output schemas documented for either tool. LLMs cannot plan downstream calls or extract required fields without knowing what get_page_context or set_product_filters return.
No error handling guidance. If set_product_filters fails (invalid category, no matching products), the tool provides no recovery hint. Description mentions 'First use groq_query' but groq_query is not exposed as a tool.
set_product_filters description references groq_query tool that does not exist in the tool set. This creates a broken dependency and forces the LLM to hallucinate a tool call.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). set_product_filters is marked WRITE risk but lacks destructiveHint annotation to signal side effects to the LLM.