mealie-mcp-ts
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for HTTP server (default 3000) | |
| MEALIE_URL | Yes | URL of your Mealie instance (e.g., http://localhost:9925) | |
| ALLOWED_HOSTS | No | Host header allowlist for DNS rebind protection (e.g., nas.local,192.168.1.50) | |
| ENABLED_TOOLS | No | Optional comma-separated list of tools to enable | |
| MCP_TRANSPORT | No | Transport mode (e.g., http for remote access) | |
| MEALIE_API_KEY | Yes | API key from Mealie (Settings → API Tokens) |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_recipesA | List all recipes in Mealie. Returns recipe summaries with name, slug, description, and metadata. |
| get_recipeA | Get a recipe by its slug. Returns full recipe details including ingredients and instructions. |
| create_recipeA | Create a new recipe with name, ingredients, and instructions. For ingredients, prefer passing originalText (e.g. "2 cups flour") and let the server parse — the structured {quantity, unit, food} form also works but originalText is simpler and handles unknown units/foods automatically. |
| update_recipeA | Update an existing recipe by slug. Only provided fields will be updated. For ingredients, prefer passing originalText (e.g. "2 cups flour") over structured {quantity, unit, food} — the server parses originalText and auto-resolves unit+food. Structured form also works and is auto-normalized, but originalText is simpler. |
| delete_recipeA | Delete a recipe by its slug. This action cannot be undone. |
| upload_recipe_imageB | Upload an image for a recipe. Provide the image as base64-encoded data. |
| list_foodsA | List all foods/ingredients in Mealie. Can be filtered by search term. |
| create_foodB | Create a new food/ingredient in Mealie. |
| list_shopping_listsA | List all shopping lists in Mealie. |
| get_shopping_listA | Get a shopping list by ID. Returns the list with all items. |
| add_shopping_list_itemB | Add an item to a shopping list. Can specify quantity, unit, food, or just a note. |
| update_shopping_list_itemA | Update a shopping list item. Can modify quantity, note, or checked status (to mark items as purchased). |
| delete_shopping_list_itemA | Remove an item from a shopping list. |
| add_recipe_to_shopping_listB | Add all ingredients from a recipe to a shopping list. Optionally specify quantity for multiple servings. |
| list_categoriesA | List all recipe categories in Mealie. Categories help organize recipes into groups like "Dinner", "Breakfast", "Italian", etc. |
| create_categoryA | Create a new recipe category in Mealie. Categories help organize recipes into logical groups. |
| list_tagsB | List all recipe tags in Mealie. Tags provide flexible labeling for recipes like "vegetarian", "gluten-free", "kid-friendly", etc. |
| create_tagA | Create a new recipe tag in Mealie. Tags provide flexible labeling for recipes. |
| test_scrape_urlA | Test if a URL can be scraped for recipe data without actually creating a recipe. Useful for validating URLs before importing. Returns success:false when the scraper cannot parse the site. |
| create_recipe_from_urlA | Create a new recipe by scraping data from a URL. Supports most recipe websites that use structured data (schema.org Recipe format). On failure, returns success:false with diagnostic info — check that before retrying or falling back to create_recipe. |
| create_recipe_from_htmlA | Create a recipe from raw HTML that you fetched yourself. Use this when create_recipe_from_url fails because the MCP server can't reach the site (anti-bot, geo-block, etc.). Fetch the HTML with your own browser tool and pass it here — the server parses it via Mealie or by extracting schema.org JSON-LD directly. |
| list_meal_plansA | List meal plan entries within a date range. If no dates provided, returns all meal plans. |
| get_todays_meal_planA | Get today's meal plan entries. Returns all meals planned for the current day. |
| create_meal_planB | Create a new meal plan entry for a specific date. Can optionally link to an existing recipe. |
| delete_meal_planB | Delete a meal plan entry by its ID. |
| get_current_userA | Get information about the current API user, including their group and household. Useful for debugging permission issues when recipes or other items are not visible. |
| parse_recipe_ingredientsA | Re-parse all ingredients for an existing recipe so each has proper quantity, unit, and food fields instead of free-text notes. Fetches the recipe, sends each ingredient note through the Mealie ingredient parser, creates any missing unit/food records, and saves the structured ingredients back to the recipe. Use this after importing a recipe from a URL whose ingredients came in as plain text. |
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 27 tools
Most tools target distinct resources and actions clearly, with recipe CRUD, meal plans, shopping lists, foods, categories, tags, and user info separated. The three recipe creation methods (manual, URL, HTML) share intent but are differentiated by input source, and test_scrape_url adds a validation step. Shopping list item operations are distinct from adding a whole recipe's ingredients.
All tool names use a consistent snake_case verb_noun pattern (list_, get_, create_, delete_, update_, upload_, add_, test_, parse_). Even longer names like create_recipe_from_url or get_todays_meal_plan follow the verb-first convention. There are no camelCase or mixed naming styles.
27 tools is above the typical 'heavy' threshold, but the server covers many subdomains: recipes, meal plans, foods, shopping lists, categories, tags, user info, and URL scraping. Each tool has a defined role, though having three recipe creation variants inflates the count; a slightly leaner set could be achieved without losing functionality.
Core recipe management (CRUD plus image upload), meal plan basics, shopping list item operations, and URL scraping are well covered. However, there are notable gaps: no create_shopping_list or delete_shopping_list, no update/delete for categories or tags, no delete_food, and no update_meal_plan. These missing lifecycle operations could force users to rely on external tools or workarounds.