MCP server: find recipes by ingredients you have. 6 tools via TheMealDB (keyless). Free, MIT.
mcp-pantry defines 6 recipe-discovery tools with complete input schemas and reasonable descriptions. All tools are READ_ONLY and follow verb_noun naming (find_, search_, get_, list_). Descriptions are present (avg ~100 chars) but lack actionable detail on when to use each tool vs. alternatives, and parameter descriptions are entirely absent. Output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is basic (HTTP errors, missing recipes) with no recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Composition is sound: tools are single-purpose and chainable (e.g., search_recipe → recipe_details). Security is adequate for a read-only, keyless API.
Find recipes that contain ALL of the given ingredients (intersect). Returns recipes sorted by how many of your ingredients they use.
Get a random recipe (for when you can't decide).
Get full details for a specific recipe by its TheMealDB ID. Returns ingredients, measures, instructions, image, video.
List recipes in a category (e.g., 'Vegetarian', 'Beef', 'Dessert', 'Pasta', 'Seafood').
List recipes from a cuisine/area (e.g., 'Italian', 'Mexican', 'Japanese', 'Indian').
Search recipes by name (full or partial).
No parameter descriptions. 'ingredients', 'limit', 'name', 'id', 'category', 'cuisine' lack explanations of format, constraints, or expected values. LLMs cannot infer whether 'id' is numeric or alphanumeric, or what 'category' values are valid.
Output schemas not documented. Responses are JSON objects with fields like 'recipes', 'match_count', 'found', 'recipe', but LLMs have no schema to predict structure. This breaks downstream tool chaining and forces LLMs to guess field names.
Tool descriptions lack actionable context. 'Find recipes that contain ALL of the given ingredients' does not explain when to use find_by_ingredients vs. recipes_by_category, or what 'intersect' means to an LLM unfamiliar with set operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No tool annotations. All 6 tools are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. This forces LLMs to reason about safety instead of relying on metadata.
Error handling lacks recovery guidance. When no recipes match (find_by_ingredients) or a recipe is not found (recipe_details), responses are bare facts with no suggestion for next steps. E.g., 'No recipes match ALL of those ingredients' should suggest 'Try fewer ingredients or use recipes_by_category instead.'