Productivity & teams
Redmine
Issues, time entries and projects in your Redmine, from your agent.
12 endpoints
Connect AnyList shopping lists, recipes and meal plans to your own workflow. Use an AI agent through MCP or REST from automation tools and scripts.
12 tools Read and write
AnyList has no public API, no developer docs and no MCP server (checked 25 Oct 2026). Cotlet runs 12 AnyList tools hosted, over MCP for agents and REST for scripts.
| What you need | Alexa or Siri | GitHub MCP server | Cotlet |
|---|---|---|---|
| Add items to a list | Yes, by voice | Yes | Yes, after your OK |
| Read the list, cross off, clear | No | Yes | Yes |
| Recipes and the meal plan | Read on Echo Show | Yes | Yes, with Complete |
| No AnyList password in a config file | Yes | No | Yes, you sign in once |
| Runs with your computer off | Yes | If you host it | Yes, hosted |
Checked 25 Oct 2026. Sources: AnyList Help: Using AnyList with Amazon Alexa · AnyList Help: Viewing Your Meal Planning Calendar in External Apps · AnyList Help: Using AnyList with Siri · AnyList support on a public API (DAKboard discussion)
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your AnyList password, and nothing lands on a list your household shares until you approve it. Who can see your session
Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.
Enable AnyList for agents. Create a Cotlet account, sign in to AnyList for the Web in its Cloud Browser and press Enable for agents.
Give your agent the address. Add https://cotlet.dev/mcp/v1 to its MCP server or connector list.
Let it in. Chat apps open a Cotlet sign-in. Editors, n8n and scripts send an API key made in the console.
AnyList shares https://cotlet.dev/mcp/v1 with every other app in your workspace. Turned AnyList on after you connected? Refresh the connector and its tools appear.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-anylist \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-anylist": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-anylist]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: anylist_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: anylist_write Create a Cotlet API key with access to AnyList and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Sign in to AnyList in its Cotlet Cloud Browser and enable the app for agents. AnyList Complete is required for access through AnyList for the Web.
curl https://cotlet.dev/api/v1/anylist/lists \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "anylist",
"tool": "list_lists",
"result": {
"lists": [
{
"list": "Groceries",
"items_left": 7,
"items_crossed_off": 3
}
]
}
} Read result.lists and pass a returned list name to get_list. These reads expose no cursor, page or offset inputs.
List details omit crossed-off items by default; use include_crossed_off=true when comparing full snapshots. Items expose names rather than stable item IDs, so do not invent ID-based upserts.
Recipe quantities are returned as saved, without scaling. Meal-plan reads require a date range and omit empty days.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Read shopping-list details into a checklist snapshot with saved categories, quantities and notes. |
| Make | HTTP > Make a request | Read recipes and recipe details into your private ingredient and recipe archive without scaling quantities. |
| Python or Node.js | REST API | Combine a dated meal plan and recipe details into a household meal briefing without adding groceries. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads AnyList; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.
Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.
The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.
Lists are found by name. Shared lists behave like your own, so everyone on them sees each change. Favorites are kept per list.
Returns every list in the account, with its name and how many items are not crossed off. Use list as the list parameter of the other tools. Shared lists appear like your own.
MCP callanylist_read → list_lists
REST endpointGET https://cotlet.dev/api/v1/anylist/lists
No parameters.
{
"lists": [
{
"list": "Groceries",
"items_left": 7,
"items_crossed_off": 3
},
{
"list": "Hardware store",
"items_left": 2,
"items_crossed_off": 0
}
]
} Returns the items in the order AnyList shows them, grouped by category. Each item has its name, quantity and note when you set them, and crossed_off. Crossed off items come back only when you ask for them.
MCP callanylist_read → get_list
REST endpointGET https://cotlet.dev/api/v1/anylist/list
| Name | Type | Description |
|---|---|---|
| list string required | string | Name of the list, as list_lists returns it. |
| include_crossed_off boolean | boolean | Also return crossed off items. Default: false. |
{
"list": "list"
} {
"list": "Groceries",
"items": [
{
"name": "Oat milk",
"category": "Dairy",
"quantity": "2",
"note": null,
"crossed_off": false
},
{
"name": "Avocados",
"category": "Produce",
"quantity": "2",
"note": "ripe",
"crossed_off": false
}
]
} Returns the favorites saved on that list, with the category and the details AnyList keeps for them. An item that is already on the list is marked on_list.
MCP callanylist_read → list_favorites
REST endpointGET https://cotlet.dev/api/v1/anylist/favorites
| Name | Type | Description |
|---|---|---|
| list string required | string | Name of the list. Favorites are kept separately for each list. |
{
"list": "list"
} {
"list": "Groceries",
"favorites": [
{
"name": "Bananas",
"category": "Produce",
"on_list": false
},
{
"name": "Oat milk",
"category": "Dairy",
"on_list": true
}
]
} Adds one item to the list. A shared list shows the change to everyone you share it with. An item that is already on the list is not added twice. By default you confirm each call; you can switch that off for this tool.
MCP callanylist_write → add_list_item
REST endpointPOST https://cotlet.dev/api/v1/anylist/list-items
| Name | Type | Description |
|---|---|---|
| list string required | string | Name of the list. |
| name string required | string | Item name, for example "Oat milk". |
| quantity string | string | Quantity, for example "2". |
| note string | string | Note shown under the item. |
| category string | string | Category as it exists on the list. Without it AnyList picks one. |
{
"list": "Groceries",
"name": "Oat milk",
"quantity": "2",
"category": "Dairy"
} {
"list": "Groceries",
"item": {
"name": "Oat milk",
"category": "Dairy",
"quantity": "2",
"crossed_off": false
},
"added": true
} Changes one item. People sharing the list see it cross off. An unknown item name fails and the list stays as it was. By default you confirm each call; you can switch that off for this tool.
MCP callanylist_write → cross_off_item
REST endpointPOST https://cotlet.dev/api/v1/anylist/off-item/cross
| Name | Type | Description |
|---|---|---|
| list string required | string | Name of the list. |
| name string required | string | Item name as get_list returns it. |
| crossed_off boolean | boolean | true crosses it off, false puts it back. Default: true. |
{
"list": "list",
"name": "Jane Doe"
} {
"list": "Groceries",
"item": "Avocados",
"crossed_off": true
} Removes every crossed off item and leaves the rest. Deleted items cannot be brought back through Cotlet. The call returns the names it removed. By default you confirm each call; you can switch that off for this tool.
MCP callanylist_write → delete_crossed_off_items
REST endpointDELETE https://cotlet.dev/api/v1/anylist/crossed-off-items
| Name | Type | Description |
|---|---|---|
| list string required | string | Name of the list. |
{
"list": "list"
} {
"list": "Groceries",
"deleted": [
"Avocados",
"Dish soap",
"Bananas"
],
"items_left": 4
} New recipes are saved from text, without photos. Recipes come back as saved, not scaled.
Returns recipe names with their collections, so you can pick one and call get_recipe. Recipes shared by your household appear with your own.
MCP callanylist_read → list_recipes
REST endpointGET https://cotlet.dev/api/v1/anylist/recipes
| Name | Type | Description |
|---|---|---|
| collection string | string | Name of a recipe collection. |
| query string | string | Words to match in the recipe name. |
{
"recipes": [
{
"recipe": "Lemon pasta",
"collections": [
"Weeknight"
]
},
{
"recipe": "Sheet pan chicken",
"collections": [
"Weeknight",
"Family"
]
}
]
} Returns the ingredients with their quantities, the preparation steps in order and the servings. It reads the recipe as saved and does not scale it.
MCP callanylist_read → get_recipe
REST endpointGET https://cotlet.dev/api/v1/anylist/recipe
| Name | Type | Description |
|---|---|---|
| recipe string required | string | Name of the recipe, as list_recipes returns it. |
{
"recipe": "recipe"
} {
"recipe": "Lemon pasta",
"servings": 4,
"ingredients": [
"400 g spaghetti",
"2 lemons",
"60 g parmesan"
],
"steps": [
"Boil the pasta.",
"Toss with lemon zest, juice and parmesan."
]
} Adds the recipe the way AnyList does when you paste text into it. Household members who share your recipes see it. Photos are not uploaded. By default you confirm each call; you can switch that off for this tool.
MCP callanylist_write → create_recipe
REST endpointPOST https://cotlet.dev/api/v1/anylist/recipes
| Name | Type | Description |
|---|---|---|
| name string required | string | Recipe name. |
| ingredients array required | array | One string per ingredient, with quantity. |
| steps array | array | One string per preparation step. |
| servings integer | integer | Number of servings. |
| collection string | string | Name of a recipe collection to put it in. |
{
"name": "Jane Doe",
"ingredients": "ingredients"
} {
"recipe": "Lemon pasta",
"servings": 4,
"ingredients_saved": 3,
"steps_saved": 2,
"collection": "Weeknight"
} Part of AnyList Complete. Ingredients from several recipes are merged into one item by AnyList itself.
Returns the recipes and notes on each day of the range, in calendar order. Days with nothing planned are left out.
MCP callanylist_read → get_meal_plan
REST endpointGET https://cotlet.dev/api/v1/anylist/meal-plan
| Name | Type | Description |
|---|---|---|
| from date required | date | First day, YYYY-MM-DD. |
| to date required | date | Last day, YYYY-MM-DD. |
{
"from": "2026-10-01",
"to": "2026-10-01"
} {
"entries": [
{
"date": "2026-10-26",
"type": "recipe",
"title": "Lemon pasta"
},
{
"date": "2026-10-27",
"type": "note",
"title": "Leftovers"
}
]
} Adds the recipe to that day. The meal plan is shared with your household, so they see the entry. It does not add ingredients to a list; use add_meal_plan_ingredients_to_list for that. By default you confirm each call; you can switch that off for this tool.
MCP callanylist_write → add_recipe_to_meal_plan
REST endpointPOST https://cotlet.dev/api/v1/anylist/recipe-to-meal-plans
| Name | Type | Description |
|---|---|---|
| recipe string required | string | Name of the recipe. |
| date date required | date | Day, YYYY-MM-DD. |
{
"recipe": "recipe",
"date": "2026-10-01"
} {
"date": "2026-10-28",
"recipe": "Sheet pan chicken",
"added": true
} Adds every ingredient of the recipes planned from the first to the last day, the way "Add All Ingredients to List" does in the Meal Plan tab. AnyList combines similar ingredients into one item. It returns the items added. By default you confirm each call; you can switch that off for this tool.
MCP callanylist_write → add_meal_plan_ingredients_to_list
REST endpointPOST https://cotlet.dev/api/v1/anylist/meal-plan-ingredients-to-lists
| Name | Type | Description |
|---|---|---|
| list string required | string | Name of the list that receives the ingredients. |
| from date required | date | First day, YYYY-MM-DD. |
| to date required | date | Last day, YYYY-MM-DD. |
{
"list": "list",
"from": "2026-10-01",
"to": "2026-10-01"
} {
"list": "Groceries",
"from": "2026-10-26",
"to": "2026-11-01",
"recipes": 5,
"items_added": 23
} Your signed-in AnyList for the Web profile, AES-256-GCM, in Finland. No password.
The 12 AnyList tools. Never the session cookie.
Your lists, recipes and meal plan, and what your household shares with you.
Your subscription, household members, password, and deleting lists or recipes.
An email with a sign-in link reaches you. We never sign in for you.
Disable for agents, reset the browser or delete the API key. The next call fails.
cotlet.dev has A+ grades on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). We have no SOC 2 report or third-party pentest yet.
"We also reserve the right to terminate any user's right to access the site or services at any time, in our discretion."
That is the only rule that could reach an agent. The terms have no clause on bots, scraping, reverse engineering or third-party apps, and Home Assistant integrations have read AnyList since 2023. We found no public case of an account closed for automation (checked 25 Oct 2026). AnyList can still end access at its own discretion.
AnyList is a small team on a shared sync service. Keep schedules to a few runs a day; the Home Assistant integration polls no more than once a minute.
AnyList's terms say it may change the service "at any time, with or without notice". When the web app moves something, the fix is ours and your prompts keep working. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Cross off an item | Yes, cross_off_item with crossed_off false |
| Delete crossed off items | Re-add them from Recent Items in AnyList |
| Add an item or meal plan ingredients | Cross off or delete them in AnyList |
| Add a recipe to the meal plan | Remove the entry in AnyList |
| Create a recipe | Delete it in AnyList; it syncs to your household first |
6 of 12 tools ask first: every write, because lists, recipes and the meal plan sync to the people you share them with. Reads run at once. Switch the wait off per tool, for example for add_list_item on a list only you use.
AnyList keeps recently crossed off and deleted items on its Recent Items screen, so a wrong clear is a few taps to fix.
{
"name": "add_list_item",
"arguments": {
"list": "Groceries",
"name": "Oat milk",
"quantity": "2",
"category": "Dairy"
}
} curl -X POST https://cotlet.dev/api/v1/anylist/list-items \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"list":"Groceries","name":"Oat milk","quantity":"2","category":"Dairy"}' {
"list": "Groceries",
"item": {
"name": "Oat milk",
"category": "Dairy",
"quantity": "2",
"crossed_off": false
},
"added": true
} REST at /api/v1/anylist serves the same tools to scripts and cron jobs, with the same key and price. Without AnyList Complete the web app does not open, so calls fail and cost nothing. The tools table lists the REST path of each tool.
About $15 a monthfor one household planning dinners and shopping every week, 2,540 credits. AnyList Complete is billed by AnyList as before.
| Job | Calls | Credits |
|---|---|---|
| Meal plan ingredients to Groceries, weekly | 2 × 4 | 80 |
| Plan five dinners from saved recipes, weekly | 7 × 4 | 280 |
| Add an item you mention in chat | 1 × 40 | 400 |
| Clear crossed off items after a store trip | 2 × 12 | 240 |
| Save a recipe from text, weekly | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 2,540 |
The month is our example. FMI's 2026 shopper survey puts a US household at 2.8 grocery trips a week, so about 12 clears a month; the rest is five dinners and ten chat adds a week. The Cloud Browser is most of the bill. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| bobby060/anylist-mcp | The most starred (35). Five grouped tools for lists, recipes, collections and the meal plan, on the reverse-engineered API. | Your AnyList password in an env var; Claude on the web needs Docker and a Cloudflare Tunnel. Release 1.8.1, 5 Oct 2026, no license. |
| Forks and smaller servers | djbrinkerhoff (Cloudflare Workers), zkSac/AnyListProMax (prices, UPC codes), avanrossum, mplabs, PuttyByteCoding: 0 or 1 star each. | One maintainer each, mostly unlicensed, and every one asks for your password. |
| kevdliu/anylist | The Node wrapper under most of the servers above, 150 stars. | A library: you write the agent side and keep it working. |
| moryoav/ha-anylist, kevdliu/hacs-anylist | Home Assistant: lists as to-do entities, recipe actions, polling every 60 s. | Needs a Home Assistant box at home; no MCP. |
We found no hosted AnyList MCP server besides ours. A GitHub server is free if you run a home server and accept your password in its config. Alexa or Siri is enough for adding items by voice. Cotlet suits an agent that keeps the list and meal plan with no machine of yours running.
Behind Cotlet is Take Group sp. z o.o., a Polish software company in the EU (VAT PL6342984273) working since 2019 and led by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the AnyList tools go to contact@cotlet.dev.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.
Sign up free at https://cotlet.dev, open AnyList under Integrations in the console and sign in to AnyList for the Web in its Cloud Browser. The trial starts with your first app and asks for no card.
Yes. Cotlet works in AnyList for the Web, and AnyList opens the web app to AnyList Complete subscribers only. Complete costs $9.99 a year for one person or $14.99 a year for a household (checked 25 Oct 2026). Your account needs it before you sign in to Cotlet.
No. You type it into AnyList's own sign-in page in your Cloud Browser, and we keep the signed-in session, not the password. The GitHub servers need it in their config.
No. AnyList sends no events out, so nothing tells an agent that someone added or crossed off an item. Run your agent on a schedule instead, for example get_list every evening.
Only in how you call it. Both carry the same 12 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with AnyList or Purple Cover, Inc.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy