mealie-mcp
Provides tools for interacting with a Mealie recipe manager instance: searching and retrieving recipes, importing recipes from web URLs, creating/updating/deleting recipes, listing tags and categories, managing shopping lists and their items, adding a recipe's ingredients to a shopping list (scalable by servings), and reading/adding/deleting meal plan entries by date.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mealie-mcpadd milk, eggs, and bread to my shopping list"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mealie-mcp
A remote MCP server for Mealie that you can add to Claude as a custom connector — including the Claude mobile app — without any third-party auth service.
Streamable HTTP transport at
/mcp(what Claude's connectors require)Built-in OAuth 2.1 authorization server (dynamic client registration, PKCE, refresh-token rotation) with a single-password login page — nothing else to run
Tokens/clients persist to a JSON file, so restarts don't force re-authorisation
Only allows the Claude callback URLs as OAuth redirects, so nobody can register a phishing client against your login page
Failed-login lockout (5 attempts → 5 minute cool-off per IP)
Tools
Tool | What it does |
| Free-text search, filter by tag/category slug, paginated summaries |
| Full recipe: ingredients, steps, notes, nutrition |
| Scrape a recipe web page into Mealie |
| Recipe CRUD (free-text ingredient lines and steps) |
| Slugs usable as search filters |
| Lists and their (unchecked) items |
| Add free-text items, tick/rename/re-quantity, remove |
| Push a recipe's ingredients onto a list (scalable) |
| Meal planning by date |
| Read-only escape hatch for any |
Targets the Mealie v2/v3 API (/api/households/...); tested against Mealie v3.22. If you are still on Mealie 1.x the client transparently falls back to the old /api/groups/... paths on a 404.
Related MCP server: Mealie MCP Server
Requirements
Mealie reachable from wherever this runs (LAN is fine)
A Mealie API token: Mealie → your user → API Tokens → create (long-lived)
A public HTTPS hostname pointing at this server. Claude's servers must be able to reach it. If you already run a reverse proxy (Nginx Proxy Manager, Caddy, Traefik) with ports 80/443 forwarded, just add a host — see Option B. Otherwise the compose file includes a Cloudflare Tunnel (Option A).
Run it (Docker, on Proxmox)
On a VM or LXC with Docker:
git clone https://github.com/retr083/mealie-mcp.git && cd mealie-mcp
cp .env.example .env
nano .env # MEALIE_URL, MEALIE_API_TOKEN, PUBLIC_URL, MCP_LOGIN_PASSWORDThe compose file pulls the pre-built multi-arch image ghcr.io/retr083/mealie-mcp:latest (amd64 + arm64). To build from source instead, uncomment build: . in docker-compose.yml and add --build to the commands below.
Option A — Cloudflare Tunnel (no port forwarding)
Cloudflare Zero Trust → Networks → Tunnels → Create a tunnel (Cloudflared). Copy the token into
.envasTUNNEL_TOKEN=....In the tunnel's Public Hostname tab add:
mealie-mcp.yourdomain.com→ ServiceHTTP→mealie-mcp:8000.Set
PUBLIC_URL=https://mealie-mcp.yourdomain.comin.env, remove theports:block fromdocker-compose.yml(not needed), then:
docker compose --profile cloudflared up -dOption B — Nginx Proxy Manager (or any reverse proxy)
docker compose up -dDNS: add an
A/CNAMErecord formealie-mcp.yourdomain.compointing at your public IP (same as your other NPM hosts).NPM → Hosts → Proxy Hosts → Add Proxy Host:
Domain Names:
mealie-mcp.yourdomain.comScheme:
http· Forward Hostname/IP: the Docker host's LAN IP (or the container namemealie-mcpif NPM is on the same Docker network) · Forward Port:8000Block Common Exploits: on · Websockets Support: on (harmless, not required)
SSL tab: request a Let's Encrypt certificate, Force SSL on, HTTP/2 on
Advanced tab, paste:
proxy_buffering off; proxy_read_timeout 300s; proxy_send_timeout 300s;(stops nginx buffering streamed responses and keeps long tool calls — e.g. importing a slow recipe site — from being cut off)
Do not put an NPM Access List (IP allow-list) on this host — the login page has to be reachable from your phone/browser, not just from Anthropic.
PUBLIC_URL in .env must be https://mealie-mcp.yourdomain.com — it's what the OAuth metadata advertises, and Claude rejects the connector if it doesn't match the URL you enter.
Caddy equivalent, if you ever switch:
mealie-mcp.yourdomain.com {
reverse_proxy 192.168.1.20:8000
}Check it
https://mealie-mcp.yourdomain.com/→ a one-line bannerhttps://mealie-mcp.yourdomain.com/healthz→{"ok": true, "mealie": "reachable"}https://mealie-mcp.yourdomain.com/.well-known/oauth-authorization-server→ JSON metadata
Connect Claude
Claude mobile / web / desktop: Settings → Connectors → Add custom connector → URL: https://mealie-mcp.yourdomain.com/mcp → leave the OAuth client ID/secret fields empty → Add. Claude will open your login page; enter MCP_LOGIN_PASSWORD. Done — enable the connector in a chat and ask it what's for dinner.
Custom connectors are added per account, so once it's added on the web it appears on mobile too.
Claude Code:
claude mcp add --transport http mealie https://mealie-mcp.yourdomain.com/mcpthen /mcp inside Claude Code to trigger the login.
Troubleshooting
Symptom | Cause / fix |
Browser shows | NPM has no proxy host matching that exact hostname (typo, not saved, or disabled). Fix the proxy host and request the certificate. |
Claude: "Failed to start MCP authorization" and nothing in | Claude never reached you. Hostname must resolve (from the public internet) to a public IPv4 address — no private/CGNAT ranges, no AAAA-only. Check with |
Claude: "Your account was authorized, but no MCP server was found at the provided URL" | Login worked but the connector URL is wrong — it must end in |
Claude: "Authorization with the MCP server failed" |
|
| The container can't reach |
Tool calls time out on slow recipe imports | Add the |
Every failure toast in Claude includes an ofid_… reference; if you file an issue with anthropics/claude-ai-mcp, include it along with your docker logs lines from the attempt.
Limitations (read before exposing it)
Single user, single password. Anyone who knows the password gets full access to the Mealie account behind the API token. This is designed for a personal homelab, not multi-tenant use.
Tokens are stored unhashed in
data/auth_state.json(they're random 48-byte secrets, but treat that file like a password file — it lives in a Docker volume for that reason).No account/session UI. To revoke everything, delete
data/auth_state.jsonand restart.Pinned to
mcp==2.2.0— the official SDK's server API is still changing between releases (e.g.FastMCP→MCPServer), so upgrades need a look, not just a bump.
Configuration
Variable | Default | Meaning |
| — | Mealie base URL, as seen from this container |
| — | Mealie API token (the server acts as that user) |
| — | Public HTTPS origin of this server, no trailing slash, no |
| — | Password for the connect-time login page (min 12 chars) |
|
| Bind address |
|
| Where |
|
| Access token lifetime (s). Claude refreshes automatically. |
|
| Refresh token lifetime (s) — how long before you must log in again |
| claude.ai callback + loopback | Comma-separated allowlist for OAuth clients |
Security notes
Everything Claude can do, it does as the Mealie user who owns the API token. Create a dedicated Mealie user if you want to limit blast radius.
The MCP endpoint is only reachable with a valid bearer token; the login page is the only unauthenticated surface (plus OAuth metadata/registration, which are public by design).
For belt-and-braces you can restrict the hostname at your proxy/tunnel to Anthropic's egress range
160.79.104.0/21— but note you also need to reach/loginfrom your phone/browser during connect, so allow that too (or only enforce the IP rule on/mcp,/token,/register).Revoke access at any time: delete
data/auth_state.jsonand restart (or just rotateMCP_LOGIN_PASSWORD— existing tokens keep working until they expire, so delete the file too).
Local development
python -m venv .venv && .venv/Scripts/activate # or source .venv/bin/activate
pip install -e .
MEALIE_URL=http://mealie.lan:9925 MEALIE_API_TOKEN=... PUBLIC_URL=http://127.0.0.1:8000 \
MCP_LOGIN_PASSWORD=correct-horse-battery MCP_DATA_DIR=./data python -m mealie_mcpBuilt on the official mcp Python SDK (2.x) — the SDK provides the /authorize, /token, /register, /revoke and .well-known endpoints; this project supplies the provider, login page, Mealie client and tools.
This server cannot be deployed
Maintenance
Related MCP Connectors
Scraps Kitchen gives any AI agent a persistent, household-aware kitchen memory. Unlike generic chatbot recall, Scraps maintains structured cooking data: what's in your fridge (with freshness tracking), who you cook for (with allergens, dietary restrictions, and preferences), your recipe collection (with cook notes and per-diner ratings), your shopping list, and your kitchen equipment. 27 tools across 6 domains let agents read kitchen context, suggest meals that respect dietary safety, update the pantry after cooking, and build a history of what works for your household. Every interaction makes the data richer. Cooking history, preference signals, kitchen awareness = better suggestions next time. All tools work via oAuth and a free scraps.kitchen account.
Pace is a remote MCP server that exposes wearable and fitness data to Claude via the Model Context Protocol. It connects to Garmin, Oura, Whoop, Polar, Fitbit and 20+ devices and provides 15 tools for querying sleep, activity, recovery, and training data. Hosted on Google Cloud Run, OAuth 2.1 authentication, Streamable HTTP transport. Instructions: First you need to create an account at: https://pacetraining.co and connect your wearables. After that you can connect the remote Server via Custom Connector in Claude and OAuth 2.1 Flow startet.
Multiple Google accounts (Gmail, Calendar, Drive, Contacts, Tasks) in one Claude connector.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with Mealie recipe databases through MCP clients like Claude Desktop.134MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.7MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Mealie recipe databases, allowing users to manage and query their recipes through natural language conversations.16MIT
- AlicenseNot gradedqualityCmaintenanceConnects MCP clients like Claude to your Mealie recipe manager, enabling natural language search, creation, import, and updates of recipes.140MIT