picnic-mcp
Interacts with the Picnic grocery delivery app: search the catalogue, pick the best product per ingredient by preference (cheapest, best value per kg, organic, pack size), view and modify the cart (add, remove, clear), browse Picnic and personal recipes with ingredients and nutrition, add or remove a recipe's ingredients to/from the cart, create and delete your own recipes, list delivery slots, and read order history. Checkout is intentionally left to the Picnic app.
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., "@picnic-mcpfind the cheapest ingredients for lasagna and add them to my cart"
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.

picnic-mcp
English | Deutsch | Nederlands | Français
An MCP server and Claude plugin for Picnic, the grocery delivery app. Claude can search the catalogue, pick the best product for each ingredient (cheapest, organic, best value), fill your cart, read Picnic recipes with their nutrition, and save your own recipes in the app. You confirm and pay for the order in the Picnic app, so Claude never checks out for you.
It uses only the Python standard library. There is nothing to install from PyPI and no third-party code to trust. The Picnic client, the MCP protocol layer, the browser login and the credential storage are all written from scratch in this repository.
Read this first
This project is unofficial and not affiliated with Picnic. Picnic has no public API. The endpoints were worked out by reading the public source of the maintained python-picnic-api2 project as a reference (nothing is imported from it) and by testing against a real account. Picnic can change or block this API at any time, and using it may go against their terms of service. Use it for your own account and for personal use.
Related MCP server: Tiv Taam MCP Server
Install
You need uv. The first start downloads Python 3.14 (pinned in .python-version) and builds the project, which can take a little while. After that it starts in a second.
As a Claude plugin
/plugin marketplace add jlb-jlb/picnic-mcp
/plugin install picnic-mcp@picnic-mcp-marketplaceClaude Code asks for your Picnic country (nl, de, be or fr) when the plugin is enabled. The plugin also adds a skill that tells Claude the order in which to use the tools.
As a plain MCP server
git clone https://github.com/jlb-jlb/picnic-mcp
claude mcp add picnic --env PICNIC_COUNTRY=de -- uv run --locked --directory ./picnic-mcp picnic-mcpUse the absolute path to the clone if your client starts the server from another folder.
Sign in
Ask Claude to log in to Picnic. It calls the start_login tool, which opens a sign-in page in your browser. You enter your e-mail and password, choose SMS or e-mail for the one-time code, and enter the code. Picnic requires this two-factor step on accounts that have it enabled.
The page runs on your own computer and closes when you are done. It sends your details only to Picnic. Claude never sees your password or the code. Without Claude, the same page opens with uv run --directory <path to this repository> picnic-mcp login --web, and a plain terminal prompt is available by leaving out --web. The plain picnic-mcp command only exists on your PATH if you installed the package with uv tool install.
Where your credentials go
What | Where | Notes |
Password and one-time code | From your browser to the local page, on to Picnic | Kept in memory for the duration of the login call only. Never written to disk, never logged, never shown to Claude. |
Session token | The operating system's credential store | Windows Credential Manager, macOS Keychain, or the Linux desktop keyring through |
Without a credential store the login fails with a message that says what to install. On Linux that means secret-tool from libsecret (libsecret-tools on Debian and Ubuntu) and a running keyring such as GNOME Keyring. Headless servers and bare WSL usually have none.
The sign-in page is a short-lived local web page with these safeguards:
It listens on
127.0.0.1only, on a random port.The address contains a one-time random secret. Any other address returns 404.
It refuses requests with another host name (DNS rebinding) and form posts from other sites.
It sets no cookies and runs no scripts, and a strict content security policy forbids everything else.
The request size is capped, failed attempts are limited, and the page expires after five minutes.
It logs nothing.
Data and network
The server talks to one place: the Picnic API at storefront-prod.<country>.picnicinternational.com. It sends no telemetry and stores no conversation content. Your cart, recipes and order history live with Picnic. The only thing stored on your computer is the session token in the credential store. Log out with picnic-mcp logout, which deletes the stored token for your country.
Tools
Tool | What it does |
| Opens the local sign-in page described above. |
| Search the catalogue. Returns id, name, price in cents, unit size and unit price. |
| Picks the best product per ingredient by a preference (cheapest for the amount, best value per kg, organic, conventional, smallest or largest pack) and returns the packs to buy, total cost and leftover. Does not touch the cart. |
| Show cart items and the total in cents. |
| Add a product by id (count 1 to 50). |
| Remove a quantity of a product. |
| Empty the cart. |
| Search Picnic's recipes and your own. Returns id, name, duration and labels such as Vegan. |
| Show a recipe: preparation steps, ingredients with the product each maps to, amounts, and nutrition per portion. |
| Add a recipe's ingredients to the cart like the app's add-all button, with portions and optional ingredients to include or skip. |
| Take a recipe's ingredients out of the cart again. |
| Save your own recipe in the Picnic app ("Eigenes Rezept") from a name, portions and ingredient product ids. Does not touch the cart. |
| Delete a recipe you created with |
| List bookable delivery windows for the current cart, soonest first. Does not book one. |
| List recent completed deliveries with date, delivery window and total paid. It does not include the products. |
Every tool declares a title and the read-only, destructive, idempotent and open-world hints, so clients can ask before anything that removes data.
There is no checkout tool on purpose. The server fills the cart and you confirm the order in the Picnic app.
Example prompts
"Suggest three healthy dinners for next week that take under 30 minutes each and share ingredients, so a 1 kg bag of carrots or a bunch of coriander is used up across two recipes. Check the nutrition per portion, then show me one combined shopping list with the total cost before you add anything to the cart."
"I cook for two people. Find the best Picnic products for 400 g spaghetti, 600 g carrots, 3 eggs, 200 g feta and a bunch of parsley. Choose organic for the vegetables and the cheapest option for everything else, and show me the packs, the total and what is left over."
"Find a vegan lentil recipe under 30 minutes with at least 20 g of protein per portion, add it to the cart for two people, and tell me which delivery slots are free on Friday evening."
"Plan five quick lunches I can prepare on Sunday for the work week, vegetarian and high in protein, with as few different ingredients as possible. Search Picnic's recipes for ideas and show the cost per portion."
"Save my lentil soup as a Picnic recipe for four portions with these ingredients, so I can add it to the cart with one tap in the app."
Good to know
Picnic sells whole packs. A recipe you create holds products and pack counts, not "3 carrots", and the app has no place for preparation steps or an at-home section in your own recipes. Keep those in your notes.
Organic is recognised from the product name (Bio, Bioland, Demeter, Naturland), because the search results carry no organic flag.
find_ingredientsmarks a result as loose when no product name contains every word of the query.Nutrition values come from Picnic's own recipes and are estimates.
Troubleshooting
Problem | What to do |
"no stored session" | Ask Claude to log in, or run |
Login fails right after the code | Check that the country setting matches your account. Codes expire quickly. |
"no desktop keyring found" (Linux) | Install |
HTTP 403 on every call | The session token expired. Log in again. |
First start is slow | uv is downloading Python and building the project. Later starts are fast. |
Umlauts look broken | Update to the current version, which reads and writes UTF-8 on Windows. |
Development
uv run python -m unittest discover -s testsThe tests run offline against a fake network layer. Continuous integration runs them on Windows, macOS and Linux and also does a real round trip against each system's credential store.
Releasing: raise the version in pyproject.toml, .claude-plugin/plugin.json and src/picnic_mcp/server.py, run uv lock, and set the ref and version of the plugin entry in .claude-plugin/marketplace.json to the new tag. Commit, then push a tag such as v0.3.0. The release workflow checks that the tag matches the versions, runs the tests and publishes the GitHub Release. Plugin installs follow the tag named in the marketplace file, not main.
Layout:
src/picnic_mcp/client.py: HTTP client (urllib), login, search, cart, recipes, deliveries, plus helpers that shrink responses for the model.src/picnic_mcp/finder.py: the ingredient finder (pack parsing, organic detection, ranking).src/picnic_mcp/auth.py,weblogin.py,secretstore.py: login, the browser sign-in page and the credential store backends.src/picnic_mcp/server.py: JSON-RPC 2.0 over stdio, tool registry, annotations and argument validation..claude-plugin/andskills/: the plugin manifest, the marketplace file and the shopping skill.tests/: offline tests.
Ideas for later
Nutrition lookup via Open Food Facts for healthy meal planning.
A
plan_weekMCP prompt that turns dietary goals and preferences into a cart.
License
MIT, see LICENSE.
Available Tools
15 toolsadd_recipe_to_cartAdd a recipe to the cartA
Add a recipe's needed ingredients to the cart, like the app's 'add all' button. Ingredients the user probably has at home, pantry items and alternatives are left out by default. Use include_ingredient_ids (from get_recipe) to add ones the user lacks, and skip_ingredient_ids to leave out needed ones the user already has. Does not place an order.
| Name | Required | Description | Default |
|---|---|---|---|
| portions | No | ||
| recipe_id | Yes | Recipe id from search_recipes or create_recipe | |
| skip_ingredient_ids | No | ||
| include_ingredient_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds genuinely new behavior: the default ingredient-filtering policy and the fact that no order is placed. It stops short of disclosing what happens on repeat calls (idempotentHint=false) or how include_ingredient_ids and skip_ingredient_ids interact if an id appears in both.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it does and its default exclusions first, then how to override, then the explicit non-goal. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should hint at the result; it only says it doesn't place an order, not what the cart looks like afterward. Otherwise, for a 4-param mutation with thin schema coverage, the default-filtering policy and override mechanism make it callable without further guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% — just recipe_id is documented — so the description must compensate. It does add real meaning for include_ingredient_ids and skip_ingredient_ids (including their source, get_recipe), but 'portions' is never mentioned, leaving scaling behavior and the default of 2 undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Add a recipe's needed ingredients to the cart') and pins the scope with the concrete 'add all' button analogy and the boundary 'Does not place an order.' The recipe-level framing inherently distinguishes it from the single-item sibling add_to_cart and from remove_recipe_from_cart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the default behavior (pantry items, probable-at-home ingredients and alternatives are excluded) and then names the two levers for changing it: include_ingredient_ids for items the user lacks, skip_ingredient_ids for needed items the user already has. It also rules out order placement, so the agent knows when this tool is *not* enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_cartAdd a product to the cartB
Add a product to the cart. Does not place an order.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| product_id | Yes | Picnic product id from search_products |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive, open-world mutation, so the bar is lower. The description's one extra fact (no order is created) is a genuine boundary, but it omits whether repeated calls stack quantities, whether an existing line item is replaced, and whether login is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler, and the scoping caveat follows the action statement. It is efficient, though its brevity borders on under-specification for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with reasonable annotation coverage and no output schema, the definition is close to sufficient. Missing quantity semantics and merge-on-duplicate behavior are the main gaps an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: product_id is documented in the schema, while 'count' has only type/default/min/max constraints and no explanation of whether it sets or increments the line quantity. The description says nothing about either parameter and so fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a product to the cart') that is immediately distinguishable from get_cart, remove_from_cart and clear_cart. It does not, however, differentiate itself from the very similar sibling add_recipe_to_cart, which a selecting agent would need.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Does not place an order' is a useful negative boundary that rules out treating this as checkout. But there is no positive guidance on when to prefer this over add_recipe_to_cart, nor any prerequisite such as needing a product_id from search_products or a completed login.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_cartEmpty the cartADestructiveIdempotent
Remove every item from the cart.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds only the bulk scope ('every item'), not the irreversibility warning, auth needs, or behavior on an already-empty cart that would add real value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and no filler. It is efficient, though its brevity is close to the minimum needed for a destructive bulk operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, non-read-only, idempotent, destructive tool with full annotation coverage and no output schema, the description states enough to call it correctly. The only missing piece is explicit contrast with remove_from_cart and expected behavior on an empty cart.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty at 100% coverage, which is the baseline-4 case. There is nothing for the description to disambiguate and it introduces no confusing parameter wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Remove every item from the cart'), and the word 'every' implicitly scopes it as a bulk clear as opposed to the sibling remove_from_cart, which handles a single item. It is clear but never names or contrasts the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the bulk-emptying variant rather than the single-item remove_from_cart, but the description gives no explicit when-to-use or when-not-to-use guidance, nor any prerequisite note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recipeSave your own recipeA
Save a recipe of the user's own in the Picnic app ('Eigenes Rezept'), so its ingredients can be added to the cart there in one tap. Find each ingredient with search_products first and pass its id. Quantity is the number of packages of that product. Does not touch the cart or place an order.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Recipe title, at most 80 characters | |
| portions | No | ||
| ingredients | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false and openWorld=true; the description adds genuinely new context about where the recipe lives and that it does not touch the cart or place an order, which reassures an agent about side effects. It does not mention what happens on duplicate names or whether repeated calls create duplicates (relevant given idempotentHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences ordered purpose → prerequisite → side effects, with no filler. Each sentence adds information the schema or annotations do not already provide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no output schema, the description covers purpose, input sourcing, quantity semantics and side-effect boundaries. Remaining gaps (meaning of portions, error behavior on duplicates, what is returned) are minor but real.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description carries real weight: it explains that product_id comes from search_products and that quantity means 'number of packages of that product', covering the undocumented nested fields. The 'portions' parameter remains unexplained beyond its schema bounds, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save a recipe of the user's own in the Picnic app') and grounds it in the app's own term 'Eigenes Rezept'. It clearly distinguishes itself from search_recipes/get_recipe/delete_recipe and, via 'Does not touch the cart or place an order', from add_recipe_to_cart and add_to_cart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite workflow: 'Find each ingredient with search_products first and pass its id', naming the sibling tool to use beforehand. It also rules out cart/order effects, implicitly steering agents to add_recipe_to_cart for that purpose, though it never names that alternative directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recipeDelete your own recipeADestructiveIdempotent
Delete a recipe the user created with create_recipe. Only for user-created recipes, never Picnic's own.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes | Id returned by create_recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds the genuinely new scope constraint (user-created only) and names the creating tool as the id source, but says nothing about irreversibility, permissions, or what happens to a recipe already in a cart.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the constraint. Zero filler and nothing an agent must read past.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with full annotation coverage, the description covers action, eligibility, and id provenance. Only permanence/failure behavior is unstated, and destructiveness is at least implied by the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already states "Id returned by create_recipe". The description's "created with create_recipe" reinforces rather than extends this, so baseline 3 applies — the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Delete a recipe") with an explicit scope tie-back to create_recipe, which distinguishes it from read-oriented siblings like get_recipe and search_recipes. An agent knows immediately what is removed and which recipes the tool covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Only for user-created recipes, never Picnic's own" is a clear when-not condition, which is the main routing question for a delete tool. It doesn't name an alternative for non-user recipes (there is none in the sibling list), so the missing piece is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_ingredientsFind the best product per ingredientARead-onlyIdempotent
Find the best Picnic product for each ingredient of a recipe or shopping list, by a preference. Per item it searches, keeps products whose name contains every query word, and ranks them. Preferences: 'cheapest' (lowest total cost for the amount, so a 250 g pack beats a 1 kg pack when 200 g is needed), 'best_value' (lowest price per kg or litre), 'organic' (only Bio products, cheapest first), 'conventional', 'smallest_pack', 'largest_pack'. Give amount like '300 g', '0.5 l' or '3' (pieces) to get the packs to buy, the total cost and the leftover. Organic is recognised from the product name (Bio, Bioland, Demeter, Naturland). Set preference per item to mix, for example organic vegetables and cheapest pasta. exclude drops products whose name contains a word, such as 'mix' or 'stifte'. Returns best and a few alternatives per item and does not touch the cart: confirm the choices, then call add_to_cart with packs as count.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| preference | No | cheapest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description adds substantive behavior beyond them: it keeps only products whose name contains every query word, ranks them, recognizes organic status from name keywords (Bio, Bioland, Demeter, Naturland), and returns best plus a few alternatives without mutating the cart.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then preference semantics, then the cart workflow, so an agent can stop reading early. The preference block is a dense run-on that could be bulleted, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return shape (best and a few alternatives per item, packs to buy, total cost, leftover) and the follow-up call. The only omission is the items maxItems=20 cap and minItems=1, which the schema enforces anyway.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0% for the enum fields, so the description must carry the load, and it does: every preference value is defined ('cheapest' accounts for amount needed, 'best_value' is price per kg/litre, 'organic' is Bio-only cheapest first, etc.), amount syntax is illustrated, exclude is explained with examples, and per-item preference override of the global preference is stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: finds the best Picnic product for each ingredient of a recipe or shopping list, with a named ranking goal. It is clearly distinct from the sibling search_products, which does not do per-ingredient ranking or cost/leftover math.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context (recipe or shopping-list ingredients) and an explicit workflow: it does not touch the cart, so confirm choices and then call add_to_cart with packs as count. It never explicitly contrasts with search_products for single-item lookups, so the alternative routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cartShow the cartARead-onlyIdempotent
Show the current cart with item counts and the total price in cents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description still adds real value by disclosing what the response contains and the unit of the price (cents), which is not in any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, with the return contents appended. Nothing is wasted and nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with no output schema, the description usefully sketches the return shape (item counts, total in cents). Minor gaps remain: behavior on an empty cart and whether the cart is user- or session-scoped are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to disambiguate. The schema is empty and fully described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Show the current cart") plus the payload contents (item counts, total price in cents). This clearly separates it from the mutation siblings add_to_cart/remove_from_cart/clear_cart, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the read path for the cart versus the add/remove/clear siblings. There is no explicit statement of when to call it (e.g., before checkout) or when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_delivery_slotsShow delivery slotsARead-onlyIdempotent
List bookable delivery windows for the current cart, soonest first, with the time to order by. The tool only reads the slots, it does not book one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the read-only sentence largely restates structured data. It does add useful behavioral context that results are ordered soonest-first and include an order-by time, but says nothing about limit/pagination or behavior with an empty cart.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core listing behavior front-loaded and the read-only caveat following. Every clause adds information and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description covers purpose, scope, ordering, and a key return field (time to order by). It falls short only on limit/pagination behavior and empty-cart edge cases, which are minor for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single `limit` parameter has 0% schema description coverage, so the description should explain it, but it never mentions result caps or paging. The parameter's default/maximum bounds are only inferable from the schema, and the description gives no guidance on how many slots are returned or how to request more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('bookable delivery windows') scoped to the current cart, plus ordering ('soonest first') and payload ('time to order by'). No sibling tool is similar, so differentiation is moot but the purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sets a boundary: 'The tool only reads the slots, it does not book one,' which tells the agent not to expect a booking action. There is no named alternative because no sibling overlaps, but it lacks explicit 'use when' phrasing such as requiring a non-empty cart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_historyShow past ordersARead-onlyIdempotent
List the user's recent completed deliveries, newest first, with order time, delivery window and total paid in cents. It does not list the products in each order.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered; the description adds genuinely useful behavior the annotations don't carry, namely sort order and the explicit omission of line items. It stops short of describing pagination or what happens as orders age out, which would have made it a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the returned shape front-loaded and the exclusion placed last where it reads as a caveat. Every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool with no output schema and rich annotations, the description covers return fields, ordering and a key limitation. The remaining gap is the `limit` parameter and default page size, which the description leaves entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter, `limit`, with 0% schema description coverage, and the description never mentions it. The schema's default (10), minimum (1) and maximum (50) still convey the constraint structurally, but the description does not state what the limit counts or how it interacts with 'recent'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the user's recent completed deliveries') and immediately pins down ordering ('newest first') and returned fields (order time, delivery window, total paid in cents). The explicit exclusion ('does not list the products in each order') further sharpens the boundary, so an agent knows exactly what this tool yields versus a product/ingredient tool in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope ('recent completed deliveries') implies when it applies, but there is no explicit statement of when to call it versus other tools, nor any prerequisite or exclusion guidance. No sibling overlaps directly with order history, which limits the harm, but usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recipeShow a recipeARead-onlyIdempotent
Show a recipe: name, description, preparation steps, ingredients with the Picnic product each maps to, amounts, and nutrition per portion (energy, fat, carbohydrates, sugar, protein, salt, fibre). Each ingredient has a kind: 'needed' (added to the cart by default), 'probably_at_home' (the app's 'Bestimmt noch zuhause' section, such as onions), 'pantry' (oil, salt, spices, also listed in own_ingredients) or 'alternative' (a variant of a needed ingredient). Only 'needed' ones are selected by default.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes | Recipe id from search_recipes or create_recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive). The description adds genuine behavioral context beyond that: the ingredient 'kind' taxonomy and the non-obvious default that only 'needed' ingredients are selected for the cart. It stops short of covering error behaviour (e.g., invalid recipe_id) or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the resource then the returned fields, with no filler sentences. The ingredient-kind explanation is long but each clause conveys distinct semantics an agent needs in order to interpret 'needed' vs 'alternative'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden, and it does so thoroughly by listing fields and per-portion nutrition. Remaining gaps are minor: not-found behaviour, and whether amounts or Picnic products can be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, and the schema already states the id's origin (search_recipes or create_recipe), so the description need not duplicate it. With only one fully documented parameter, there is little left to clarify, though the description adds nothing directly about recipe_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Show a recipe') and immediately enumerates the fields returned, so there is no ambiguity about what the tool produces. It does not explicitly contrast itself with search_recipes or create_recipe, which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the resource ('Show a recipe') and by the schema note that recipe_id comes from search_recipes or create_recipe. The description itself never states when to call this versus search_recipes or add_recipe_to_cart, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_cartRemove a product from the cartCDestructive
Remove a quantity of a product from the cart.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| product_id | Yes | Picnic product id from search_products |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the notion of removing a *quantity*, and says nothing about what happens when count exceeds the cart quantity, whether the call errors or partially removes, or what state the cart is left in.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity reflects under-specification as much as tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema and one undocumented parameter, the description is too thin. It should indicate error/partial-removal behavior and the resulting cart state, neither of which is available anywhere else in the structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: product_id is documented in-schema, count is not. The word 'quantity' in the description maps loosely to count and clarifies that removal can be partial rather than whole-line, but it gives no default, bounds, or behavior for counts above what's in the cart.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (remove a quantity of a product from the cart), which is clearly distinct from add_to_cart and clear_cart by name and text. It does not explicitly contrast itself with siblings such as remove_recipe_from_cart or clear_cart, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives (e.g. use clear_cart to empty the cart, or remove_recipe_from_cart for recipe-based items). The agent must infer from the name alone that this is for partial/line-item removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_recipe_from_cartRemove a recipe from the cartCDestructiveIdempotent
Take a recipe's ingredients out of the cart again.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes | Recipe id from search_recipes or create_recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is fully covered by structured data. The description adds essentially nothing beyond that — it does not say whether the recipe itself is deleted, whether already-placed orders are affected, or what state the cart is left in.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no padding, which is good, but it is under-specified rather than concise. The vague word 'again' consumes space without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema, the description omits what an agent most needs: the blast radius of the removal and the resulting cart state. With only one well-documented parameter the schema burden is low, but the behavioral gap is not filled anywhere else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single recipe_id parameter is already documented as coming from search_recipes or create_recipe. The description contributes no additional meaning about the identifier, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb phrase 'take ... out of the cart' with the resource 'a recipe's ingredients' gives a rough sense of the action, but the trailing 'again' adds ambiguity rather than specificity. It does not distinguish itself from the sibling tools remove_from_cart or clear_cart, so an agent cannot tell whether it removes one ingredient, a recipe's whole contribution, or everything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this instead of remove_from_cart, clear_cart, or add_recipe_to_cart. The word 'again' faintly implies it reverses an earlier add_recipe_to_cart, but the agent has to infer that pairing rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsSearch productsBRead-onlyIdempotent
Search the Picnic catalogue. Returns id, name, price in cents, unit size and unit price.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Search term, e.g. 'haferflocken' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds value by disclosing the returned fields (id, name, price in cents, unit size, unit price), which is genuinely useful since there is no output schema, but says nothing about result limits, pagination or match behaviour.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with purpose front-loaded and the return shape following immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Listing return fields partially compensates for the missing output schema, and the annotations cover safety. But for a tool sitting among recipe and ingredient siblings, the description never clarifies the domain boundary and leaves the limit parameter and matching behaviour unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: query is documented with an example, but limit has no description and the description adds nothing about it — not even that it caps result count up to 30. The description also gives no hint about query semantics such as language, partial matching or case sensitivity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search the Picnic catalogue") plus the exact return shape, so the agent knows this is a product lookup. It does not differentiate itself from the sibling search_recipes or find_ingredients, which an agent could plausibly confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this instead of find_ingredients or search_recipes, and no note that it searches products rather than recipes beyond the ambiguous word "catalogue". The only routing signal is the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recipesSearch recipesARead-onlyIdempotent
Search Picnic's own recipes and the user's recipes. Returns id, name, duration and labels such as 'Vegan'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Search term, e.g. 'linsen' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds a return-field summary (id, name, duration, labels) which substitutes meaningfully for the absent output schema — more than the annotations provide. It stops short of noting result ordering or whether label filters are supported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: what is searched, then what comes back. The most important information (scope) is front-loaded and no sentence is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only search with no output schema, the description supplies the return shape and the data scope, which is the essential missing piece. Remaining gaps are the undocumented 'limit' parameter and matching behavior, which are minor but non-trivial for an open-world search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: 'query' is documented in the schema but 'limit' has no description anywhere. The description gives no guidance on query syntax (substring? fuzzy? multilingual, given the German example), nor on the limit range of 1–20 or what happens on overflow, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Search ... recipes') and even scopes the search to two corpora: Picnic's own recipes and the user's recipes. It does not explicitly contrast with siblings like search_products or get_recipe, but the resource word 'recipes' plus the scope makes it clearly separable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope statement ('Picnic's own recipes and the user's recipes') implies when this tool applies, but there is no explicit when-to-use or when-not-to-use guidance, and no mention of alternatives such as search_products or get_recipe for a known id. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_loginSign in to PicnicA
Open a sign-in page for Picnic in the user's browser. The page runs on the user's own computer (127.0.0.1, one-time address, expires after 5 minutes), asks for e-mail, password and the code Picnic sends by SMS or e-mail, and stores the session token in the system credential store. The password never reaches Claude. Use it when another tool reports that no session is stored.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: one-time 127.0.0.1 address, 5-minute expiry, the exact credentials requested, SMS/e-mail code step, token written to the system credential store, and an explicit security assurance that the password never reaches Claude. This is exactly the extra context a non-destructive but non-idempotent, open-world tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action ('Open a sign-in page...'), then layers mechanism, security, and usage trigger in descending priority. Dense but every clause carries information an agent cannot get from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a zero-param tool with no output schema: the agent knows what will happen and why. A small gap is that it does not say what to do after signing in (e.g., retry the tool that reported the missing session), though that is reasonably inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description correctly implies no input is required and instead describes the interactive flow the user will go through, which is the useful substitute for a parameter list here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open a sign-in page for Picnic'), plus the execution locus (user's browser) which separates it from any hypothetical server-side auth. No sibling tool shares this purpose, and the auth scope is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use it when another tool reports that no session is stored.' That is a concrete, checkable precondition rather than an implied one, and it correctly frames this as the fallback for the session-dependent siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.2.0- First observed
add_recipe_to_cart - First observed
add_to_cart - First observed
clear_cart - First observed
create_recipe - First observed
delete_recipe - First observed
find_ingredients - First observed
get_cart - First observed
get_delivery_slots - First observed
get_order_history - First observed
get_recipe - First observed
remove_from_cart - First observed
remove_recipe_from_cart - First observed
search_products - First observed
search_recipes - First observed
start_login
TDQS
Scored across 15 tools
The tools split cleanly along resource lines (products, recipes, cart, account, delivery) with one action each. The only real overlap is search_products vs find_ingredients and add_to_cart vs add_recipe_to_cart, but the descriptions make the boundary explicit (single-item lookup vs multi-item ranked matching; single product vs all recipe ingredients).
Every tool follows the same snake_case verb_noun pattern (search_products, get_cart, add_recipe_to_cart, remove_from_cart, create_recipe, delete_recipe). The verb set is small and used predictably across every resource, so an agent can guess names it hasn't seen.
Fifteen tools sit at the top of the well-scoped range, but each maps to a distinct step in the browse -> ingredient-match -> cart -> recipe -> slot workflow. Nothing looks redundant or padded; the four cart tools each cover a separate operation.
Coverage is strong: product search, ingredient matching, full cart manipulation, recipe create/read/delete plus add/remove ingredients from cart, and read-only slots and order history. Gaps are a missing update_recipe (create and delete exist but no edit) and no way to actually book a slot or place an order, though the repeated 'does not place an order' wording suggests that is a deliberate safety boundary.
Maintenance
Related MCP Connectors
Save, import and edit recipes as interactive cards in ChatGPT and Claude, synced to your iPhone.
Recipe search, ingredient matching, nutrition filters and a private cookbook for any AI agent.
Your Recipes, Beautifully Kept. weReci MCP server lets Claude and other MCP clients work with your personal weReci cookbook, the recipes you've imported from the web, social video and scanned family books. Interactive UI in the chat. weReci supports MCP Apps, so in clients that support it, tools return live views instead of plain text: recipe cards, shopping lists and your recipe graph. Clients without MCP Apps support get the same results as text. Find and read recipes: search your collection in plain language, open any recipe in full, or get an overview of what's in your cookbook. Cook with them: scale a recipe to any serving count, with cooking adjustments as well as amounts. Get substitution suggestions with ratios and caveats. Explore connections: browse your recipe graph (shared ingredients, techniques and cuisines), trace the connection between two recipes, and look up where a dish sits on the cuisine map. Themed collections: list the themed groups weReci curates from your cookbook, or ask it to reshuffle them. Shop: build a shopping list from one or more recipes, add or update items, and read the list back. Share: email a recipe to someone. Longer jobs like conceit reshuffles run in the background, with tools to check their progress. Everything is scoped to your own cookbook, or to a shared one you've joined.
Turn any shopping list into a ready-to-checkout grocery cart across 26 European supermarkets.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Picnic online supermarket for grocery shopping, meal planning, cart management, delivery tracking, and budget-conscious shopping in Netherlands and Germany.173 npm119MIT
- FlicenseNot gradedqualityDmaintenanceEnables shopping at Tiv Taam grocery store through Claude, including recipe parsing and cart population.-
- AlicenseAqualityBmaintenanceEnables LLMs to search Picnic's grocery catalog, manage the shopping basket, and select delivery slots for Picnic's grocery service in Germany and the Netherlands.9MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to search grocery products, manage shopping carts, retrieve account, order, delivery, and premium information, and get personalized meal suggestions and discounted items across multiple European grocery delivery platforms.MIT