Skip to main content
Glama
mealie-mcp-ts

mealie-mcp-ts

by counterbeing

Mealie MCP Server

An MCP (Model Context Protocol) server that enables LLMs to interact with Mealie - a self-hosted recipe manager and meal planner.

Features

  • Recipe Management: List, view, create, update, and delete recipes

  • Recipe Import: Import recipes from URLs (supports most recipe websites)

  • Ingredient Parsing: Automatic parsing of natural language ingredients (e.g., "2 cups flour")

  • Image Uploads: Upload images to recipes via base64 encoding

  • Meal Planning: Create and manage meal plans with date scheduling

  • Shopping Lists: Full CRUD for shopping list items, plus add recipe ingredients to lists

  • Organization: Manage categories and tags for recipe organization

  • Food Management: List and create food items

Related MCP server: Mealie MCP Server

Installation

# Clone the repository
git clone https://github.com/your-username/mealie-mcp.git
cd mealie-mcp

# Install dependencies
pnpm install

# Build
pnpm run build

Configuration

Create a .env file based on .env.example:

cp .env.example .env

Required environment variables:

Variable

Description

MEALIE_URL

URL of your Mealie instance (e.g., http://localhost:9925)

MEALIE_API_KEY

API key from Mealie (Settings → API Tokens)

ENABLED_TOOLS

(Optional) Comma-separated list of tools to enable

Usage

With Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "mealie": {
      "command": "node",
      "args": ["/path/to/mealie-mcp/dist/index.js"],
      "env": {
        "MEALIE_URL": "http://localhost:9925",
        "MEALIE_API_KEY": "your-api-key"
      }
    }
  }
}

Remote HTTP mode (e.g. on a NAS)

For running the server on a different machine (Synology NAS, home server, etc.), use the HTTP transport. The SDK's Streamable HTTP transport lets Claude Desktop connect over the network.

Set these env vars:

MCP_TRANSPORT=http
PORT=3000
ALLOWED_HOSTS=nas.local,192.168.1.50   # Host header allowlist (DNS rebind protection)
MEALIE_URL=http://mealie:9000           # service name if on same compose network
MEALIE_API_KEY=...

Claude Desktop config:

{
  "mcpServers": {
    "mealie": {
      "url": "http://nas.local:3000/mcp"
    }
  }
}

With Docker

The bundled Dockerfile defaults to HTTP transport on port 3000.

docker build -t mealie-mcp .

docker run -p 3000:3000 \
  -e MEALIE_URL=http://host.docker.internal:9925 \
  -e MEALIE_API_KEY=your-api-key \
  -e ALLOWED_HOSTS=localhost \
  mealie-mcp

Compose service (attach to existing Mealie stack)

  mealie-mcp:
    build: ./mealie-mcp
    container_name: mealie-mcp
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - MEALIE_URL=http://mealie:9000
      - MEALIE_API_KEY=${MEALIE_API_KEY}
      - ALLOWED_HOSTS=nas.local,192.168.1.50
    depends_on:
      - mealie

Available Tools (25 total)

Recipes (6 tools)

Tool

Description

list_recipes

List all recipes with pagination

get_recipe

Get full recipe details by slug

create_recipe

Create a new recipe with ingredients and instructions

update_recipe

Update an existing recipe

delete_recipe

Delete a recipe

upload_recipe_image

Upload an image to a recipe (base64)

Recipe Import (2 tools)

Tool

Description

test_scrape_url

Test if a URL can be scraped for recipe data

create_recipe_from_url

Import a recipe by scraping a URL

Meal Planning (4 tools)

Tool

Description

list_meal_plans

List meal plans with optional date range filter

get_todays_meal_plan

Get today's planned meals

create_meal_plan

Create a meal plan entry for a specific date

delete_meal_plan

Delete a meal plan entry

Shopping Lists (6 tools)

Tool

Description

list_shopping_lists

List all shopping lists

get_shopping_list

Get shopping list with items

add_shopping_list_item

Add an item to a shopping list

update_shopping_list_item

Update an item (quantity, note, or check/uncheck)

delete_shopping_list_item

Remove an item from a shopping list

add_recipe_to_shopping_list

Add all ingredients from a recipe to a list

Organization (4 tools)

Tool

Description

list_categories

List all recipe categories

create_category

Create a new category

list_tags

List all recipe tags

create_tag

Create a new tag

Foods (2 tools)

Tool

Description

list_foods

List all foods/ingredients

create_food

Create a new food item

Debugging (1 tool)

Tool

Description

get_current_user

Get current API user info including group and household context

Important: Group Context

Mealie scopes data by group and household. When you create an API token, it inherits the group context of your current session. If recipes or other items you create via the API aren't visible in your browser:

  1. Use the get_current_user tool to see which group the API token is associated with

  2. Ensure your browser session is viewing the same group (check the URL path)

  3. If needed, switch groups in Mealie's UI, then generate a new API token

Development

# Run in development mode
pnpm run dev

# Lint
pnpm run lint

# Format
pnpm run format

# Build
pnpm run build

Local Mealie Instance

Start a local Mealie instance for testing:

docker-compose up -d

This starts Mealie at http://localhost:9925.

License

MIT

Available Tools

27 tools
add_recipe_to_shopping_listB

Add all ingredients from a recipe to a shopping list. Optionally specify quantity for multiple servings.

Inputs: recipeId (required), shoppingListId (required), recipeQuantity.

add_shopping_list_itemB

Add an item to a shopping list. Can specify quantity, unit, food, or just a note.

Inputs: shoppingListId (required), food, note, unit, +2 more.

create_categoryA

Create a new recipe category in Mealie. Categories help organize recipes into logical groups.

Inputs: name (required).

create_foodB

Create a new food/ingredient in Mealie.

Inputs: name (required), pluralName, description.

create_meal_planB

Create a new meal plan entry for a specific date. Can optionally link to an existing recipe.

Inputs: date (required), text, title, recipeId, +1 more.

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.

Inputs: name (required), cookTime, prepTime, totalTime, +4 more.

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.

Inputs: html (required), sourceUrl, includeTags.

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.

Inputs: url (required), includeTags.

create_tagA

Create a new recipe tag in Mealie. Tags provide flexible labeling for recipes.

Inputs: name (required).

delete_meal_planB

Delete a meal plan entry by its ID.

Inputs: itemId (required).

delete_recipeA

Delete a recipe by its slug. This action cannot be undone.

Inputs: slug (required).

delete_shopping_list_itemA

Remove an item from a shopping list.

Inputs: itemId (required).

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.

Inputs: no named parameters.

get_recipeA

Get a recipe by its slug. Returns full recipe details including ingredients and instructions.

Inputs: slug (required).

get_shopping_listA

Get a shopping list by ID. Returns the list with all items.

Inputs: id (required).

get_todays_meal_planA

Get today's meal plan entries. Returns all meals planned for the current day.

Inputs: no named parameters.

list_categoriesA

List all recipe categories in Mealie. Categories help organize recipes into groups like "Dinner", "Breakfast", "Italian", etc.

Inputs: page, search, perPage.

list_foodsA

List all foods/ingredients in Mealie. Can be filtered by search term.

Inputs: page, search, perPage.

list_meal_plansA

List meal plan entries within a date range. If no dates provided, returns all meal plans.

Inputs: endDate, startDate.

list_recipesA

List all recipes in Mealie. Returns recipe summaries with name, slug, description, and metadata.

Inputs: page, perPage.

list_shopping_listsA

List all shopping lists in Mealie.

Inputs: page, perPage.

list_tagsB

List all recipe tags in Mealie. Tags provide flexible labeling for recipes like "vegetarian", "gluten-free", "kid-friendly", etc.

Inputs: page, search, perPage.

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.

Inputs: slug (required).

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.

Inputs: url (required).

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.

Inputs: slug (required), name, cookTime, prepTime, +5 more.

update_shopping_list_itemA

Update a shopping list item. Can modify quantity, note, or checked status (to mark items as purchased).

Inputs: itemId (required), note, checked, quantity.

upload_recipe_imageB

Upload an image for a recipe. Provide the image as base64-encoded data.

Inputs: slug (required), imageBase64 (required), fileName.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 27 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness3/5

    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.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to interact with Mealie for recipe management, meal planning, and shopping list operations. Supports searching and managing recipes, creating meal plans, and generating shopping lists from recipes or meal plans.
      7
      MIT
    • A
      license
      D
      quality
      B
      maintenance
      Provides complete access to Mealie's API for managing recipes, meal plans, shopping lists, households, and more via natural language from AI assistants.
      283
      21
      MIT