mfp-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MFP_COOKIE | No | MyFitnessPal session cookie (__Secure-next-auth.session-token). Only needed to actually call tools. | |
| MFP_USERNAME | No | MyFitnessPal username (not email); only needed if profile lookup fails. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| fitness_get_dayA | Nutrition summary, diary entries, the MyFitnessPal daily note, and the local feel note for a day. date: YYYY-MM-DD (default: today). |
| fitness_search_foodA | Search MyFitnessPal's food database and return candidate matches. Each candidate has name, brand, calories, macros, serving, and the food_id + weight_id to pass to fitness_log_food to log exactly that item. |
| fitness_draft_foodA | Draft a food entry: numbered options to choose from before logging. Each option lists every serving size with its calories/protein/carbs/fat for the whole entry (serving × quantity) and a suggested_serving. The min_/max_ targets (grams; calories in kcal) also apply to the whole entry: options that fit come first, near misses follow, flagged fits_targets=false. A food you've confirmed before for this query is pinned to the top. The order is fixed once drafted. Log a choice with fitness_log_food(draft_id=..., option=N, serving=M); call this again with different targets to refine. Drafts last 24 hours. date: YYYY-MM-DD (default: today). |
| fitness_log_foodA | Log a food to the real MyFitnessPal diary. Preferred: pick from a fitness_draft_food draft with draft_id + option (+ serving, default the option's suggested_serving). meal, quantity, and date default to the draft's. pin=True remembers the choice so logging the same query later reuses this food and serving. With only meal: breakfast|lunch|dinner|snacks (default breakfast) or any meal name on the account. quantity: number of servings (default 1). date: YYYY-MM-DD (default today). |
| fitness_list_food_pinsA | List remembered food choices (query → food and serving) that fitness_log_food reuses. Stored locally only. |
| fitness_clear_food_pinA | Forget a remembered food choice for |
| fitness_delete_foodA | Remove a food from the MyFitnessPal diary by name match. query: text matched against logged entry names (e.g. "banana"). If this
matches nothing, the error lists what's actually logged that day/meal — use
that to retry with a better query. If it matches more than one entry (and
none is an exact name match), the error lists the candidates; narrow |
| fitness_modify_foodA | Replace a MyFitnessPal diary entry: deletes the match, then adds a food. query: the existing entry to replace (name match) within |
| fitness_log_weightA | Log a weight measurement to MyFitnessPal. weight: in your MyFitnessPal account's display unit (kg or lbs). Logging twice for the same date updates that day's measurement. date: YYYY-MM-DD (default: today). |
| fitness_log_waterA | Log water to the real MyFitnessPal water tracker. amount: quantity to add to the day's total. unit: cup | fl_oz | ml | l
(common spellings like "cups", "oz", "fl oz", "milliliters", "litres" are
accepted). replace: set the day's total to |
| fitness_get_exerciseA | Read the MyFitnessPal exercise diary (cardio + strength) for a day. date: YYYY-MM-DD (default: today). |
| fitness_get_exercise_entriesA | List a day's cardio and strength exercise-diary entries. Each entry has its section, name, and that section's columns (cardio: minutes, calories_burned; strength: sets, reps_set, weight_set). entry_id is informational only — fitness_delete_exercise deletes by name match. date: YYYY-MM-DD (default: today). |
| fitness_delete_exerciseA | Remove exercise-diary entries by name match (case-insensitive). query: text matched against logged exercise names. By default deletes
exactly one entry, like fitness_delete_food: an exact name match wins;
otherwise several matches raise an error listing the candidates, and no
match raises an error listing what's actually logged. Of several identical
rows (same name and columns), one is removed.
all_matches: delete every entry whose name contains |
| fitness_get_noteA | Read the MyFitnessPal daily diary note (the free-text 'Notes' box at the bottom of the day) straight from your account. date: YYYY-MM-DD (default: today). |
| fitness_log_noteA | Write the MyFitnessPal daily diary note (the free-text 'Notes' box at the bottom of the day). This is your real MFP note, synced to your account — distinct from the local-only fitness_log_feel. text: the note body. append: add to the existing note on a new line instead of replacing it. date: YYYY-MM-DD (default: today). |
| fitness_log_feelB | Save a 'how I feel today' note. Stored locally only — never sent to MyFitnessPal. rating: optional 1-5. date: YYYY-MM-DD (default: today). |
| fitness_get_trendsA | A single metric over a date range, for charts/analysis. metric: weight | calories_in | protein | carbs | fat. start/end: YYYY-MM-DD (default: last 30 days). Returns {metric, points: [{day, value}, ...]} with nulls omitted. |
| fitness_bulk_exportA | Export a whole date range at once for analysis: per-day nutrition totals, food entries with macros, the MyFitnessPal daily note, and local feel notes. Read-only. start/end: YYYY-MM-DD (default: last 30 days ending today). sync_first: gap-fill from MyFitnessPal before exporting. Off by default so large historical exports stay fast on cached data. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Most tools target a clearly distinct resource+action, and the food workflow (search -> draft -> log) is well delineated. However, fitness_get_exercise and fitness_get_exercise_entries both appear to read the same exercise diary and could easily be confused.
Every tool uses the same fitness_verb_noun snake_case pattern (get_day, log_food, delete_food, list_food_pins). No mixing of conventions.
18 tools is on the heavier side but each covers a genuine slice of the domain (food, exercise, notes, weight, water, trends, export, pins). Slightly over but defensible.
Strong coverage: full food CRUD plus search/draft/pins, water, weight, notes, trends, and bulk export. The only notable gap is adding exercise entries (read/delete exist, but logging appears handled by external sync), which agents can work around.