mealie-mcp-server

Manage recipes, meal plans, shopping lists and ingredient data in a self-hosted Mealie instance

By Timo Reymann (individual) TypeScript Local · stdio Productivity

33 popularity score ★ 16 ↓ 202/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs MEALIE_BASE_URL, MEALIE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add mealie -e MEALIE_BASE_URL=<MEALIE_BASE_URL> -e MEALIE_API_KEY=<MEALIE_API_KEY> -- npx -y mealie-mcp-server
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "mealie": {
      "command": "npx",
      "args": [
        "-y",
        "mealie-mcp-server"
      ],
      "env": {
        "MEALIE_BASE_URL": "<MEALIE_BASE_URL>",
        "MEALIE_API_KEY": "<MEALIE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "mealie": {
      "command": "npx",
      "args": [
        "-y",
        "mealie-mcp-server"
      ],
      "env": {
        "MEALIE_BASE_URL": "<MEALIE_BASE_URL>",
        "MEALIE_API_KEY": "<MEALIE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "mealie": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "mealie-mcp-server"
      ],
      "env": {
        "MEALIE_BASE_URL": "<MEALIE_BASE_URL>",
        "MEALIE_API_KEY": "<MEALIE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.mealie]
command = "npx"
args = ["-y", "mealie-mcp-server"]

[mcp_servers.mealie.env]
MEALIE_BASE_URL = "<MEALIE_BASE_URL>"
MEALIE_API_KEY = "<MEALIE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e MEALIE_BASE_URL=<MEALIE_BASE_URL> -e MEALIE_API_KEY=<MEALIE_API_KEY> mealie npx -- -y mealie-mcp-server
Local (container)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs MEALIE_BASE_URL, MEALIE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add mealie -e MEALIE_BASE_URL=<MEALIE_BASE_URL> -e MEALIE_API_KEY=<MEALIE_API_KEY> -- docker run -i --rm -e MEALIE_BASE_URL -e MEALIE_API_KEY ghcr.io/timo-reymann/mealie-mcp-server:main
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "mealie": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "MEALIE_BASE_URL",
        "-e",
        "MEALIE_API_KEY",
        "ghcr.io/timo-reymann/mealie-mcp-server:main"
      ],
      "env": {
        "MEALIE_BASE_URL": "<MEALIE_BASE_URL>",
        "MEALIE_API_KEY": "<MEALIE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "mealie": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "MEALIE_BASE_URL",
        "-e",
        "MEALIE_API_KEY",
        "ghcr.io/timo-reymann/mealie-mcp-server:main"
      ],
      "env": {
        "MEALIE_BASE_URL": "<MEALIE_BASE_URL>",
        "MEALIE_API_KEY": "<MEALIE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "mealie": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "MEALIE_BASE_URL",
        "-e",
        "MEALIE_API_KEY",
        "ghcr.io/timo-reymann/mealie-mcp-server:main"
      ],
      "env": {
        "MEALIE_BASE_URL": "<MEALIE_BASE_URL>",
        "MEALIE_API_KEY": "<MEALIE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.mealie]
command = "docker"
args = ["run", "-i", "--rm", "-e", "MEALIE_BASE_URL", "-e", "MEALIE_API_KEY", "ghcr.io/timo-reymann/mealie-mcp-server:main"]

[mcp_servers.mealie.env]
MEALIE_BASE_URL = "<MEALIE_BASE_URL>"
MEALIE_API_KEY = "<MEALIE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e MEALIE_BASE_URL=<MEALIE_BASE_URL> -e MEALIE_API_KEY=<MEALIE_API_KEY> mealie docker -- run -i --rm -e MEALIE_BASE_URL -e MEALIE_API_KEY ghcr.io/timo-reymann/mealie-mcp-server:main

Settings 2

MEALIE_BASE_URL Required: Address of your Mealie instance, e.g. https://mealie.example.com.
MEALIE_API_KEY Required: API key generated in your Mealie account settings.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

mealie-mcp-server connects an assistant to your own Mealie recipe manager through Mealie's REST API, using an API key you generate in Mealie. It runs on your machine over stdio and covers most of what Mealie keeps: recipes, meal plans, shopping lists and their items, categories, tags, kitchen tools, and the food and unit vocabularies that structured ingredients refer to.

Beyond plain create, read, update and delete calls, it has batch tools that fetch or update many recipes with bounded concurrency, a meal-plan tool that returns plans with the recipe details embedded, and read-only paginated queues for clean-up work: recipes that still need categories and tags, ingredients that are not yet parsed into foods and units, or recipes missing images, links or sections. Ingredient and instruction writes are checked against what Mealie stores afterwards and rolled back with a report if they did not stick. It also ships one prompt, `weekly-meal-plan`, and sends server-wide usage instructions to the client when it connects.

Version 2.0.0 registers 78 tools according to the generated list in its README and npm entry, although the README's opening line still says 71. The image-upload tool `set_recipe_image_from_file` does not read local files: it downloads a temporary URL that the client hands it, so it only works in clients that pass file references (its own description names ChatGPT).

What it needs

RuntimeNode.js 22+orDocker

Node.js 22 or later for the npx way, or Docker for the container. A running Mealie instance you can reach over the network, and a Mealie API key generated from your Mealie account settings. Both MEALIE_BASE_URL and MEALIE_API_KEY must be set: the server prints an error and exits at start if either is missing (src/config.ts).

Limits

Speaks stdio only; there is no HTTP mode or hosted endpoint. It works with one Mealie instance and one API key per process, so it acts with that user's Mealie permissions. `set_recipe_image_from_file` only works in clients that pass file references with a download URL. The README's Docker example uses `docker run -d`, which leaves no stdin for a client; the snippet here uses `-i --rm`. The image's documented tag is `:main`, built from the main branch rather than a release, so it may differ from npm version 2.0.0.

Who it suits

Suits people who self-host Mealie and want an assistant to plan meals, fill shopping lists or tidy up a large recipe collection: tagging, parsing ingredients into foods and units, merging duplicate foods. Its batch and queue tools are aimed at bulk clean-up of many recipes. It can delete recipes, lists, foods and units, so trying it on a test instance or a backed-up collection first is worth considering. It is a community server, not one from the Mealie project.

Tools 60 of 78

create_recipe
Create a new recipe
delete_recipe
Delete a recipe
duplicate_recipe
Copy an existing recipe
find_recipes_for_ingredients
Find recipes that use given ingredient names
get_recipe_concise
Get a short summary of one recipe
get_recipe_detailed
Get one recipe in full
get_recipes
Search and list recipes
get_recipes_batch
Fetch several recipes at once
get_recipes_detailed_batch
Fetch full details for several recipes
get_recipes_for_classification
Paginated feed of recipes for category and tag assignment
get_recipes_for_data_enrichment
Paginated queue of recipes matching clean-up filters
get_recipes_for_ingredient_parsing
Paginated queue of recipes with unparsed ingredients
mark_recipe_last_made
Record when a recipe was last cooked
patch_recipe
Change selected fields of a recipe
set_recipe_image
Upload base64 image data (up to 10 MB) as a recipe's image, or remove it
set_recipe_image_from_file
Set a recipe image from a client-supplied file link
set_recipe_image_from_url
Set a recipe image from a web address
set_recipe_rating
Rate a recipe
update_recipe_ingredients
Replace or edit a recipe's structured ingredients
update_recipe_ingredients_batch
Update ingredients across many recipes
update_recipe_instructions
Edit a recipe's instruction steps
update_recipe_instructions_batch
Edit instructions across many recipes
update_recipe_taxonomy
Assign categories and tags to a recipe
update_recipe_taxonomy_batch
Assign categories and tags to many recipes
update_recipe_tools
Set the kitchen tools a recipe needs
update_recipe_tools_batch
Set kitchen tools on many recipes
create_mealplan
Add a meal plan entry
create_mealplan_bulk
Add many meal plan entries
get_all_mealplans
List meal plan entries
get_mealplan_with_recipes
Get meal plans with recipe details included
get_todays_mealplan
Get today's planned meals
patch_mealplan
Change a meal plan entry
add_recipe_to_shopping_list
Add a recipe's ingredients to a shopping list
create_shopping_list
Create a shopping list
create_shopping_list_item
Add an item to a list
create_shopping_list_items_bulk
Add many items to a list
delete_shopping_list
Delete a shopping list
delete_shopping_list_item
Remove an item from a list
delete_shopping_list_items_bulk
Remove many items from a list
get_shopping_list
Get one shopping list
get_shopping_list_items
List items on shopping lists
get_shopping_lists
List shopping lists
remove_recipe_from_shopping_list
Take a recipe's ingredients off a list
update_shopping_list
Change a shopping list
update_shopping_list_item
Change a list item, e.g. tick it off
create_category
Create a category
delete_category
Delete a category
get_categories
List categories
get_empty_categories
List categories with no recipes
update_category
Rename or change a category
create_tag
Create a tag
delete_tag
Delete a tag
get_tags
List tags
get_empty_tags
List tags with no recipes
get_foods
Search the food vocabulary
get_food_matches
Match many food names to existing foods
create_food
Add a food
merge_foods
Merge one food into another
get_units
Search the unit vocabulary
get_unit_matches
Match many unit names to existing units

Similar servers