Skip to main content
Glama
davidashman

AnyList MCP Server

by davidashman
README.md
# AnyList MCP Server

A [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that connects AI assistants to [AnyList](https://www.anylist.com/) — giving them access to your shopping lists, recipes, and meal plans.

## Features

- **Shopping Lists** — View lists, check items, add freeform items or recipe ingredients
- **Recipes** — Search and retrieve full recipe details including ingredients and steps
- **Meal Planning** — View and schedule meals on your AnyList calendar
- **Grocery Helpers** — Add ingredients from one or multiple recipes to a list with duplicate handling

## Prerequisites

- Node.js >= 18
- An AnyList account (email/password)

## Setup

1. Clone this repository:

   ```
   git clone <this-repo> anylist-mcp
   cd anylist-mcp
   ```

2. Install dependencies:

   ```
   npm install
   ```

3. Build:

   ```
   npm run build
   ```

## Configuration

The server requires your AnyList credentials as environment variables:

| Variable | Description |
|---|---|
| `ANYLIST_EMAIL` | Your AnyList account email |
| `ANYLIST_PASSWORD` | Your AnyList account password |

### Claude Desktop

Add to your Claude Desktop config (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "anylist": {
      "command": "node",
      "args": ["/path/to/anylist-mcp/dist/index.js"],
      "env": {
        "ANYLIST_EMAIL": "your-email@example.com",
        "ANYLIST_PASSWORD": "your-password"
      }
    }
  }
}
```

### Other MCP Clients

Run the server via stdio transport:

```
ANYLIST_EMAIL=you@example.com ANYLIST_PASSWORD=secret node dist/index.js
```

Or for development:

```
ANYLIST_EMAIL=you@example.com ANYLIST_PASSWORD=secret npm run dev
```

## Tools

### Lists

| Tool | Description |
|---|---|
| `get_lists` | List all shopping lists with item counts |
| `get_list_items` | Get all items on a specific list |
| `add_item_to_list` | Add a freeform item to a list (with duplicate checking) |
| `add_ingredient_to_list` | Add a recipe ingredient to a list with proper categorization |

### Recipes

| Tool | Description |
|---|---|
| `get_recipes` | List all recipes, optionally filtered by name |
| `get_recipe_details` | Get full recipe details including ingredients and steps |

### Groceries

| Tool | Description |
|---|---|
| `add_recipe_ingredients_to_list` | Add all ingredients from a recipe to a list |
| `add_ingredients_to_list` | Batch add ingredients from multiple recipes to a list |

### Meal Planning

| Tool | Description |
|---|---|
| `get_meal_plan` | Get meal plan events for a date range (defaults to current week) |
| `add_meal_plan_event` | Schedule a recipe or event on a specific day |

## Tool Details

### `add_item_to_list`

Add a freeform item to a shopping list. If the item already exists and is checked off, it will be unchecked instead of duplicated.

- `item_name` (required) — Name of the item
- `list_name` (required) — Target list name
- `quantity` (optional) — e.g. "2 lbs", "3"

### `add_ingredient_to_list`

Add a specific ingredient from a recipe to a shopping list. Uses AnyList's ingredient handler for proper categorization, and matches against existing or recently used items.

- `recipe_name` or `recipe_id` (one required) — The recipe to pull from
- `ingredient_name` (required) — Ingredient name (case-insensitive, partial match)
- `list_name` (optional, default: "Groceries") — Target list

### `add_recipe_ingredients_to_list`

Add all ingredients from a single recipe to a list. Handles duplicates: skips items already present, unchecks previously checked-off items.

- `recipe_name` or `recipe_id` (one required)
- `list_name` (optional, default: "Groceries")

### `add_ingredients_to_list`

Batch version — add ingredients from multiple recipes at once. Deduplicates across recipes.

- `recipe_names` or `recipe_ids` (one required, array)
- `list_name` (optional, default: "Groceries")

### `get_recipe_details`

Get full recipe details including ingredients (with name, quantity, and notes) and preparation steps.

- `recipe_name` or `recipe_id` (one required)

### `add_meal_plan_event`

Schedule a recipe or titled event on the meal plan calendar.

- `date` (required) — YYYY-MM-DD format
- `recipe_name` or `recipe_id` (optional) — Recipe to schedule
- `title` (optional) — Event title (used if no recipe, or as override)
- `label` (optional) — e.g. "Breakfast", "Lunch", "Dinner"

## License

ISC

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation3/5

There is significant overlap between tools like add_ingredients_to_list, add_ingredient_to_list, add_recipe_ingredients_to_list, and add_item_to_list, which all add items to shopping lists with subtle distinctions that could confuse an agent. However, the descriptions provide some clarity on their specific use cases, such as handling multiple recipes versus single recipes versus freeform items.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, such as add_ingredients_to_list, get_list_items, and get_meal_plan. This predictability makes it easy for an agent to understand and navigate the tool set without confusion.

Tool Count5/5

With 10 tools, the server is well-scoped for managing shopping lists, recipes, and meal plans. Each tool serves a distinct purpose within this domain, and the count is neither too sparse nor overwhelming, fitting typical server ranges of 3-15 tools.

Completeness4/5

The tool set covers core operations for shopping lists (add, get), recipes (get details, list), and meal plans (add events, get plan), with minor gaps such as missing update or delete functions for items, lists, or recipes. Agents can likely work around these omissions, but they represent a slight limitation in lifecycle coverage.

Maintenance

ActivityInactive
ResponsivenessNo issues