Skip to main content
Glama

ica-mcp

CI

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

list_shopping_lists

All your lists + how many items remain/checked

view_shopping_list

Contents of a list (by name; defaults to your primary list)

add_items

Add one or more free-text items to a list

check_off / uncheck

Mark an item bought / undo

remove_item

Remove an item entirely

clear_checked

Remove all checked items (tidy up after shopping)

create_shopping_list / delete_shopping_list

Create / delete a list

list_saved_recipes / get_recipe

Your favourite recipes; one recipe's ingredients + steps

random_recipes

Random recipes for inspiration

add_recipe_to_shopping_list

Add a recipe's ingredients to a list as free-text items

list_stores / get_offers

Your favourite stores; current offers for a store

get_bonus

Your ICA bonus / Stammis balance

get_product

Look up a product by barcode (EAN/GTIN)

add_product_to_shopping_list

Look up a barcode and add the product's name to a list

offers_on_my_list

Which items on your list are on sale at a store

add_recipes_to_shopping_list

Merge several recipes' ingredients onto one list

plan_dinners

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

ica-mcp login

Log in once (personnummer + password) and cache the session

ica-mcp register

Register the server with Claude Code (--scope user)

ica-mcp status

Show the cache location + whether the session is valid (no login)

ica-mcp serve

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 terminal

For 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 / Linux

Then 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 in

3. Register with your MCP client

Claude Code — let the CLI do it (writes at user scope, resolving the right path):

ica-mcp register

Registering 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 serve

Any 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:

  1. bootstrap client-credentials token (scope=dcr)

  2. dynamic client registration (POST /register) → per-install client

  3. PKCE authorize → HTML login form

  4. POST /authn/authenticate/IcaCustomers with personnummer + password

  5. exchange 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 0600 on 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. Set ICA_STATE_FILE to relocate the cache.

  • No keyring dependency by design. The Swedish-egress requirement pushes many users onto headless homelab/VPS boxes that lack a Secret Service / Credential Manager; a portable 0600 file 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 & searchwithfilters return 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

Development

pip install -e ".[test]"
pytest

Tests (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 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
eanYes
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameNo
recipe_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameNo
recipe_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYes
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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').

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
store_nameNo

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
eanYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_idYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameNo
store_nameNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
list_nameNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYes
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYes
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_nameNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 21 tool updatesv0.5.0
    • First observedadd_items
    • First observedadd_product_to_shopping_list
    • First observedadd_recipe_to_shopping_list
    • First observedadd_recipes_to_shopping_list
    • First observedcheck_off
    • First observedclear_checked
    • First observedcreate_shopping_list
    • First observeddelete_shopping_list
    • First observedget_bonus
    • First observedget_offers
    • First observedget_product
    • First observedget_recipe
    • First observedlist_saved_recipes
    • First observedlist_shopping_lists
    • First observedlist_stores
    • First observedoffers_on_my_list
    • First observedplan_dinners
    • First observedrandom_recipes
    • First observedremove_item
    • First observeduncheck
    • First observedview_shopping_list

TDQS

A3.7/5.0

Scored across 21 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables 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.
    4
    2
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables 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.
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage shopping lists and items (create, edit, delete, mark as purchased) via integration with a backend API.
    8
    -