MCP server for nutritional dish recommendation based on user biometric data
Both tools have descriptions but lack critical schema rigor. create_recommended_dishes has a complex Union type parameter (nutrientSceneName) that is poorly constrained, no enum, no validation guidance. get_all_nutrition_models has an empty input schema with no parameters documented. Neither tool documents output schema structure. Parameter descriptions are present but generic (e.g., '性别(0男1女)' lacks validation rules). No error handling guidance. No tool annotations. Descriptions are in Chinese, reducing LLM clarity in English-first contexts.
根据用户年龄 性别 身高 体重 可选营养模型名称,进行推荐菜品
获取所有营养模型,只返回id和clientNutrientSceneName字段
Union type parameter (nutrientSceneName) lacks enum constraint and validation guidance. Accepts string or list but no documentation of valid values, format, or how to discover them. LLM will hallucinate invalid model names.
Output schemas not documented. create_recommended_dishes returns a list of dish objects with nested ingredients, but the structure is inferred from code only. get_all_nutrition_models returns {data: [{id, clientNutrientSceneName}]} but this is not formally declared.
Hardcoded API token and credentials embedded in source code. Token is exposed as a module-level constant, violating secret-injection pattern. If this repo is public, the token is compromised.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Parameter descriptions lack validation rules. 'sex' accepts '0' or '1' but no enum constraint. 'age', 'height', 'weight' have no min/max bounds, LLM could pass negative or absurd values (age=999, height=0.01m).
Error handling returns raw exception strings (e.g., {error: str(e)}) with no recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal.