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": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
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 |
| 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. |
| 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_mealplansC | 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_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 |
| 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_jsonC | Takes in raw HTML or a https://schema.org/Recipe object as a JSON string and parses it like a URL |
| 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 |
| 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 |
| 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 |
| 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_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 266 tools
With 266 tools, many operations are near-duplicates across admin, group, household, and explore scopes (e.g., recipe, organizer, AI provider, and list endpoints), and multiple recipe-creation variants exist for URL, stream, bulk, HTML/JSON, and AI. Their boundaries are technically distinct endpoints, but an agent would struggle to select correctly without deep API knowledge.
Most names use a snake_case action_resource pattern, but the pattern is noisy: repeated verbs like create_recipes_create_url, truncated route segments like ...by_rec_2 and ...by_p, and inconsistent use of list vs get/slug/item make it only moderately predictable.
266 tools is an extreme over-exposure of a REST API as individual MCP tools; this is far beyond a well-scoped MCP surface and guarantees selection difficulty.
The set covers a wide swath of Mealie's domain (recipes, households, groups, admin, auth, organizers, meal plans, shopping lists, webhooks, AI providers), with CRUD for most resources. Minor gaps exist, such as recipe asset deletion/lifecycle tools, but no major domain is missing.