Mealie MCP has clear, well-structured tool definitions with consistent naming (verb_noun pattern) and reasonable descriptions. All 9 tools have input schemas with type definitions and parameter descriptions. However, descriptions lack LLM-optimized depth, most are 50-150 chars and omit critical context like when to use each tool, prerequisites, or error recovery guidance. Output schemas are documented in descriptions but not formally declared. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Parameter descriptions are present but generic; e.g., 'UUID of the recipe to insert' lacks format validation hints. Error handling is minimal, tools raise exceptions without actionable recovery guidance.
Add the ingredients of a recipe to a given shopping list. - shopping_list_id: UUID of the target shopping list - recipe_params: payload following Mealie's ShoppingListAddRecipeParamsBulk schema, e.g.: { "recipeId": "uuid-of-recipe", "recipeIncrementQuantity": 1, # optional, defaults to 1 "recipeIngredients": [ # optional override { "name": "2 carrots", "notes": "organic", "purchased": false }, ... ] } Returns the updated shopping list.
Add a recipe entry to the meal plan. Parameters: - date: year, month, and day to schedule the recipe (e.g. "2025-07-15"). - meal_type: Meal slot (e.g. "breakfast", "lunch", "dinner"). - recipe_id: UUID of the recipe to insert. Returns: - The created MealPlanEntry object, as returned by Mealie.
Create a random meal according to the household's meal plan settings. Parameters: - date: year, month, and day to schedule the recipe (e.g. "2025-07-15"). - meal_type: Meal slot (e.g. "breakfast", "lunch", "dinner"). Returns: - The created MealPlanEntry object, as returned by Mealie.
Retrieve every shopping list in the household. Returns a list of ShoppingListOut objects as defined by Mealie.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk classifications (READ_ONLY, WRITE) in metadata but not exposed via MCP tool annotations, preventing clients from optimizing execution or warning users about destructive operations.
Descriptions lack LLM-optimized depth. Most tool descriptions (50-150 chars) omit context on when to use each tool vs. alternatives, prerequisites, or error recovery. E.g., 'Fetch the details of a single recipe by its ID' (50 chars) doesn't explain when to call get_recipe vs. search_recipes or what happens if the ID is invalid.
No error handling guidance. Tools raise exceptions without actionable recovery messages. E.g., if add_recipe_to_meal_plan fails due to invalid date format or non-existent recipe_id, the LLM receives a raw error with no hint to validate inputs or call search_recipes first.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 71 | <=2025-11-25 | v2 |
Fetch the details of a single recipe by its ID.
Fetch the details (contents) of a single shopping list. Parameters: - list_id: UUID of the shopping list to retrieve. Returns: - A dict representing the ShoppingListOut object, e.g.: { "id": "uuid-of-list", "name": "Weekly Groceries", "items": [ { "id": "item-uuid", "name": "2 carrots", "notes": "organic", "purchased": false }, ... ], "created": "2023-04-12T14:23:00Z", "updated": "2023-04-13T09:45:00Z" }
Retrieve all recipes scheduled on the meal plan. Returns: - A list of meals planned with { "page": 1, "per_page": 10, "total": 0, "total_pages": 0, "items": [ { "date": "2019-08-24", "entryType": "breakfast", "title": "", "text": "", "recipeId": "31545f76-b27f-4c7c-9faf-229771396df1", "id": 0, "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55", "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b", "householdId": "b5d33c47-da83-44b4-b7bf-7ab3c5485f36", "recipe": { ... } } ], "next": "string", "previous": "string" }
Retrieve all recipes from Mealie. Returns: - A list of recipe summary objects, as returned by the /api/recipes endpoint.
Search recipes by name or ingredient. Parameters: - query: text to search for in recipes Returns: - A list of recipe objects matching the query, as returned by Mealie's API.
Parameter descriptions lack format/constraint hints. 'UUID of the recipe to insert' doesn't specify UUID format (RFC 4122), length, or validation rules. LLMs may pass invalid UUIDs without guidance on what constitutes a valid one.
Output schemas documented in descriptions but not formally declared. Responses are returned as dicts/lists without explicit JSON Schema definitions. Clients cannot validate responses or infer downstream tool compatibility without parsing docstrings.