Mealie MCP Server
Enables AI assistants to interact with Mealie recipe databases through MCP clients like Claude Desktop.
README Documentation
Mealie MCP Server
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with your Mealie recipe database through clients like Claude Desktop.
⨠Features
š½ļø Recipe Management
- CRUD Operations: Create, read, update, patch, duplicate, and delete recipes
- Advanced Search: Filter by text, categories, tags, and tools with AND/OR logic
- Image Management: Upload images or scrape from URLs
- Asset Uploads: Attach documents and files to recipes
- Metadata Tracking: Mark recipes as made, track last made dates
š Shopping Lists
- List Management: Create, update, and delete shopping lists
- Item Operations: Add, update, check off, and remove items
- Bulk Operations: Create, update, or delete multiple items at once
- Recipe Integration: Automatically add recipe ingredients to shopping lists
š·ļø Organization
- Categories: Organize recipes with categories (Breakfast, Dinner, etc.)
- Tags: Tag recipes for easy filtering (Quick, Healthy, Family Favorite)
- Advanced Filtering: Search and filter with full pagination support
- Empty Detection: Find unused categories and tags
š Meal Planning
- Meal Plans: View and manage meal plans
- Bulk Creation: Add multiple meals at once
- Today's Menu: Quick access to today's planned meals
š Quick Start
Prerequisites
- Python 3.12+
- Running Mealie instance with API key
- Package manager uv
Installation
Option 1: Using fastmcp (Recommended)
Install the server directly with the fastmcp command:
fastmcp install src/server.py \
--env-var MEALIE_BASE_URL=https://your-mealie-instance.com \
--env-var MEALIE_API_KEY=your-mealie-api-key
Option 2: Manual Configuration
Add the server to your claude_desktop_config.json:
{
"mcpServers": {
"mealie-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/repo/src",
"run",
"server.py"
],
"env": {
"MEALIE_BASE_URL": "https://your-mealie-instance.com",
"MEALIE_API_KEY": "your-mealie-api-key"
}
}
}
}
Restart Claude Desktop to load the server.
š Usage Examples
Recipe Operations
"Search for chicken recipes"
"Create a new recipe for pasta carbonara"
"Duplicate my lasagna recipe"
"Mark the meatloaf recipe as made today"
"Upload an image for the chocolate cake recipe"
Shopping Lists
"Create a shopping list for this week"
"Add eggs and milk to my shopping list"
"Add all ingredients from the lasagna recipe to my shopping list"
"Check off milk on my shopping list"
"Delete all checked items from my shopping list"
Organization
"Show me all my recipe categories"
"Create a new tag called 'Quick Meals'"
"Find all recipes tagged with 'healthy'"
"Show me categories that have no recipes"
Advanced Filtering
"Find recipes that have both 'quick' AND 'healthy' tags"
"Search for breakfast recipes containing 'eggs'"
"Show me all vegetarian dinner recipes"
šÆ Available Tools
Recipe Tools (13 operations)
get_recipes- List/search recipes with advanced filteringget_recipe_detailed- Get complete recipe detailsget_recipe_concise- Get recipe summarycreate_recipe- Create new recipeupdate_recipe- Update recipe (full replacement)patch_recipe- Update specific fields onlyduplicate_recipe- Clone a recipemark_recipe_last_made- Update last made timestampset_recipe_image_from_url- Set image from URLupload_recipe_image_file- Upload image fileupload_recipe_asset_file- Upload document/assetdelete_recipe- Delete recipe
Shopping List Tools (14 operations)
get_shopping_lists- List all shopping listscreate_shopping_list- Create new listget_shopping_list- Get list by IDdelete_shopping_list- Delete listadd_recipe_to_shopping_list- Add recipe ingredientsremove_recipe_from_shopping_list- Remove recipe ingredientsget_shopping_list_items- List all itemsget_shopping_list_item- Get item by IDcreate_shopping_list_item- Create single itemcreate_shopping_list_items_bulk- Create multiple itemsupdate_shopping_list_item- Update item (preserves fields)update_shopping_list_items_bulk- Update multiple itemsdelete_shopping_list_item- Delete single itemdelete_shopping_list_items_bulk- Delete multiple items
Category Tools (7 operations)
get_categories- List/search categoriesget_empty_categories- Find unused categoriescreate_category- Create new categoryget_category- Get by IDget_category_by_slug- Get by slugupdate_category- Update categorydelete_category- Delete category
Tag Tools (7 operations)
get_tags- List/search tagsget_empty_tags- Find unused tagscreate_tag- Create new tagget_tag- Get by IDget_tag_by_slug- Get by slugupdate_tag- Update tagdelete_tag- Delete tag
Meal Plan Tools (4 operations)
get_all_mealplans- List meal planscreate_mealplan- Create meal plan entrycreate_mealplan_bulk- Create multiple entriesget_todays_mealplan- Get today's meals
Total: 45 tools providing comprehensive Mealie API coverage
š§ Development
Setup
- Clone the repository:
git clone <repository-url>
cd mealie-mcp-server
- Install dependencies:
uv sync
- Configure environment:
cp .env.template .env
# Edit .env with your Mealie instance details
- Run MCP inspector for testing:
uv run mcp dev src/server.py
Project Structure
mealie-mcp-server/
āāā src/
ā āāā mealie/ # API client mixins
ā ā āāā client.py # Base HTTP client
ā ā āāā recipe.py # Recipe operations
ā ā āāā shopping_list.py # Shopping list operations
ā ā āāā categories.py # Category operations
ā ā āāā tags.py # Tag operations
ā ā āāā mealplan.py # Meal plan operations
ā ā āāā __init__.py # MealieFetcher aggregator
ā āāā tools/ # MCP tool definitions
ā ā āāā recipe_tools.py
ā ā āāā shopping_list_tools.py
ā ā āāā categories_tools.py
ā ā āāā tags_tools.py
ā ā āāā mealplan_tools.py
ā ā āāā __init__.py
ā āāā models/ # Pydantic models
ā āāā server.py # MCP server entry point
ā āāā prompts.py # Server prompts
āāā CHANGELOG.md # Version history
āāā README.md
š Important Notes
Filtering by Tags/Categories
When filtering recipes, you must use slugs or UUIDs, not display names:
ā Correct:
"Get recipes with tags=['quick-meals', 'healthy']"
ā Incorrect:
"Get recipes with tags=['Quick Meals', 'Healthy']"
Use get_tags() or get_categories() first to find the correct slugs.
Field Preservation
When updating shopping list items, the server automatically preserves all existing fields. You only need to specify the fields you want to change:
# Only updates 'checked' field, preserves note, quantity, etc.
update_shopping_list_item(item_id="...", checked=True)
š Known Issues
None currently! All features have been tested end-to-end with Claude Desktop.
š Changelog
See CHANGELOG.md for a detailed list of changes and version history.
š¤ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
š License
This project is licensed under the MIT License - see the LICENSE file for details.
š Credits
- Based on the original mealie-mcp-server by @rldiao
- Mealie - The recipe management system
- FastMCP - The MCP framework
š Support
For issues and questions:
- Check the CHANGELOG.md for recent updates
- Review the Mealie API documentation
- Open an issue on GitHub
