An MCP server for Saffron GraphQL operations providing recipe management, meal planning, and cookbook operations
The Saffron MCP server provides 15 tools for recipe and meal-planning management with generally adequate naming and description coverage. However, significant gaps exist in parameter documentation, output schema clarity, and error handling guidance. Most tools have descriptions (100% coverage) and follow verb_noun naming conventions, but ~30% of parameters lack descriptions or have minimal documentation. Output schemas are not explicitly documented in the visible code. Error handling is present but lacks recovery guidance and categorization. The server demonstrates competent schema structure using Zod validators and GraphQL integration, but falls short of production-grade quality for agent-facing tools.
Get your cookbooks
Meal Planning: Create a new menu item
Meal Planning: Create a new menu note. A note can be an informal/family recipe, a note to yourself about the meal plan, etc.
Create a new recipe
Meal Planning: Delete a menu item
Meal Planning: Delete a menu note
Get the full recipe by its ID
Output schemas not documented. No visible schema definitions for return types. LLMs cannot plan downstream calls or extract required fields when tool responses lack typed schemas.
Missing parameter descriptions on several inputs. 'id' parameter in get_recipe_by_id lacks context. 'ids' in delete_menu_item is typed as 'string' but described as 'The ID', should clarify if it accepts comma-separated values or a single ID, and provide format constraints.
Error handling lacks recovery guidance. No visible error messages that tell LLMs what to do next (e.g., 'Recipe not found. Try import_recipe_from_website to create one.'). Errors from GraphQL mutations are not caught or annotated with remediation steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Import a recipe from a website. Returns the extracted recipe data that can then be used to create a new recipe through the createRecipe tool.
Get your user information (name, email, subscription status, etc.)
Meal Planning: Get all menu items and menu notes for a given date range
Get short summary of recipes by cookbook and section ID. SectionIds are globally unique and can be found through the sections_by_cookbook_id tool.
Get sections by cookbook ID. CookbookIds are globally unique and can be found through the cookbooks tool.
Meal Planning: Update a menu item
Meal Planning: Update a menu note
Update an existing recipe
Destructive operations (delete_menu_item, delete_menu_note) lack confirmation or dry-run support. An agent could accidentally delete critical meal plans without a safety mechanism.
Parameter type mismatches and ambiguities. delete_menu_item 'ids' param is type 'string' but conceptually is an ID, unclear if it accepts single or comma-separated IDs. create_menu_item takes array of objects but update_menu_item takes single object, inconsistent API shapes.
No pagination or result limits documented. menu_planner and recipes_by_cookbook_and_section_id return lists but lack limit/offset parameters. Large result sets could exhaust context window.
Tool composition gaps. Creating a recipe requires sectionId, but the happy-path flow (discover cookbook → find section → create recipe) relies on cross-tool ID chaining. Responses must guarantee they include all IDs needed for subsequent calls.