Wine pairing intelligence for AI assistants. Ask any MCP-compatible client (Claude, Cursor, Windsurf) for wine recommendations and get scored matches from a sommelier-grade algorithm. Supports API key and x402 (USDC on Base) payment.
SommelierX demonstrates solid tool definition quality with complete schemas, clear descriptions, and consistent parameter typing across all 7 tools. All tools have descriptions (194-250 chars, within baseline 34-392 range), input schemas with typed parameters, and language support. However, output schemas are not documented, responses are returned as plain text rather than structured objects. Error handling lacks recovery guidance and categorization. Tool names follow verb_noun convention well (pair_*, search_*, find_*, group_*). No tool annotations (readOnlyHint, destructiveHint) despite all being read-only operations. Missing per-item success/failure for batch operations and no pagination support despite search tools that could return large result sets.
Find dishes that pair well with a specific wine type or style. Provide a wine name (e.g. "Barolo", "Chardonnay", "Rioja") and get the top 10 matching dishes with scores. Best for: "I have a Barolo, what should I cook?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.01/call
Find the best wine that pairs well with multiple dishes at once. Provide 2-10 meal names and get wines that score well across all of them. Requires Pro tier. Best for: "What single wine works for a 3-course dinner?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.03/call (PRO)
Find the best wine pairings for a list of ingredients. Provide ingredient names in natural language (e.g. "salmon", "lemon", "dill") and get the top 5 wine matches with scores. The server automatically resolves ingredient names to the database. Best for: "What wine goes with these ingredients?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.02/call (PRO)
Find the best wine pairings for a specific dish or meal. Provide the meal name (e.g. "risotto ai funghi", "grilled salmon") and get the top 5 wine matches. The server searches for the meal in the database. Best for: "What wine goes with this dish?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.01/call
Output schemas not documented. All tools return plain text responses via `{ content: [{ type: 'text', text: result }] }` rather than structured objects. LLMs cannot parse results reliably or extract fields for downstream tool chaining.
No tool annotations despite all tools being read-only. Missing readOnlyHint declarations prevent clients from optimizing caching and safety assumptions.
Search tools (search_ingredients, search_meals) lack pagination support. No limit, offset, or cursor parameters. Large result sets will blow context window and degrade LLM reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Extract ingredients from a recipe URL and find wine pairings. Provide a URL to a recipe page and get the recipe name, extracted ingredients, and top 5 wine matches. Requires Pro tier. Best for: "What wine goes with this recipe?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.02/call (PRO)
Search for ingredients in the SommelierX database. Returns ingredient names, IDs, and groups. Use this to discover available ingredients before using pair_wine_with_ingredients. Best for: "What mushroom ingredients are available?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.005/call
Search for meals and dishes in the SommelierX database. Returns meal names, IDs, and descriptions. Use this to discover available meals before using pair_wine_with_meal or group_pairing. Best for: "What pasta dishes are in the database?" | Auth: API key (Bearer sk_live_...) or x402 payment (USDC on Base) | Price: $0.005/call
Error handling does not guide recovery. No error categorization (retryable vs user-fixable vs fatal). Error responses lack actionable next steps for LLM agents.
Descriptions embed pricing and auth details inline (e.g., '| Auth: API key... | Price: $0.02/call'). This metadata should be in tool annotations or server metadata, not descriptions. Clutters LLM reasoning.