Better Mealie MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEALIE_TIMEOUT | No | Per-request timeout, seconds (default 60) | 60 |
| MCP_SERVER_NAME | No | MCP name advertised to clients (default Mealie) | Mealie |
| MEALIE_BASE_URL | No | Mealie base URL (default http://localhost:9925) | http://localhost:9925 |
| MEALIE_PASSWORD | No | Alternative: logs in at startup to fetch a token | |
| MEALIE_USERNAME | No | Alternative: logs in at startup to fetch a token | |
| MEALIE_API_TOKEN | No | Long-lived API token (preferred) — Mealie → Profile → Manage API Tokens | |
| MEALIE_VERIFY_SSL | No | Verify TLS cert; 'false' to accept self-signed (default true) | true |
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": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_app_aboutB | Get general application information |
| list_app_about_startup_infoC | returns helpful startup information |
| list_app_about_themeA | Get's the current theme settings |
| list_app_about_branding_logoB | Get's the custom branding logo, if configured |
| create_auth_tokenD | Get Token |
| list_auth_oauthC | Oauth Login |
| list_auth_oauth_callbackC | Oauth Callback |
| list_auth_oauth_native_configA | Return the parameters a native client needs to build its own OIDC authorization request. |
| create_auth_oauth_native_tokenA | Exchange a native client's authorization code for a Mealie token. The native client owns PKCE and state, so the exchange happens server-side without a browser session cookie. This lets passkey-capable system-browser logins (e.g. Pocket ID) work, which the cookie-coupled web callback cannot support. |
| list_auth_reverse_proxyC | Authenticate a user using a username forwarded by a trusted reverse proxy header |
| create_auth_refreshA | Exchange a valid session token for a fresh one. The new token carries over the remember-me choice recorded on the old one, so refreshing doesn't downgrade a remembered session to one that dies with the browser. |
| create_auth_logoutD | Logout |
| create_users_registerC | Register New User |
| list_users_selfB | Get Logged In User |
| list_users_self_ratingsC | Get Logged In User Ratings |
| get_users_self_ratings_by_recipeC | Get Logged In User Rating For Recipe |
| list_users_self_favoritesC | Get Logged In User Favorites |
| update_users_passwordC | Resets the User Password |
| update_users_by_itemD | Update User |
| create_users_forgot_passwordC | Sends an email with a reset link to the user |
| create_users_reset_passwordC | Resets the user password |
| create_users_by_id_imageC | Updates a User Image |
| create_users_api_tokensD | Create api_token in the Database |
| delete_users_api_tokens_by_tokenC | Delete api_token from the Database |
| list_users_by_id_ratingsC | Get user's rated recipes |
| list_users_by_id_favoritesC | Get user's favorited recipes |
| create_users_by_id_ratings_by_slugC | Sets the user's rating for a recipe |
| create_users_by_id_favorites_by_slugC | Adds a recipe to the user's favorites |
| delete_users_by_id_favorites_by_slugB | Removes a recipe from the user's favorites |
| list_households_cookbooksD | Get All |
| update_households_cookbooksC | Update Many |
| create_households_cookbooksD | Create One |
| get_households_cookbooks_by_itemD | Get One |
| update_households_cookbooks_by_itemD | Update One |
| delete_households_cookbooks_by_itemD | Delete One |
| list_households_events_notificationsD | Get All |
| create_households_events_notificationsD | Create One |
| get_households_events_notifications_by_itemD | Get One |
| update_households_events_notifications_by_itemD | Update One |
| delete_households_events_notifications_by_itemD | Delete One |
| create_households_events_notifications_by_item_testD | Test Notification |
| list_households_recipe_actionsD | Get All |
| create_households_recipe_actionsD | Create One |
| get_households_recipe_actions_by_itemD | Get One |
| update_households_recipe_actions_by_itemD | Update One |
| delete_households_recipe_actions_by_itemD | Delete One |
| create_households_recipe_actions_by_item_trigger_by_reciD | Trigger Action |
| list_households_selfC | Returns the Household Data for the Current User |
| get_households_self_recipes_by_recipe_slugC | Returns recipe data for the current household |
| list_households_membersC | Returns all users belonging to the current household |
| list_households_preferencesD | Get Household Preferences |
| update_households_preferencesD | Update Household Preferences |
| update_households_permissionsD | Set Member Permissions |
| list_households_statisticsD | Get Statistics |
| list_households_invitationsC | Get Invite Tokens |
| create_households_invitationsC | Create Invite Token |
| create_households_invitations_emailD | Email Invitation |
| list_households_shopping_listsD | Get All |
| create_households_shopping_listsD | Create One |
| get_households_shopping_lists_by_itemD | Get One |
| update_households_shopping_lists_by_itemD | Update One |
| delete_households_shopping_lists_by_itemD | Delete One |
| update_households_shopping_lists_by_item_label_settingsD | Update Label Settings |
| create_households_shopping_lists_by_item_recipeC | Add Recipe Ingredients To List |
| create_households_shopping_lists_by_item_recipe_by_recipC | Add Single Recipe Ingredients To List |
| create_households_shopping_lists_by_item_recipe_by_rec_2C | Remove Recipe Ingredients From List |
| list_households_shopping_itemsD | Get All |
| update_households_shopping_itemsD | Update Many |
| create_households_shopping_itemsD | Create One |
| delete_households_shopping_itemsC | Delete Many |
| create_households_shopping_items_create_bulkD | Create Many |
| get_households_shopping_items_by_itemD | Get One |
| update_households_shopping_items_by_itemD | Update One |
| delete_households_shopping_items_by_itemD | Delete One |
| list_households_webhooksD | Get All |
| create_households_webhooksD | Create One |
| create_households_webhooks_rerunB | Manually re-fires all previously scheduled webhooks for today |
| get_households_webhooks_by_itemD | Get One |
| update_households_webhooks_by_itemD | Update One |
| delete_households_webhooks_by_itemD | Delete One |
| create_households_webhooks_by_item_testD | Test One |
| list_households_mealplans_rulesD | Get All |
| create_households_mealplans_rulesD | Create One |
| get_households_mealplans_rules_by_itemD | Get One |
| update_households_mealplans_rules_by_itemD | Update One |
| delete_households_mealplans_rules_by_itemD | Delete One |
| list_households_mealplans_icalB | Returns the token for the household's meal plan iCal feed, or null if the feed is disabled |
| create_households_mealplans_icalA | Enables the meal plan iCal feed, replacing any existing token so old feed URLs stop working |
| delete_households_mealplans_icalC | Disables the meal plan iCal feed |
| get_households_mealplans_ical_by_tokenB | Public iCal feed of the household's meal plan. No authentication is required; access is controlled by the secret token in the URL. |
| list_households_mealplansD | Get All |
| create_households_mealplansD | Create One |
| list_households_mealplans_todayC | Get Todays Meals |
| create_households_mealplans_randomC |
Refer to the meal plan settings routes for more information on how rules can be applied to the random meal selector. |
| get_households_mealplans_by_itemD | Get One |
| update_households_mealplans_by_itemD | Update One |
| delete_households_mealplans_by_itemD | Delete One |
| create_groups_ai_providers_providersD | Create Ai Provider |
| create_groups_ai_providers_providers_testA | Test connectivity for a provider configuration before it has been saved. |
| create_groups_ai_providers_providers_by_provider_testA | Test connectivity for an already-saved provider. Accepts optional unsaved edits to test against instead of what's in the database - e.g.
while editing a provider, the caller may have changed the model/base_url but left the API
key blank (meaning "keep the existing one"), so a plain "unsaved" test can't be used since
it has no way to supply that key. An |
| get_groups_ai_providers_providers_by_providerD | Get Ai Provider |
| update_groups_ai_providers_providers_by_providerC | Update Ai Provider |
| delete_groups_ai_providers_providers_by_providerC | Delete Ai Provider |
| list_groups_ai_providers_settingsC | Get Ai Provider Settings |
| update_groups_ai_providers_settingsD | Update Ai Provider Settings |
| list_groups_ai_providers_promptsD | Get Ai Prompts |
| update_groups_ai_providers_prompts_by_prompt_nameA | Append to or override a prompt. The group-wide instructions ( |
| delete_groups_ai_providers_prompts_by_prompt_nameC | Reset a prompt to the default |
| list_groups_householdsC | Get All Households |
| get_groups_households_by_household_slugC | Get One Household |
| list_groups_selfB | Returns the Group Data for the Current User |
| list_groups_membersB | Returns all users belonging to the current group |
| get_groups_members_by_username_orC | Returns a single user belonging to the current group |
| list_groups_preferencesC | Get Group Preferences |
| update_groups_preferencesD | Update Group Preferences |
| list_groups_storageC | Get Storage |
| create_groups_migrationsC | Start Data Migration |
| list_groups_reportsD | Get All |
| get_groups_reports_by_itemD | Get One |
| delete_groups_reports_by_itemD | Delete One |
| list_groups_labelsD | Get All |
| create_groups_labelsD | Create One |
| list_groups_labels_emptyB | Returns a list of labels that are not used by any food or shopping list item |
| create_groups_labels_mergeA | Merges the from_id label into the to_id label, then deletes from_id. |
| get_groups_labels_by_itemD | Get One |
| update_groups_labels_by_itemD | Update One |
| delete_groups_labels_by_itemD | Delete One |
| create_groups_seeders_foodsD | Seed Foods |
| create_groups_seeders_unitsD | Seed Units |
| list_recipes_exportsC | Get Recipe Formats And Templates |
| list_recipes_by_slug_exportsC | Parameters
|
| create_recipes_test_scrape_urlC | Test Parse Recipe Url |
| create_recipes_create_html_or_jsonB | Takes in raw HTML or a https://schema.org/Recipe object as a JSON string and parses it like a URL. A complete recipe exported from Mealie (the JSON from an export zip, or the recipe as returned by the API) is imported with its full structure instead of being parsed as schema.org. |
| create_recipes_create_html_or_json_streamB | Takes in raw HTML or a https://schema.org/Recipe object as a JSON string and parses it like a URL, streaming progress via SSE. A complete recipe exported from Mealie (the JSON from an export zip, or the recipe as returned by the API) is imported with its full structure instead of being parsed as schema.org. |
| create_recipes_create_urlC | Takes in a URL and attempts to scrape data and load it into the database |
| create_recipes_create_url_streamC | Takes in a URL and attempts to scrape data and load it into the database, streaming progress via SSE |
| create_recipes_create_aiA | Create a recipe from any combination of content (HTML, JSON, or text), images, and a URL, using AI. Optionally specify a language for it to translate the recipe to. |
| create_recipes_create_ai_streamB | Create a recipe from any combination of content (HTML, JSON, or text), images, and a URL, using AI, streaming progress via SSE |
| create_recipes_create_url_bulkC | Takes in a URL and attempts to scrape data and load it into the database |
| create_recipes_create_zipC | Create recipe from archive |
| list_recipesD | Get All |
| update_recipesD | Update Many |
| create_recipesC | Takes in a JSON string and loads data into the database as a new entry |
| patch_recipesD | Patch Many |
| list_recipes_suggestionsD | Suggest Recipes |
| get_recipes_by_slugB | Takes in a recipe's slug or id and returns all data for a recipe |
| update_recipes_by_slugC | Updates a recipe by existing slug and data. |
| delete_recipes_by_slugB | Deletes a recipe by slug |
| patch_recipes_by_slugC | Updates a recipe by existing slug and data. |
| create_recipes_by_slug_duplicateC | Duplicates a recipe with a new custom name if given |
| patch_recipes_by_slug_last_madeC | Update a recipe's last made timestamp |
| update_recipes_by_slug_imageC | Update Recipe Image |
| create_recipes_by_slug_imageD | Scrape Image Url |
| delete_recipes_by_slug_imageC | Delete Recipe Image |
| create_recipes_by_slug_assetsC | Upload a file to store as a recipe asset |
| create_recipes_by_slug_assets_urlC | Download an image from a URL and store it as a recipe asset. |
| list_recipes_by_slug_commentsC | Get all comments for a recipe |
| create_recipes_bulk_actions_tagC | Bulk Tag Recipes |
| create_recipes_bulk_actions_settingsD | Bulk Settings Recipes |
| create_recipes_bulk_actions_categorizeC | Bulk Categorize Recipes |
| create_recipes_bulk_actions_deleteC | Bulk Delete Recipes |
| list_recipes_bulk_actions_exportD | Get Exported Data |
| create_recipes_bulk_actions_exportC | Bulk Export Recipes |
| list_recipes_bulk_actions_export_by_export_downloadC | Returns a token to download a file |
| delete_recipes_bulk_actions_export_purgeA | Remove all exports data, including items on disk without database entry |
| get_recipes_shared_by_tokenD | Get Shared Recipe |
| list_recipes_shared_by_token_zipB | Get a recipe and its original image as a Zip file |
| list_recipes_timeline_eventsD | Get All |
| create_recipes_timeline_eventsD | Create One |
| get_recipes_timeline_events_by_itemD | Get One |
| update_recipes_timeline_events_by_itemD | Update One |
| delete_recipes_timeline_events_by_itemD | Delete One |
| update_recipes_timeline_events_by_item_imageC | Update Event Image |
| list_organizers_categoriesC | Returns a list of available categories in the database |
| create_organizers_categoriesC | Creates a Category in the database |
| list_organizers_categories_emptyA | Returns a list of categories that do not contain any recipes |
| create_organizers_categories_mergeA | Merges the from_id category into the to_id category, then deletes from_id. |
| get_organizers_categories_by_itemC | Returns a list of recipes associated with the provided category. |
| update_organizers_categories_by_itemC | Updates an existing Tag in the database |
| delete_organizers_categories_by_itemA | Removes a recipe category from the database. Deleting a category does not impact a recipe. The category will be removed from any recipes that contain it |
| get_organizers_categories_slug_by_category_slugC | Returns a category object with the associated recieps relating to the category |
| list_organizers_tagsC | Returns a list of available tags in the database |
| create_organizers_tagsC | Creates a Tag in the database |
| list_organizers_tags_emptyA | Returns a list of tags that do not contain any recipes |
| create_organizers_tags_mergeA | Merges the from_id tag into the to_id tag, then deletes from_id. |
| get_organizers_tags_by_itemC | Returns a list of recipes associated with the provided tag. |
| update_organizers_tags_by_itemC | Updates an existing Tag in the database |
| delete_organizers_tags_by_itemA | Removes a recipe tag from the database. Deleting a tag does not impact a recipe. The tag will be removed from any recipes that contain it |
| get_organizers_tags_slug_by_tag_slugD | Get One By Slug |
| list_organizers_toolsD | Get All |
| create_organizers_toolsD | Create One |
| list_organizers_tools_emptyB | Returns a list of tools that are not used by any recipe |
| create_organizers_tools_mergeB | Merges the from_id tool into the to_id tool, then deletes from_id. |
| get_organizers_tools_by_itemD | Get One |
| update_organizers_tools_by_itemD | Update One |
| delete_organizers_tools_by_itemD | Delete One |
| get_organizers_tools_slug_by_tool_slugC | Get One By Slug |
| list_shared_recipesD | Get All |
| create_shared_recipesD | Create One |
| get_shared_recipes_by_itemD | Get One |
| delete_shared_recipes_by_itemD | Delete One |
| list_commentsD | Get All |
| create_commentsD | Create One |
| get_comments_by_itemD | Get One |
| update_comments_by_itemD | Update One |
| delete_comments_by_itemD | Delete One |
| create_parser_ingredientC | Parse Ingredient |
| create_parser_ingredientsD | Parse Ingredients |
| list_foodsD | Get All |
| create_foodsD | Create One |
| list_foods_emptyB | Returns a list of foods that are not used by any recipe |
| update_foods_mergeD | Merge One |
| get_foods_by_itemD | Get One |
| update_foods_by_itemD | Update One |
| delete_foods_by_itemD | Delete One |
| list_unitsD | Get All |
| create_unitsD | Create One |
| update_units_mergeD | Merge One |
| get_units_by_itemD | Get One |
| update_units_by_itemD | Update One |
| delete_units_by_itemD | Delete One |
| list_admin_aboutC | Get general application information |
| list_admin_about_statisticsC | Get App Statistics |
| list_admin_about_checkD | Check App Config |
| list_admin_usersD | Get All |
| create_admin_usersD | Create One |
| create_admin_users_unlockD | Unlock Users |
| get_admin_users_by_itemD | Get One |
| update_admin_users_by_itemD | Update One |
| delete_admin_users_by_itemD | Delete One |
| create_admin_users_password_reset_tokenC | Generates a reset token and returns it. This is an authenticated endpoint |
| list_admin_householdsD | Get All |
| create_admin_householdsD | Create One |
| get_admin_households_by_itemD | Get One |
| update_admin_households_by_itemD | Update One |
| delete_admin_households_by_itemD | Delete One |
| list_admin_groupsD | Get All |
| create_admin_groupsD | Create One |
| get_admin_groups_by_itemD | Get One |
| update_admin_groups_by_itemD | Update One |
| delete_admin_groups_by_itemD | Delete One |
| create_admin_groups_by_group_ai_providers_providersC | Create Ai Provider |
| get_admin_groups_by_group_ai_providers_providers_by_provD | Get Ai Provider |
| update_admin_groups_by_group_ai_providers_providers_by_pC | Update Ai Provider |
| delete_admin_groups_by_group_ai_providers_providers_by_pD | Delete Ai Provider |
| list_admin_groups_by_group_ai_providers_promptsD | Get Ai Prompts |
| update_admin_groups_by_group_ai_providers_prompts_by_proB | Append to or override a prompt. The group-wide instructions ( |
| delete_admin_groups_by_group_ai_providers_prompts_by_proC | Reset a prompt to the default |
| list_admin_emailC | Get general application information |
| create_admin_emailC | Send Test Email |
| list_admin_backupsD | Get All |
| create_admin_backupsD | Create One |
| get_admin_backups_by_file_nameC | Returns a token to download a file |
| delete_admin_backups_by_file_nameD | Delete One |
| create_admin_backups_uploadC | Upload a .zip File to later be imported into Mealie |
| create_admin_backups_by_file_name_restoreD | Import One |
| list_admin_maintenanceC | Get the maintenance summary |
| list_admin_maintenance_storageC | Get Storage Details |
| create_admin_maintenance_clean_imagesA | Purges all the images from the filesystem that aren't .webp |
| create_admin_maintenance_clean_tempD | Clean Temp |
| create_admin_maintenance_clean_recipe_foldersA | Deletes all the recipe folders that don't have names that are valid UUIDs |
| create_admin_debug_openai_by_providerD | Debug Openai |
| list_explore_groups_by_group_slug_foodsD | Get All |
| get_explore_groups_by_group_slug_foods_by_itemD | Get One |
| list_explore_groups_by_group_slug_householdsD | Get All |
| get_explore_groups_by_group_slug_households_by_householdD | Get Household |
| list_explore_groups_by_group_slug_organizers_categoriesD | Get All |
| get_explore_groups_by_group_slug_organizers_categories_bD | Get One |
| list_explore_groups_by_group_slug_organizers_tagsD | Get All |
| get_explore_groups_by_group_slug_organizers_tags_by_itemD | Get One |
| list_explore_groups_by_group_slug_organizers_toolsD | Get All |
| get_explore_groups_by_group_slug_organizers_tools_by_iteD | Get One |
| list_explore_groups_by_group_slug_cookbooksD | Get All |
| get_explore_groups_by_group_slug_cookbooks_by_itemD | Get One |
| list_explore_groups_by_group_slug_recipesD | Get All |
| list_explore_groups_by_group_slug_recipes_suggestionsD | Suggest Recipes |
| get_explore_groups_by_group_slug_recipes_by_recipe_slugD | Get Recipe |
| get_media_recipes_by_recipe_images_by_file_nameC | Takes in a recipe id, returns the static image. This route is proxied in the docker image and should not hit the API in production |
| get_media_recipes_by_recipe_images_timeline_by_timelineB | Takes in a recipe id and event timeline id, returns the static image. This route is proxied in the docker image and should not hit the API in production |
| get_media_recipes_by_recipe_assets_by_file_nameC | Returns a recipe asset |
| get_media_users_by_user_by_file_nameC | Takes in a recipe slug, returns the static image. This route is proxied in the docker image and should not hit the API in production |
| list_media_docker_validate_txtC | Get Validation Text |
| list_utils_downloadB | Uses a file token obtained by an active user to retrieve a file from the operating system. |
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 283 tools
Many tools are near-duplicates of one another: `list_groups_ai_providers_prompts`, `list_admin_groups_by_group_ai_providers_prompts`, and `list_admin_groups_by_group_ai_providers_providers_by_prov` all appear to fetch AI prompts/providers, and the same pattern repeats for categories, tags, tools, foods, and households across admin/group/explore scopes. Descriptions are almost uniformly generic ('Get One', 'Get All', 'Create One'), so an agent gets no help in choosing between the household, group, and admin variants. Several names are truncated mid-word ('_by_prov', '_by_recip', 'categories_b'), making the intended target impossible to infer from the name alone.
There is a recognizable verb prefix convention (list_/get_/create_/update_/delete_/patch_), which saves this from being chaotic. However, names are literal renderings of URL paths, producing 60+ character identifiers that are truncated at arbitrary points, and at least one tool (`create_households_shopping_lists_by_item_recipe_by_rec_2`) has a numeric disambiguation suffix, which is a naming failure. Nearly duplicate names differing only in scope prefix make length-based confusion likely.
283 tools is an extreme mismatch for what is essentially one recipe-management application; it is a wholesale 1:1 mirror of the Mealie OpenAPI spec. Dozens of tools exist only because admin, group, and explore path variants were each generated separately. An agent cannot practically select from a surface this size without heavy filtering.
As a full API mirror, the surface covers essentially every lifecycle operation in the domain: recipe CRUD, bulk actions, imports/scraping, organizers, meal plans, shopping lists, households, users, auth, backups, and media. The redundancy across scopes actually guarantees no capability is missing, though it is far more than complete rather than efficiently complete.