MCP server for nutrition tracking, recipe suggestions, and OCR grocery bill scanning with Gemini AI integration
This MCP server exhibits significant definition quality gaps across most tools. While tool names follow verb_noun conventions (get_nutrition, suggest_dishes, lock_dish), parameter descriptions are sparse or missing, input schemas lack complete type definitions, and output schemas are not documented. The validate tool is a security red flag, it requires MY_NUMBER environment variable as a tool parameter, violating secret injection patterns. Most tools have descriptions, but they are verbose and include example values (e.g., '2 eggs', '100g chicken breast') that LLMs tend to reuse literally. Only 2 of 6 tools have complete, typed input schemas visible in the code; others are inferred from Pydantic models not shown. Error handling is absent, no recovery guidance, actionable error messages, or categorization. The server combines API logic with MCP registration, making schema visibility unclear.
Use this tool to get detailed nutrition information for any food or meal, and log it to a text file for tracking. Provide the user ID, food name, and the amount (with units, e.g., '2 eggs', '100g chicken breast'). The tool will return calories, macronutrients, and other nutrition facts as estimated by Gemini AI, and will log the entry in a plain text file (nutrition_log.txt) for future reference.
Log a custom dish and its nutrition facts to the nutrition tracker (text file database). Provide the user ID, dish name, and a nutrition dictionary (calories, protein, carbs, fat). The tool will append this entry to nutrition_log.txt for the user, with amount=1. This allows custom or suggested dishes to be included in the user's daily nutrition summary.
Returns the user's current nutrition scoreboard (totals) from nutrition_totals.txt. Use this to see the running total of calories, protein, carbs, and fat consumed by the user so far.
Scan a grocery bill image and extract a list of purchased items using Azure AI Vision OCR. Provide a base64-encoded image of the grocery bill to extract item names.
validate tool exposes MY_NUMBER environment variable as a tool parameter, secrets must never be tool parameters. This leaks credentials into agent traces and prompt history.
Descriptions contain concrete example values (e.g., '2 eggs', '100g chicken breast', 'apple', '100g rice') that LLMs tend to reuse literally in real calls, causing failures. Replace examples with format constraints and enums.
lock_dish nutrition parameter documented as 'object' with prose constraint '(must include: calories, protein, carbs, fat)', no typed schema visible. LLMs cannot validate the structure. Require explicit typed object schema.
scan_grocery_bill description omits critical details: what happens to the extracted items? Does the tool log them? Return them? No output schema documented. Response structure is unclear.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Suggests 3 creative, healthy dish names using ONLY the provided ingredients. Provide a list of ingredients (e.g., ['egg', 'spinach', 'cheese']). The tool will return a JSON array of 3 possible dish names. Powered by Gemini.
Validation tool required by Puch - returns MY_NUMBER environment variable
No error handling or recovery guidance visible. Tools lack descriptions of failure modes, retryability, and next steps. E.g., 'If Gemini cannot estimate nutrition for a food, try a different food or amount' is not present.
Output schemas not documented. LLMs cannot infer what fields get_nutrition returns or how to chain calls (e.g., does it return a log ID for later reference?).
Tool registration not visible in provided source. Schema definitions appear inferred from Pydantic model type hints (GetNutritionRequest, etc.) rather than explicit JSON Schema. This prevents verification that schemas match tool definitions.
lock_dish combines two concerns: logging a custom dish AND updating totals. Consider separating into lock_dish (write to log) and update_nutrition_totals (recalculate board), so agents can compose as needed.