ica-mcp
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., "@ica-mcpAdd eggs and butter to my shopping list."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ica-mcp
An MCP server for ICA — Sweden's largest grocery chain — that lets AI agents (Claude, or any Model Context Protocol client) read and edit your ICA shopping lists in natural language:
"What's on my shopping list?" · "Add coffee and bananas to the Willys list" · "Check off milk" · "Clear the checked items"
ICA has no official public API. This server talks to the same private backend the ICA mobile app uses, authenticating with your personnummer + password (no BankID required for accounts that support password login).
⚠️ Unofficial & unaffiliated. This project is not affiliated with, endorsed by, or supported by ICA. It relies on a private, undocumented API that can change or break at any time, and using it may be against ICA's terms of service. Use at your own risk, for personal use only.
Tools
Tool | What it does |
| All your lists + how many items remain/checked |
| Contents of a list (by name; defaults to your primary list) |
| Add one or more free-text items to a list |
| Mark an item bought / undo |
| Remove an item entirely |
| Remove all checked items (tidy up after shopping) |
| Create / delete a list |
| Your favourite recipes; one recipe's ingredients + steps |
| Random recipes for inspiration |
| Add a recipe's ingredients to a list as free-text items |
| Your favourite stores; current offers for a store |
| Your ICA bonus / Stammis balance |
| Look up a product by barcode (EAN/GTIN) |
| Look up a barcode and add the product's name to a list |
| Which items on your list are on sale at a store |
| Merge several recipes' ingredients onto one list |
| Random weekly menu → one aggregated shopping list |
Lists, items and stores are referenced by name, so an agent can act on
natural language. Omitting a list/store name targets your primary one (the
Handla list / your first favourite store).
Related MCP server: Bring! Shopping MCP Server
Requirements
Python 3.10+
A Swedish egress IP. ICA's API gateway (
apimgw-pub.ica.se) returns HTTP 451 to non-Swedish IPs. Run this on a machine/network in Sweden — a US/DE VPS will not work.An ICA account that logs in with personnummer + password (accounts locked to BankID-only are not supported).
Setup
Everything is one ica-mcp command with four subcommands:
Command | What it does |
| Log in once (personnummer + password) and cache the session |
| Register the server with Claude Code ( |
| Show the cache location + whether the session is valid (no login) |
| Run the MCP server over stdio — what your client launches |
1. Install
The quickest path uses uv — one command, identical on Windows, macOS and Linux:
# (only if you don't have uv yet)
# Windows: winget install --id=astral-sh.uv -e
# macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install ica-mcp
uv tool update-shell # puts `ica-mcp` on PATH — then open a NEW terminalFor the latest unreleased code use the repo instead of PyPI:
uv tool install git+https://github.com/kanylbullen/ica-mcp
git clone https://github.com/kanylbullen/ica-mcp.git
cd ica-mcp
python3 -m venv .venv
.venv\Scripts\pip install . # Windows
.venv/bin/pip install . # macOS / LinuxThen use the venv's ica-mcp in place of the bare command below:
.venv\Scripts\ica-mcp.exe (Windows) or .venv/bin/ica-mcp (macOS/Linux).
2. Log in (once)
ica-mcp login # prompts for personnummer + password (hidden)On success it prints your name and lists and caches the session (OAuth client +
tokens) in a per-user state dir — %LOCALAPPDATA%\ica-mcp (Windows),
~/.local/state/ica-mcp (Linux), ~/Library/Application Support/ica-mcp (macOS).
The short-lived access token (~15 min) is auto-refreshed via the long-lived
refresh token, so you normally log in only once. Verify anytime:
ica-mcp status # cache path + session validity, without logging in3. Register with your MCP client
Claude Code — let the CLI do it (writes at user scope, resolving the right path):
ica-mcp registerRegistering at --scope user sidesteps a Windows drive-letter project-key quirk.
If the claude CLI isn't found, register prints a ready-to-paste mcp.json.
The equivalent manual command is:
claude mcp add ica --scope user -- ica-mcp serveAny other MCP client (mcp.json):
{
"mcpServers": {
"ica": {
"command": "ica-mcp",
"args": ["serve"]
}
}
}If ica-mcp isn't on PATH, use the absolute path uv printed at install, or
python -m ica_mcp serve.
Restart your MCP client and the tools appear. The server reads the cached session,
so it needs no credentials in its environment. If the refresh token ever expires,
re-run ica-mcp login — or set ICA_USER / ICA_PASS (see .env.example) so
serve can re-authenticate unattended. Relocate the cache with ICA_STATE_FILE.
How authentication works
ICA migrated (around 2024) from a simple Basic-auth API to an OAuth 2.0 / OIDC
flow backed by a Curity Identity Server at
ims.icagruppen.se, with the data API behind an F5 gateway at
apimgw-pub.ica.se. The flow is:
bootstrap client-credentials token (
scope=dcr)dynamic client registration (
POST /register) → per-install clientPKCE authorize → HTML login form
POST /authn/authenticate/IcaCustomerswith personnummer + passwordexchange the resulting code for a Bearer access/refresh token
The auth flow is a standalone port of the excellent LazyTarget/ha-ica-todo Home Assistant integration — full credit for reverse-engineering the current flow. The hardcoded DCR bootstrap client id/secret are ICA app constants (also public in that project), not user secrets.
Security & privacy
Tokens are cached in a per-user state dir (see Log in), outside the repo,
chmod 0600on POSIX. On Windows that only toggles the read-only bit, so the file is not OS-ACL-protected there — treat the machine account as the trust boundary. SetICA_STATE_FILEto relocate the cache.No
keyringdependency by design. The Swedish-egress requirement pushes many users onto headless homelab/VPS boxes that lack a Secret Service / Credential Manager; a portable0600file is the deliberate choice.Nothing is logged to stdout (stdout is reserved for the MCP protocol — logs go to stderr).
This server can modify your real ICA account (add/remove items, delete lists). Write operations were validated against throwaway lists during development.
Roadmap
Done: shopping lists (phase 1); recipes + offers + bonus (phase 2);
product / barcode lookup (phase 3); smart flows (phase 4 —
offers_on_my_list, add_recipes_to_shopping_list, plan_dinners).
Planned next, on the same auth:
Recipe search by phrase — deferred:
recipes/search&searchwithfiltersreturn HTTP 500 for every GET param shape tried (and 405 on POST), so the real request shape needs capturing from live app traffic.Personal offers across stores
Unit tests + CI, and a PyPI release
Credits
Auth flow ported from LazyTarget/ha-ica-todo
Historical API reference: svendahlstrand/ica-api (documents the now-defunct
handla.api.ica.sebackend)
Development
pip install -e ".[test]"
pytestTests (tests/) cover the pure helpers only — ingredient aggregation,
offer/recipe formatting, list/row matching, PKCE and redirect/form parsing. The
live ICA API can't run in CI (it needs a Swedish IP and a login), so it's
exercised manually. CI runs the suite on Python 3.10–3.13.
License
MIT — see LICENSE.
Available Tools
21 toolsadd_itemsA
Lägg till en eller flera varor (fri text, t.ex. 'mjölk', '2 kg potatis') på en inköpslista. Utelämna list_name för den primära listan.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It does not mention whether items are appended or overwritten, if duplicates are allowed, if the list must exist, or any constraints like maximum items. This is a significant gap for a mutation tool.
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 two sentences, front-loaded with the main action and key usage tip. No filler words; every sentence is necessary and direct.
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?
Given the tool's simplicity and the presence of an output schema (handling return values), the description covers basic usage. However, it lacks details on behavioral aspects (e.g., error handling, list existence) and edge cases, making it only minimally complete for an agent.
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?
With 0% schema description coverage, the description compensates by explaining 'items' as free text with examples and noting that 'list_name' defaults to the primary list when omitted. This adds practical value, though it could specify format or limits.
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 clearly states the tool adds one or more free-text items to a shopping list, specifying examples like 'milk' and '2 kg potatoes'. It differentiates from siblings such as 'add_product_to_shopping_list' and 'add_recipes_to_shopping_list', which handle structured or specific types.
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 description provides guidance to omit 'list_name' for the primary list, indicating default behavior. While it does not explicitly exclude alternatives, the sibling tool names imply distinct use cases (e.g., adding products vs. free text), making the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_product_to_shopping_listA
Slå upp en streckkod (EAN/GTIN) och lägg produktens namn på en lista. Utelämna list_name för primärlistan.
| Name | Required | Description | Default |
|---|---|---|---|
| ean | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states the basic action and does not disclose side effects, permissions, error handling, or behavior for missing lists or duplicates.
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 two short sentences, front-loading the action with no extraneous 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?
The description is minimally complete for a simple tool, but it does not cover edge cases like creating a new list or error scenarios. An output schema exists but is not described.
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 0%, so the description adds value by explaining that 'ean' is a barcode and 'list_name' can be omitted for the primary list. This compensates for the lack of schema descriptions.
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 clearly states the action: look up a barcode (EAN/GTIN) and add the product name to a list. It distinguishes from siblings like add_items and add_recipes_to_shopping_list by specifying the use of a barcode and product lookup.
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 description gives explicit guidance for the list_name parameter (omit for primary list) but does not provide when to use this tool versus alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_recipes_to_shopping_listA
Lägg ingredienserna från FLERA recept på en lista, ihopslagna (samma vara + enhet summeras). Utelämna list_name för primärlistan.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No | ||
| recipe_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses ingredient merging and summing behavior, but lacks details on side effects (e.g., append vs. overwrite), permissions, or error handling. Partial transparency.
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 with no fluff. The first sentence is dense but covers core functionality. Slightly long but efficient.
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?
Output schema exists, so return values are covered. Description lacks details on error handling, whether appending or replacing, and default list creation. Adequate but could add more operational context.
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 0%, so description must compensate. It explains list_name's purpose (omit for primary list) but does not clarify recipe_ids beyond being IDs. Adds some meaning but incomplete.
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 clearly states the tool adds ingredients from multiple recipes to a shopping list, with merging of same items. This distinguishes it from siblings like add_recipe_to_shopping_list (singular) and add_items (generic).
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 description advises to omit list_name for the primary list, giving clear context on when to use the parameter. However, it does not explicitly state when not to use this tool compared to alternatives, though the name and sibling list imply it's for multiple recipes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_recipe_to_shopping_listA
Lägg alla ingredienser från ett recept som varor på en inköpslista (fri text, t.ex. '8 dl mjölk'). Utelämna list_name för primärlistan.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No | ||
| recipe_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It accurately conveys the additive behavior without hinting at destructive actions. It could be more explicit about error conditions (e.g., non-existent recipe or list), but the core behavior is clear.
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 extremely concise: two sentences, front-loaded with the main action, followed by a succinct usage tip. No wasted words.
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?
The description covers the primary purpose and key parameter guidance. With an output schema present, return values are documented elsewhere. Missing details like error handling or behavior when list_name is omitted (besides primary list) are minor gaps.
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?
With 0% schema description coverage, the description should explain both parameters. It only mentions list_name (omit for primary) but does not explain recipe_id or the meaning of list_name (name of the shopping list). The example '8 dl mjölk' refers to ingredient format, not parameter syntax.
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 clearly states 'Add all ingredients from a recipe as items to a shopping list' with a concrete example. It distinguishes this tool from siblings like add_product_to_shopping_list (single product) and add_items (arbitrary items).
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 description advises to omit list_name for the primary list, providing clear context for when to exclude the parameter. However, it does not explicitly compare to sibling tools or state when this tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_offC
Bocka av en vara (markera som köpt/klar) på en lista.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits like whether the item must exist, authorization requirements, or side effects (e.g., if the item is removed or just marked). The description is too brief for full burden.
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 a single sentence, efficient but lacking necessary detail. It is front-loaded but could be more informative without becoming verbose.
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?
Given the absence of annotations and low schema coverage, the description is insufficient. An output schema exists but is not described, and the tool's role among 21 siblings is not clarified.
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 0%, and the description does not explain what 'item' or 'list_name' represent (e.g., item ID vs name, default list behavior). No additional meaning beyond the schema's property names.
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 clearly states the tool marks an item as purchased/done on a list, which is a specific verb-resource action. It implies distinction from siblings like 'uncheck' or 'remove_item' but does not explicitly differentiate.
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 guidance is given on when to use this tool versus alternatives such as 'remove_item' or 'uncheck'. The description lacks context on prerequisites or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_checkedB
Ta bort alla avbockade varor från en lista (rensa upp efter handling).
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the destructive nature (removing items), but lacks details about reversibility, permissions, or impact on other data. Adequate but not thorough.
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 very concise (one short sentence) and front-loaded with the action. However, it omits parameter details, which would improve completeness without adding much length.
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?
Given the single optional parameter and many sibling tools, the description lacks crucial context: what happens when list_name is null, which list is affected, and any output schema details. It is insufficient for confident tool invocation.
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 0%, yet the description does not explain the 'list_name' parameter or how to use it. It only mentions 'en lista' generically, adding no semantic value to the parameter.
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 clearly states the action: removing all checked-off items from a list. It uses a specific verb ('Ta bort' = remove) and resource ('avbockade varor' = checked-off items), distinguishing it from siblings like 'check_off' and 'remove_item'.
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 description implies usage as a cleanup step after checking items off ('rensa upp efter handling'), but it does not explicitly state when to use this tool versus alternatives like 'remove_item' or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_shopping_listC
Skapa en ny inköpslista med angiven titel.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description only indicates creation but omits behavioral details like whether duplicate titles are allowed, required permissions, or any side effects. This is insufficient for safe invocation.
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 sentence that efficiently conveys the core action, though it could be slightly improved by including parameter details without losing brevity.
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 creation tool with one parameter and an output schema, the description is minimally adequate but lacks context about response format, error conditions, or integration with sibling tools.
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 0%, and the description adds no semantic meaning to the 'title' parameter beyond repeating its existence, leaving format, constraints, and examples unspecified.
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 clearly states the action 'create' and the resource 'shopping list' with a specific attribute 'given title', distinguishing it from sibling tools like add_items or delete_shopping_list.
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 guidance on when to use this tool versus alternatives, such as add_items for modifying an existing list, or any prerequisites like needing a parent list identifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_shopping_listB
Radera en hel inköpslista (kräver att du anger listnamnet explicit).
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose side effects (e.g., irreversibility), permissions needed, or confirmation behavior. It simply states the action.
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 a single sentence, concise and front-loaded, but lacks structural elements like bullet points or separation of concerns.
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?
Given the existence of an output schema (not shown), the description is somewhat complete for a simple deletion tool, but it could mention the return type or confirm deletion.
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 schema has 0% description coverage, but the description adds value by explicitly stating the list_name must be provided exactly. This compensates for the lack of schema descriptions.
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 clearly states it deletes an entire shopping list, differentiating it from sibling tools like remove_item. It is specific about the action and resource.
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 guidance on when to use this tool versus alternatives like remove_item or list_shopping_lists. The description only mentions a parameter requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bonusA
Visa din ICA-bonus/Stammis: kupongvärde, aktiva kuponger och rabatt hittills.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly indicates a read-only operation ('visa') with no destructive hint. Discloses what data is shown (coupon value, active coupons, discount). No annotations provided, so description carries full burden well.
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?
Single sentence, no filler. Front-loaded with verb and resource. Every word contributes meaning.
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 no-parameter, no-output-schema tool, the description fully explains what the tool returns (coupon value, active coupons, discount so far). Sufficient for an agent to understand behavior.
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?
No parameters in schema; description adds no parameter info because none exist. Baseline for 0 parameters is 4.
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?
Explicitly states the verb 'visa' (show) and resource 'ICA-bonus/Stammis' with specific aspects (kupongvärde, aktiva kuponger, rabatt). Clearly distinguishes from sibling tools like add_items or get_offers.
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?
Implies use for viewing bonus information, but no explicit guidance on when to use versus alternatives like get_offers or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_offersA
Hämta aktuella erbjudanden för en butik. store_name matchas mot dina favoritbutiker (utelämna för din primära butik). query filtrerar på varunamn/märke/kategori (t.ex. 'kaffe').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| store_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It only states that the tool retrieves offers, without mentioning whether it is a read-only operation, any authentication requirements, rate limits, or effects on the system.
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 two sentences, front-loads the purpose, and contains no unnecessary words. Every sentence adds value.
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 get tool with three optional parameters and no output schema, the description covers the main function and parameter usage. It lacks an explanation of the limit parameter and the return structure, but overall it is fairly complete.
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?
With 0% schema description coverage, the description adds meaning to two of three parameters: store_name (matches favorite stores, omit for primary) and query (filters on name/brand/category with example). It does not explain the limit parameter.
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 clearly states the tool's purpose: 'Get current offers for a store.' It specifies the resource (offers), action (get), and context (for a store). However, it does not explicitly differentiate from sibling tools like 'offers_on_my_list' or 'get_bonus'.
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 description explains how to use the store_name and query parameters, including an example for query. It implies usage context but does not provide explicit guidance on when to use this tool vs alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productA
Slå upp en produkt via streckkod (EAN/GTIN). Returnerar namn + artikelgrupp, eller found=False om koden inte finns.
| Name | Required | Description | Default |
|---|---|---|---|
| ean | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially discloses behavior: it's a read-only lookup returning specific fields. However, it does not mention authentication prerequisites, rate limits, or side effects. For a simple tool this is adequate but not comprehensive.
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 that efficiently conveys purpose, input, and output. No unnecessary words. Front-loaded with the action.
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 lookup with one parameter and no output schema, the description covers the key aspects: input format, return fields, and error/not-found case. Some details like exact structure of name+article group are omitted, but overall it's sufficient.
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 parameter 'ean' has no schema description (0% coverage). The description adds meaning by stating it's a barcode (EAN/GTIN), clarifying the parameter's purpose beyond the schema's bare title.
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?
Description clearly states the tool looks up a product by barcode (EAN/GTIN) and specifies return values including a not-found case. This distinctly differentiates it from siblings like add_items or get_recipe.
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 explicit guidance on when to use this tool vs alternatives. While the barcode parameter implies use cases, there is no mention of when not to use or comparison to other lookup tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recipeB
Hämta ett recept: titel, tid, portioner, ingredienser (fri text) och tillagningssteg.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explains what the tool returns but does not disclose error handling, permissions, or other behavioral traits. It is adequate for a simple read operation.
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 sentence front-loads the purpose and lists output fields efficiently. No wasted words.
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?
Given one required parameter and no output schema, the description fully explains the return values (title, time, portions, ingredients, steps). It is complete for a simple retrieval tool.
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 0% and the description does not mention the recipe_id parameter at all. The agent must rely solely on the schema for parameter meaning, which lacks description.
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 clearly states 'get recipe' and lists the returned fields (title, time, portions, ingredients, steps). It distinguishes from sibling tools that manage shopping lists.
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 guidance on when to use this tool versus alternatives, such as searching or listing recipes. The description only states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_recipesA
Lista dina favoritmarkerade recept (senast tillagda först). Hämtar detaljer per recept, så håll limit lågt (standard 12).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it fetches details per recipe and sorts by most recent, which is behavioral context not captured by schema. Without annotations, this adds useful transparency, though the exact nature of 'details' could be clearer.
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, no wasted words. Purpose is front-loaded, and the performance hint is efficiently added.
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?
Given one optional parameter and no output schema, the description is fairly complete: it explains what the tool returns (favorites, order, details) and provides a performance warning. Could mention that no other parameters exist, but that's implicit.
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 only parameter 'limit' has 0% schema description coverage, but the description adds meaning by advising to keep limit low and stating the default (12), which compensates for the schema 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?
Description clearly states it lists saved/favorite recipes, sorted by most recent first. The verb 'list' and resource 'saved recipes' are specific, and it distinguishes from siblings like get_recipe (single) and random_recipes.
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?
Provides guidance to keep limit low due to per-recipe detail fetching, which helps with performance. However, it does not explicitly mention when to use this tool versus alternatives like searching for recipes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_shopping_listsA
Lista alla dina ICA-inköpslistor med antal varor kvar och avbockade. Den första listan är din primära ('Handla') och används som standard när inget listnamn anges i andra verktyg.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns lists with counts and the primary list default, indicating a read-only, safe operation. However, it does not mention pagination, auth, or rate limits.
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 with no wasted words. The first sentence states the primary function, the second adds important contextual detail. Highly efficient.
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?
Given zero parameters and an output schema (not shown but present), the description adequately covers what the tool does and returns. Minor omission: does not mention if results are paginated, but that is likely not an issue for shopping lists.
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 are zero parameters, and schema coverage is 100% (trivially). The description adds value by explaining the primary list context, which aids agent understanding beyond the schema.
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 clearly states the tool lists all shopping lists with item counts, distinguishing it from siblings like view_shopping_list. It also notes that the first list is the primary/default, adding specificity.
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 description explains the primary list behavior, implying usage context, but does not explicitly state when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_storesA
Lista dina favoritbutiker (id, namn, ort). Den första är standardbutik för erbjudanden.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses that the first store is the default for offers, which is a behavioral trait. No side effects or auth requirements are mentioned, but for a read-only list tool, this is sufficient.
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 consists of two concise sentences. The first states the primary action and output, the second adds key context. No superfluous words.
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?
Given the tool has zero parameters and an output schema, the description is complete. It covers the purpose, output structure, and an important behavioral note about ordering. No gaps.
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 input schema has no parameters (100% coverage trivially). The description adds meaning by specifying the output fields (id, name, city) and ordering significance, which compensates for the lack of schema richness.
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 clearly states the tool lists favorite stores with id, name, and city. It is distinct from sibling tools which focus on shopping lists, products, and recipes, so no ambiguity.
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 description does not explicitly state when to use this tool versus alternatives, but given no similar sibling tools, the usage is implied. No guidance on prerequisites or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
offers_on_my_listA
Korsa din inköpslista mot en butiks aktuella erbjudanden — visar vilka ännu ej avbockade varor på listan som är på extrapris. Utelämna list_name/store_name för primärlistan / din primära butik.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No | ||
| store_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It accurately describes the filtering behavior (only unchecked items) and the cross-referencing action. It doesn't mention read-only nature, but the behavior is fully disclosed.
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 two sentences, front-loaded with the main action, and every sentence provides essential information. No fluff.
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 query tool with 2 optional parameters and no output schema, the description covers purpose, parameter usage, and output (items on sale, unchecked). It is complete enough to use 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 0%, so the description must compensate. It does so by explaining that omitting list_name/store_name uses the primary list/store, adding meaning beyond the schema's type and default values.
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 clearly states that the tool cross-references a shopping list with store offers to show unchecked items on sale. It uses specific verbs (cross-reference, shows) and distinguishes from sibling tools like get_offers and view_shopping_list.
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 description provides explicit guidance on when to omit parameters for default values. While it lacks explicit when-not-to-use or alternatives, the context is clear and includes practical usage hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_dinnersA
Planera veckans middagar: hämtar count slumprecept (1–10), slår ihop
deras ingredienser och lägger på en lista (skapar 'Veckans middagar' om
list_name utelämnas). Returnerar menyn.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| list_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: fetching random recipes (count 1-10), merging ingredients, creating or using a list (default 'Veckans middagar'), and returning a menu. It does not clarify side effects like overwriting existing lists but provides sufficient transparency for typical use.
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 a single sentence that efficiently conveys all necessary information without redundancy.
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?
Given the tool's simplicity (2 params, no output schema, no nested objects), the description covers inputs, process, and output. It explains the return value ('Returnerar menyn'), which is sufficient despite no output 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?
Schema coverage is 0%, so the description must add meaning. It explains that `count` determines the number of random recipes (1-10) and that `list_name` controls the list name (default creates 'Veckans middagar'). This adds value beyond the schema's type and defaults.
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 clearly states the tool's action: planning weekly dinners by fetching random recipes, merging ingredients, and adding to a list. It distinguishes from siblings like `random_recipes` (which only fetches recipes) by including list creation and ingredient merging.
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 description implies usage for planning dinners but does not explicitly state when not to use or mention alternatives. While the context and sibling list suggest `random_recipes` as an alternative, the lack of explicit guidance limits the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_recipesA
Hämta slumpmässiga recept för inspiration (count 1–10).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description only conveys the basic action of fetching random recipes without disclosing behavioral traits such as data source, idempotency, rate limits, or whether it is read-only. Minimal context beyond the core functionality.
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 a single, efficient sentence that front-loads the action and purpose, containing no unnecessary words or repetition.
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?
Given the tool's low complexity (one parameter) and the presence of an output schema, the description is largely sufficient. It could optionally mention that the result is a list of recipes, but it remains adequate for typical use.
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?
Although the input schema only defines 'count' with a default, the description adds a clear valid range ('1–10'), providing meaningful constraint beyond the schema. Schema description coverage is 0%, so this addition is valuable.
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 clearly states the action ('Hämta slumpmässiga recept' - get random recipes) and purpose ('för inspiration' - for inspiration), uniquely identifying the tool as providing random recipe suggestions in contrast to specific or saved recipe tools.
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 description implies use for inspiration when random recipes are desired, but does not explicitly state when to use or avoid this tool, nor does it mention alternative tools like get_recipe or list_saved_recipes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_itemB
Ta bort en vara helt från en lista (inte samma som att bocka av).
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It mentions 'completely' removal but lacks details about irreversibility, required permissions, side effects on other items or lists, or error conditions. This leaves significant gaps for a deletion tool.
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 a single, focused sentence that communicates the core purpose. It is concise without being overly terse. However, it could include more useful information in the same space.
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?
Given the tool modifies data and has an output schema, the description should cover parameter semantics and behavioral context. It does not address parameter details or provide sufficient guidance on usage, making it incomplete for a deletion tool.
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 0%, yet the description adds no information about parameters. It does not clarify what 'item' refers to (ID, name, etc.) or how 'list_name' is used or defaulted. The description adds no value beyond the schema.
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 clearly states the action ('remove an item completely from a list') and explicitly distinguishes from checking off, which is a sibling tool. The verb and resource are specific, and the distinction from similar tools is clear.
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 description says 'not the same as checking off', providing an explicit exclusion criterion. However, it does not mention other usage contexts or alternatives beyond that one distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uncheckC
Ångra avbockning av en vara (markera som ej köpt igen).
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| list_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic action. It does not disclose behaviors such as idempotency, error conditions (e.g., if item is already unchecked), or effects on other data.
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 a single short sentence, which is concise to a fault. It sacrifices necessary detail for brevity, though it is front-loaded with the core purpose.
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?
Given the simplicity of the tool (2 params, output schema exists but not described), the description is insufficient. It lacks information about return values, prerequisites, and caveats, leaving the agent underinformed.
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 0%, and the description adds no meaning for parameters. The 'item' and 'list_name' parameters are left unexplained, leaving the agent without guidance on how to fill them.
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 uses a specific verb ('Ångra avbockning' - undo checking) and resource ('vara' - item), clearly indicating it reverts a check-off action. It distinguishes from the sibling tool 'check_off' which performs the opposite operation.
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 guidance is provided on when to use this tool versus alternatives like 'remove_item' or 'clear_checked'. The description only states what it does, not the context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_shopping_listA
Visa innehållet i en inköpslista. list_name matchas mot listans titel (utelämna för den primära listan). Returnerar varor uppdelat i kvar/avbockade.
| Name | Required | Description | Default |
|---|---|---|---|
| list_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses items are returned divided into 'kvar/avbockade' (remaining/checked off). Implies read-only behavior, no contradictions.
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 concise sentences, front-loaded with purpose and immediate parameter guidance. 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?
Given low complexity (1 optional param, no output schema), description fully covers tool behavior: purpose, parameter usage, and return format (items split into statuses).
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 has 0% description coverage; description fully explains list_name: matched against list title, omit for primary. Adds meaningful semantics beyond type/null.
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?
Description clearly states it shows contents of a shopping list and differentiates by specifying list_name matching against title, omitting for primary list. Distinguishes from sibling list_shopping_lists (which lists all lists).
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?
Description guides using list_name argument for non-primary lists and omitting for primary. While it does not explicitly state when to avoid, the context of siblings like check_off, remove_item makes it clear for viewing only.
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.
21 tool updates
v0.5.0- First observed
add_items - First observed
add_product_to_shopping_list - First observed
add_recipe_to_shopping_list - First observed
add_recipes_to_shopping_list - First observed
check_off - First observed
clear_checked - First observed
create_shopping_list - First observed
delete_shopping_list - First observed
get_bonus - First observed
get_offers - First observed
get_product - First observed
get_recipe - First observed
list_saved_recipes - First observed
list_shopping_lists - First observed
list_stores - First observed
offers_on_my_list - First observed
plan_dinners - First observed
random_recipes - First observed
remove_item - First observed
uncheck - First observed
view_shopping_list
TDQS
Scored across 21 tools
Each tool targets a distinct action: adding items via different methods (free text, barcode, single recipe, multiple recipes), managing list state (check, uncheck, clear, remove), and retrieving domain-specific info (bonus, offers, products, recipes). No two tools have overlapping purposes.
All tool names follow a consistent verb_noun or verb_preposition_noun pattern with underscores (e.g., add_items, create_shopping_list, check_off). The convention is uniform and predictable, aiding agent selection.
With 21 tools, the server covers the full scope of shopping list management, recipe integration, and store offers without being excessive. Each tool has a clear role, and the count feels well-scoped for the domain.
The tool surface includes CRUD for shopping lists, recipe lookup and import, barcode product lookup, and offers cross-referencing. A minor gap is the lack of an explicit 'save recipe' tool, though listing saved recipes implies it exists elsewhere.
Maintenance
Related MCP Connectors
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Persistent shopping memory for AI assistants. The AI reasons; Kaufliste stores and executes.
Turn any shopping list into a ready-to-checkout grocery cart across 26 European supermarkets.
Scraps Kitchen gives any AI agent a persistent, household-aware kitchen memory. Unlike generic chatbot recall, Scraps maintains structured cooking data: what's in your fridge (with freshness tracking), who you cook for (with allergens, dietary restrictions, and preferences), your recipe collection (with cook notes and per-diner ratings), your shopping list, and your kitchen equipment. 27 tools across 6 domains let agents read kitchen context, suggest meals that respect dietary safety, update the pantry after cooking, and build a history of what works for your household. Every interaction makes the data richer. Cooking history, preference signals, kitchen awareness = better suggestions next time. All tools work via oAuth and a free scraps.kitchen account.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI assistants to interact with Mathem.se, a Swedish online grocery store, allowing users to search for ingredients, add items to their shopping basket, and manage recipes through natural language.42-
- AlicenseNot gradedqualityAmaintenanceEnables interaction with Bring! shopping lists through natural language, allowing users to manage shopping items, lists, and collaborate with other users via the unofficial Bring! API.121 npm27MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables agentic grocery shopping on Oda (Norway) and Mathem (Sweden) platforms through an MCP-compatible interface. Users can search for products, manage their shopping cart, and access order history using natural language commands.1MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to manage shopping lists and items (create, edit, delete, mark as purchased) via integration with a backend API.8-