FatSecret MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FATSECRET_CLIENT_ID | Yes | Your FatSecret API Client ID (used for both OAuth 2.0 and OAuth 1.0) | |
| FATSECRET_CLIENT_SECRET | Yes | Your FatSecret API Client Secret (OAuth 2.0 - for public food/recipe search) | |
| FATSECRET_CONSUMER_SECRET | Yes | Your FatSecret API Consumer Secret (OAuth 1.0 - for user profile/diary access) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
FatSecret MCP server provides two levels of access:
SETUP: If API credentials are not configured, call check_auth_status first. It will tell you if credentials are missing and guide through setup_credentials. Get credentials at https://platform.fatsecret.com/ → My Account → API Keys.
PUBLIC API (works after setup): Food search, recipes, brands, categories. These tools use OAuth 2.0 with the configured Client ID and Client Secret.
PROFILE API (requires user authorization): Food diary, saved meals, favorites, weight, exercises, profile. These tools require OAuth 1.0 user authorization. Before using any profile tool, call check_auth_status to see if the user is authenticated. If not, guide them through: start_auth → user visits URL and authorizes → complete_auth with verifier PIN. All credentials and tokens persist across sessions in ~/.fatsecret-mcp/config.json.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_foodsB | Search the FatSecret food database. Returns food names, descriptions, and basic nutrition info. On the Basic plan only search_expression, page_number and max_results (max 50) are used. |
| get_foodA | Get detailed nutritional information for a specific food by ID. Returns servings, calories, macros, and micronutrients. |
| find_food_by_barcodeA | Find food by barcode (GTIN-13). UPC-A, EAN-13 and EAN-8 supported. Premier exclusive. |
| autocomplete_foodsC | Get autocomplete suggestions for a partial food search expression. Premier exclusive. |
| search_recipesB | Search recipes with optional filters for calories, macros, prep time, and recipe types. |
| get_recipeA | Get detailed recipe information by ID including ingredients, directions, and nutrition. |
| get_food_categoriesC | Get the full list of food categories. Premier exclusive. |
| get_food_sub_categoriesA | Get food sub categories for a given food category. Premier exclusive. |
| get_brandsB | Get the list of food brands, optionally filtered by starting letter and type. Premier exclusive. |
| get_recipe_typesA | Get the full list of supported recipe type names. |
| get_food_entriesA | Get food diary entries for a date or a specific entry by ID. Requires profile auth (check_auth_status first). |
| get_food_entries_monthA | Get daily nutrition summary for a month. Returns calories and macros per day. Requires profile auth (check_auth_status first). |
| create_food_entryA | Add a food diary entry. Requires food_id, serving_id, and meal type. Requires profile auth (check_auth_status first). |
| edit_food_entryA | Edit an existing food diary entry. Cannot change the date. Requires profile auth (check_auth_status first). |
| delete_food_entryB | Delete a food diary entry by ID. Requires profile auth (check_auth_status first). |
| copy_food_entriesA | Copy food entries from one date to another, optionally filtered by meal. Requires profile auth (check_auth_status first). |
| copy_saved_meal_entriesA | Copy entries from a saved meal to a meal on a specific date. Requires profile auth (check_auth_status first). |
| get_favorite_foodsA | Get the user's favorite foods. Requires profile auth (check_auth_status first). |
| delete_favorite_foodC | Remove a food from the user's favorites. Requires profile auth (check_auth_status first). |
| get_most_eaten_foodsA | Get the user's most eaten foods, optionally filtered by meal. Requires profile auth (check_auth_status first). |
| get_recently_eaten_foodsA | Get the user's recently eaten foods, optionally filtered by meal. Requires profile auth (check_auth_status first). |
| get_favorite_recipesA | Get the user's favorite recipes. Requires profile auth (check_auth_status first). |
| add_favorite_recipeB | Add a recipe to the user's favorites. Requires profile auth (check_auth_status first). |
| delete_favorite_recipeA | Remove a recipe from the user's favorites. Requires profile auth (check_auth_status first). |
| get_saved_mealsA | Get the user's saved meals, optionally filtered by meal type. Requires profile auth (check_auth_status first). |
| create_saved_mealB | Create a new saved meal. Requires profile auth (check_auth_status first). |
| edit_saved_mealA | Edit a saved meal name, description, or associated meals. Requires profile auth (check_auth_status first). |
| delete_saved_mealA | Delete a saved meal. Requires profile auth (check_auth_status first). |
| get_saved_meal_itemsA | Get all food items in a saved meal. Requires profile auth (check_auth_status first). |
| add_saved_meal_itemB | Add a food item to a saved meal. Requires profile auth (check_auth_status first). |
| edit_saved_meal_itemA | Edit a food item in a saved meal (name or units). Cannot change serving_id. Requires profile auth (check_auth_status first). |
| delete_saved_meal_itemA | Remove a food item from a saved meal. Requires profile auth (check_auth_status first). |
| update_weightA | Record the user's weight for a date. First weigh-in requires goal_weight_kg and current_height_cm. Requires profile auth (check_auth_status first). |
| get_weight_monthA | Get the user's weight entries for a month. Requires profile auth (check_auth_status first). |
| get_exercisesA | Get the full list of supported exercise types and their IDs. Requires profile auth (check_auth_status first). |
| edit_exercise_entriesA | Shift exercise time between activities for a date. Moves minutes from one exercise to another. Requires profile auth (check_auth_status first). |
| get_exercise_entries_monthA | Get daily calories expended from exercise for a month. Requires profile auth (check_auth_status first). |
| save_exercise_templateA | Save the current day's exercise entries as a template for specified days of the week. Requires profile auth (check_auth_status first). |
| get_profileA | Get profile status information for the authenticated user. Requires profile auth (check_auth_status first). |
| create_foodA | Create a custom food with nutrition info. Premier exclusive. Requires profile auth (check_auth_status first). |
| check_auth_statusA | Check if API credentials and profile authentication are configured. Call this first to understand what setup is needed. |
| setup_credentialsA | Configure FatSecret API credentials. Get them at https://platform.fatsecret.com/ → My Account → API Keys. Saves to persistent config file. |
| start_authA | Start the OAuth 1.0 authorization flow for profile access. Returns an authorization URL the user must visit. Requires API credentials (setup_credentials first). |
| complete_authA | Complete the OAuth 1.0 flow with the verifier code from the authorization page. |
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 44 tools
Tools are mostly scoped to a single resource+action, and the food-lookup cluster (search_foods, autocomplete_foods, find_food_by_barcode, get_food) is clearly differentiated. Minor overlap remains in the exercise group (get_exercises, edit_exercise_entries, get_exercise_entries_month, save_exercise_template) where the boundaries between viewing types, viewing totals, and templating are less crisp, and the four auth tools need the 'first/next' sequencing cues to avoid confusion.
Nearly everything follows a predictable verb_noun snake_case pattern (get_*, create_*, edit_*, delete_*, add_*, copy_*, search_*). The only deviations are the auth verbs (check_/setup_/start_/complete_auth) and save_exercise_template vs create_saved_meal using different verbs for essentially the same 'make new' action.
44 tools is well past the heavy threshold, even for a broad API like FatSecret. The set spans eight sub-domains (auth, food lookup, diary, saved meals, recipes, favorites, exercise, weight), but the surface is large enough that an agent must navigate clusters to find the right operation rather than act directly.
There are real dead ends: exercise entries can be edited and summarized monthly but no tool creates an exercise entry, yet save_exercise_template presumes entries exist; favorites are asymmetric (get/delete_favorite_food but no add_favorite_food, while recipes have full add/get/delete); and custom foods can be created but never edited or deleted. These gaps will cause agent failures on otherwise core logging workflows.