
Unofficial AnyList MCP Server
An MCP server that integrates with AnyList โ shopping lists, recipes, and meal planning โ exposed via the Model Context Protocol. Works with Claude Desktop, Claude Code, Claude Web/Mobile, or any MCP-compatible client like Home Assistant.
Two deployment modes:
- Local (stdio) โ runs on your machine alongside Claude Desktop or Claude Code. Fastest setup, no server required.
- HTTP server โ runs in Docker behind a Cloudflare Tunnel. Required for Claude Web, Claude Mobile, or home assistant and useful for sharing access across devices or users.
Tools Overview
The MCP server provides 5 domain-grouped tools rather than 18+ individual ones:
- shopping โ Manage shopping lists and items: add, check off, delete, organize by category and store, and browse favorites
- recipes โ Browse, create, and import recipes from URLs; includes ingredient and step parsing
- meal_plan โ Schedule meals on a calendar with optional links to recipes
- recipe_collections โ Organize recipes into curated named collections
- health_check โ Verify your connection to AnyList and access to target lists
These tools work together to enable typical workflows: browse or create recipes โ plan meals โ add ingredients to your shopping list. See docs/tools.md for the complete reference including all actions and parameters.
Generating OAuth Client Credentials (for Home Assistant / headless clients)
Some MCP clients โ like Home Assistant โ require a pre-registered client_id and client_secret rather than dynamic client registration. You create a confidential client once, then enter the credentials in your integration. Home Assistant will still send you through a one-time browser login (authorization code flow) to link your account.
Prerequisites: the HTTP server must already be running and you must have an account on it.
# Run inside the Docker container (the server must be up)
docker compose exec anylist-mcp node scripts/create-client.js you@example.com "Home Assistant"This prints a client_id and client_secret. Save the secret immediately โ it is hashed in the database and cannot be retrieved later.
The server URL (what you enter in HA) is:
https://<your-tunnel-domain>See docs/home-assistant.md for step-by-step Home Assistant setup.
Development
# Unit tests (mocked, no credentials needed)
npm test
# Integration tests (requires .env with real credentials)
npm run test:integration
# Inspect with the MCP inspector
npx @modelcontextprotocol/inspector node src/server.jsBuilding the desktop extension
npm run pack # produces anylist-mcp.mcpbRoadmap
- Google OAuth โ allow users to sign in to the HTTP MCP server with their Google account instead of a separate password.
- Web gui-based workflow for created oauth client credentials
git clone --recurse-submodules https://github.com/bobby060/anylist-mcp.git
cd anylist-mcp
npm installBefore it works, you'll need: ANYLIST_USERNAMEANYLIST_PASSWORDANYLIST_LIST_NAME
Installation: Claude Desktop
The fastest way to get started is to download the latest anylist-mcp.mcpb from the releases page.
- Open Claude Desktop โ Settings โ Extensions
- Drag and drop the
.mcpbfile, or click "Advanced settings" โ Install extension - Enter your configuration when prompted:
- AnyList Email โ your AnyList account email
- AnyList Password โ your AnyList account password
- Default Shopping List โ optional, defaults to "Groceries"
Installation: Claude Code / Claude Desktop (from source)
Prerequisites
Setup
git clone --recurse-submodules https://github.com/bobby060/anylist-mcp.git
cd anylist-mcp
npm installAdd to your MCP config (~/.claude/claude_desktop_config.json or equivalent):
{
"mcpServers": {
"anylist": {
"command": "node",
"args": ["/absolute/path/to/anylist-mcp/src/server.js"],
"env": {
"ANYLIST_USERNAME": "you@example.com",
"ANYLIST_PASSWORD": "yourpassword",
"ANYLIST_LIST_NAME": "Groceries"
}
}
}
}Installation: Claude Web / Claude Mobile
Claude Web and Mobile require an HTTP MCP server accessible over HTTPS. This project includes a Docker-based HTTP server designed to run behind a Cloudflare Tunnel. The server is designed for self-hosting, but can theoretically support any number of users. You can (should?) restrict what email addresses are allowed to create accounts in the allowed-emails.txt file.
See docs/cloudflare-setup.md for the full setup guide, including:
- Quick tunnel for development (no Cloudflare account needed)
- Named tunnel for production (stable URL on your own domain)
Quick start:
git clone --recurse-submodules https://github.com/bobby060/anylist-mcp.git
cd anylist-mcp
# Configure
cp .env.http.example .env # fill in SERVER_SECRET_KEY and SESSION_SECRET
mkdir -p config
cp allowed-emails.example.txt config/allowed-emails.txt # add your email
# Start server + Cloudflare quick tunnel
docker compose --profile cloudflare-temp up --build
# Watch logs for the trycloudflare.com URL, then add it as an MCP server in Claude Settings/ConnectorsNo common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.