MCP server that exposes product search and recommendation tools for SendaMeal, enabling AI-powered meal product discovery, dietary filtering, and occasion-based recommendations using Cloudflare AI Search AutoRAG
The SendaMeal MCP server defines 4 tools with basic Zod schemas and attempt at descriptions, but falls short of production quality. Tool names are reasonably verb-based (search_*, get_*, find_*), and all tools have input schemas defined in Zod. However, descriptions are superficial (10-30 chars for tool descriptions, under 10 chars for most parameters), parameter descriptions lack actionable context, output schemas are undocumented, and error handling is generic. The server implements HTTP transport with SSE endpoints, which is current, but lacks modern MCP patterns like structured output documentation, tool annotations, and proper error recovery guidance. None of the tools document what fields they return or how their outputs chain to other tools.
Dietary restriction (e.g., 'gluten-free', 'vegan', 'kosher', 'dairy-free')
Name or search term for the specific product
The occasion or event (e.g., 'birthday', 'sympathy', 'get well', 'thank you')
Search query for finding meal products
Tool and parameter descriptions are too brief (10-30 chars) to guide LLM selection. 'Search query for finding meal products' is vague, does not explain when to use search_products vs find_dietary_options, what the result structure looks like, or what to do if no results return.
Output schemas are completely undocumented. Tools return text content formatted as strings, but the schema of that response (fields, types, structure) is not declared. LLMs cannot plan downstream calls or extract specific fields without seeing the actual response structure.
Error responses are generic and non-actionable. E.g. 'Error searching products: {error.message}' provides no recovery guidance. Should indicate whether the error is retryable, user-fixable, or fatal, and suggest next steps (e.g. 'Try refining your search query' or 'Try searching by dietary restriction instead').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
No indication of result limits or pagination. Tools call maxResults but do not document if there are more results or how to retrieve them. The rubric baseline is 20-50 items per response; unbounded lists risk blowing context windows.
Tool descriptions do not state what the tool DOES or its EFFECT. 'Name or search term for the specific product' (for get_product_details) is a parameter description masquerading as a tool description. Tool descriptions should explain the action: 'Fetch detailed product information (description, pricing, availability) by product name or search term.'
No tool annotations (readOnlyHint, idempotentHint) declared, even though all tools are read-only and idempotent. Modern MCP tooling expects these hints in the tool definition to optimize agent behavior.