Model Context Protocol server for the FatSecret platform API (OAuth 1.0a user-scoped). Deployable as stdio (default) or SSE via mcp-proxy + Docker.
Server has 9 well-named tools with complete input schemas and descriptions. Naming follows verb_noun convention (search_foods, get_food, log_food, etc.). All tools have descriptions 50-200+ chars. Input parameters are typed and described. However, output schemas are not documented in the source, LLMs cannot see what fields to expect from responses. Error handling is minimal; no recovery guidance or actionable error messages visible. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Parameter descriptions lack format constraints (e.g., date format, unit enums). Missing idempotency guidance for write operations.
Create a custom food entry in the user's FatSecret database with specified nutritional values.
Delete a food entry from the user's diary by food_entry_id.
Get all food entries logged in the user's diary for a specific date, with totals for all nutrients.
Get all food entries for a date range (up to 31 days), with daily breakdowns and range totals.
Get detailed information about a specific food by ID, including all available servings and their nutritional values.
Log a food by amount (weight/volume) instead of serving count. Automatically converts units and finds the best metric serving match.
Output schemas not documented. LLMs cannot see what fields responses contain, forcing them to guess downstream field names and risk broken tool chains.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). delete_entry and replace_entry are destructive but unmarked; LLMs cannot distinguish safe reads from risky writes.
Parameter descriptions lack format constraints. 'date' params say 'YYYY-MM-DD format' but no enum/pattern validation visible. 'meal' param accepts free-form strings; should be enum (Breakfast|Lunch|Dinner|Other).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Log a food entry to the user's FatSecret diary for a specific date and meal. Requires food_id and serving_id from search/get operations.
Replace an existing diary entry with new serving/amount/meal information.
Search the FatSecret food database by name. Returns matching foods with IDs, descriptions, and serving options.
No error handling guidance. FatSecretError exceptions caught in code but no recovery hints returned to LLM (e.g., 'User not found. Try search_foods() first.').
Destructive operations (delete_entry) lack confirmation/dry-run pattern. Agents can permanently delete diary entries without a safety gate.