MCP server for Paprika Recipe Manager with AI-generated food photography using Flux
Server has 6 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (create_, update_, delete_, get_, list_, generate_). Descriptions are present and moderately detailed (100-250 chars), explaining what each tool does and key parameters like cost/image generation. However, parameter descriptions lack specificity on constraints (e.g., no enum for difficulty levels, no min/max for limits). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or actionable error messages visible in code. Security: credentials injected via config (good), but no permission gates or audit logging. Composition is sound, tools are single-responsibility and chainable (e.g., list_recipes returns uid for get_recipe).
Create a new recipe in Paprika. Auto-generates professional AI food photography (~$0.002 per image using Replicate). Set generate_image=false to disable.
Delete a recipe from Paprika by its UID.
Generate a professional AI food photo for an existing recipe using Flux. Costs ~$0.003 per image. Automatically uses brief ingredients from recipe description if available.
Get a specific recipe by UID with full details including ingredients, directions, and metadata.
List all recipes in Paprika with optional filtering by name, ingredients, or time constraints.
Update a recipe by providing only the fields you want to change. All fields except 'uid' are optional. Omitted fields remain unchanged.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Forces agents to guess what data is returned.
Parameter constraints missing. 'difficulty' accepts free-form strings instead of enum (Easy|Medium|Hard). 'limit' has no min/max bounds. 'ingredient_match_mode' has enum but others don't. Invites invalid LLM inputs.
Error handling absent. No recovery guidance, no actionable error messages, no categorization (retryable vs fatal). Code shows no try-catch blocks or error response shaping visible in server.py excerpt.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Destructive operation (delete_recipe) lacks confirmation/dry-run pattern. No guard against accidental deletion. Agents can permanently delete recipes without safeguard.
No audit logging or permission gates. Tools accept credentials via config but do not log who called what, when, or with what parameters. No permission checks before destructive operations.