handle-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., "@handle-mcpsammenlign mælk, æg og rugbrød på nemlig og BilkaToGo"
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.
handle-mcp
En MCP-server, der giver Claude adgang til nemlig.com og BilkaToGo: søg varer, se ugens tilbud og nemligs opskrifter, sammenlign en indkøbsliste i begge butikker og fyld kurven i den billigste.
Den kan aldrig bestille eller betale. Den kode findes ikke, en "vagt" blokerer kaldene, og testene fejler, hvis nogen prøver at tilføje dem. Du åbner selv butikkens hjemmeside, tjekker kurven, vælger leveringstid og betaler.
Uofficiel. Bruger butikkernes egne hjemmeside-API'er, så det kan holde op med at virke uden varsel.
Installér (Windows)
# 1. Gem login (spørger om email og kode, tjekker dem og gemmer i Windows Credential Manager)
uvx --from git+https://github.com/JuliusTorpLarsenPrivat/handle-mcp@v0.1.0 handle-mcp login nemlig
uvx --from git+https://github.com/JuliusTorpLarsenPrivat/handle-mcp@v0.1.0 handle-mcp login bilkaClaude Desktop → Settings → Developer → Edit Config:
{
"mcpServers": {
"handle": {
"command": "C:\\Users\\JuliusTorpLarsen\\.local\\bin\\uvx.exe",
"args": ["--from", "git+https://github.com/JuliusTorpLarsenPrivat/handle-mcp@v0.1.0", "handle-mcp"]
}
}
}Genstart Claude Desktop helt. BilkaToGo: vælg hjemlevering én gang på bilkatogo.dk.
Related MCP server: Israel Grocery MCP
Værktøjer
Værktøj | Ændrer noget? | Hvad |
| nej | Pris, enhedspris, tilbud, lager |
| nej | Ugens tilbud i én butik |
| nej | nemligs opskrifter og varerne til dem |
| nej | Prissætter en liste i begge butikker inkl. gebyrer |
| nej | Kurv, gebyrer, minimumskøb |
| ja, kun kurven | Sætter antal af varer i kurven |
| nej | Ledige tider og pris |
| nej | Ordrehistorik |
Sikkerhed
Login ligger kun i styresystemets nøglering på din computer (eller i miljøvariabler).
Alle kald går gennem
vagt.py, som kun tillader butikkernes egne adresser og afviser alt, der ligner bestilling, betaling eller valg af levering.Navn, adresse, telefon og e-mail fjernes fra svarene, før Claude ser dem.
Lås altid installationen til en version (
@v0.1.0), så koden ikke ændrer sig uden din viden.
Udvikling
uv sync
uv run pytestSe LÆR.md for en gennemgang af, hvordan det hele hænger sammen.
Available Tools
9 toolshent_opskriftBRead-only
Varerne til en nemlig-opskrift (link eller id) for et antal personer, med pris. Varer markeret har_hjemme (salt, olie osv.) er ikke med i prisen.
| Name | Required | Description | Default |
|---|---|---|---|
| opskrift | Yes | ||
| personer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description does add genuinely useful behavior beyond that: results carry prices and items flagged har_hjemme (salt, oil etc.) are excluded from the price — a non-obvious detail an agent could otherwise misreport. It says nothing about the return shape or what happens when 'personer' is omitted, so a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core output (items plus price) is front-loaded. The pricing caveat is well placed as a follow-up. Slightly cryptic phrasing ('Varer markeret har_hjemme') costs a little clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema and only two parameters, the description covers what the result conceptually contains and one important pricing rule. It leaves gaps around the missing 'personer' default and the structure of the returned items, which matter given there is no output schema to fall back on.
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 must carry the load; it does clarify that 'opskrift' accepts a link or an id, which the bare string type does not say. It also ties 'personer' to the scaling of quantities. However, it never states the default when 'personer' is null (the schema default), which is the one behavioral ambiguity an agent most needs resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: it returns the ingredient list ('Varerne') for a specific nemlig recipe, priced for a given number of people. That is enough to tell it apart from the sibling soeg_opskrifter, which searches rather than fetches. It stops short of explicitly naming that relationship, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the required 'opskrift' parameter takes a link or id, which hints that a search step (soeg_opskrifter) must come first, but no alternative or precondition is stated. There is no guidance on when to prefer this over other siblings like sammenlign_liste or saet_antal_i_kurv. Adequate context, no explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leveringstiderBRead-only
Ledige leveringstider med pris. Kun til orientering: brugeren vælger selv tiden.
| Name | Required | Description | Default |
|---|---|---|---|
| dage | No | ||
| butik | No | nemlig |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds that prices accompany the slots and that results are advisory only, which is useful context beyond the annotations, but says nothing about how many slots come back, for which store, or how the defaults (5 days, 'nemlig') shape the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and closed with the usage caveat; no filler. It is terse to the point of under-specification, but nothing is redundant.
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 tool with no output schema and 0% schema description coverage, the definition should explain what a returned slot looks like (time window, price, availability) and what the two parameters do. It leaves both gaps open, so an agent can call it but cannot reason about the arguments or the response.
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 must carry parameter meaning, and it does not: neither 'dage' (days ahead) nor 'butik' (store) is mentioned or explained. Only an indirect hint exists ('leveringstider' implies a time window), leaving an agent to guess what the integer and the store string control.
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 names the resource precisely: available delivery slots together with price ('Ledige leveringstider med pris'), which is distinct from the cart, order and search siblings. It lacks an explicit verb (list/hent), so the agent must infer that it is a retrieval tool, and it does not explicitly contrast itself with any sibling.
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?
'Kun til orientering: brugeren selv vælger tiden' gives a real usage constraint – present the slots but let the user make the choice. However, it does not say when to call this versus the order/cart siblings, nor whether it should be called before or after items are in the cart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saet_antal_i_kurvAIdempotent
Sæt antal af varer i kurven: {"varenummer": antal}. Antallet er det samlede antal (ikke et tillæg), og 0 fjerner varen. Ændrer KUN kurven. Spørg brugeren først.
| Name | Required | Description | Default |
|---|---|---|---|
| antal | Yes | ||
| butik | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation, idempotency and non-destructiveness; the description adds the crucial semantics that the number is a total rather than an increment (explaining the idempotentHint) and that 0 removes the line. 'Ændrer KUN kurven' is valuable scoping — it reassures the agent that no order is placed — though it does not say what happens when the item number is invalid or the cart is empty.
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?
Four short clauses, all load-bearing, with the operation and format front-loaded before the behavioral caveats. The inline JSON fragment is slightly awkward inside a sentence but conveys the expected input compactly.
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 write tool with a nested-object parameter and no output schema, the definition covers the key semantics but leaves the required 'butik' parameter and the failure/return behavior unexplained. An agent could invoke it on a simple path but would be guessing about the store argument.
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 must carry all parameter meaning. It does explain the nested map parameter well (key = varenummer, value = total quantity, 0 = removal), but the required 'butik' parameter is never mentioned anywhere, leaving one of two parameters completely undefined.
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?
Names a specific verb and resource ('Sæt antal af varer i kurven') and even shows the expected shape, {"varenummer": antal}, so the operation is unambiguous. It stops short of naming or contrasting any sibling (e.g. vis_kurv for reading the basket), so differentiation is left to the reader.
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?
'Spørg brugeren først' gives one concrete precondition for invoking the tool, which is genuinely useful for an agent acting on a shared cart. However, there is no guidance on when this tool is preferable to alternatives such as vis_kurv or soeg_varer, and no statement of 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.
sammenlign_listeARead-only
Prissæt en indkøbsliste i flere butikker, med gebyrer, og find den billigste.
varer er fx ["letmælk 1 l", "hakkede tomater", "pasta"], antal samme rækkefølge (standard 1).
Usikre match er markeret og bør tjekkes, før kurven fyldes.
| Name | Required | Description | Default |
|---|---|---|---|
| antal | No | ||
| varer | Yes | ||
| butikker | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real context on top — that prices include store fees, that the cheapest option is selected, and that uncertain matches are flagged in the result and need verification. It does not explain what happens when `butikker` is omitted (all stores?) or how results are shaped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by the parameter hints and the verification caveat. No wasted wording, though the example list makes the middle slightly dense.
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 read-only comparison tool with no output schema, the description covers the essential action and the item-list format but omits the `butikker` parameter entirely and says nothing about what the comparison returns (per-store totals, fee breakdown, cheapest flag). Adequate but with clear 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?
Schema description coverage is 0%, so the description must compensate. It does well for two of three parameters — `varer` gets a concrete example showing free-text item strings with embedded quantities ('letmælk 1 l'), and `antal` is explained as positional with default 1 — but `butikker` is never mentioned at all, leaving a third of the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: price a shopping list across several stores, include fees, and return the cheapest. That is clearly distinct from siblings like soeg_varer (item search) or vis_kurv (basket view), though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: you price a whole list, and uncertain matches 'should be checked before the basket is filled', which hints at a workflow step. There is no explicit when-to-use or when-not-to-use guidance relative to soeg_varer or vis_kurv.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
soeg_opskrifterARead-only
Søg i nemligs opskrifter. Giver navn og link. Brug hent_opskrift for varer og pris.
| Name | Required | Description | Default |
|---|---|---|---|
| antal | No | ||
| tekst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety and open-web profile is covered by structured data. The description adds genuine value by disclosing the return shape (name and link), but says nothing about result limits, ranking, or what happens when nothing matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences in Danish, front-loaded with the purpose and followed immediately by return value and the routing hint. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only two-parameter search it covers purpose, output, and the sibling hand-off, which is most of what an agent needs. The undocumented 'antal' cap and query behavior leave a real gap given there is no output schema to fall back on.
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 must carry the burden, and it does not: neither 'tekst' (search query semantics, matching behavior) nor 'antal' (result cap, default 5) is mentioned. Only the implicit idea of searching is conveyed.
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?
"Søg i nemligs opskrifter" names a concrete verb (search) and resource (recipes), and the follow-up sentence states the return payload (name and link). It also names the sibling hent_opskrift that handles the deeper case, so an agent can separate the two tools without reading either schema.
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?
"Brug hent_opskrift for varer og pris" gives an explicit alternative and the condition (ingredients and price) that selects it. What is missing is guidance on when this search tool itself is appropriate versus e.g. soeg_varer, and no exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
soeg_varerBRead-only
Søg efter varer i én butik (nemlig eller bilka). Giver pris, enhedspris, tilbud og lager.
| Name | Required | Description | Default |
|---|---|---|---|
| antal | No | ||
| butik | No | nemlig | |
| tekst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value by disclosing the return payload (pris, enhedspris, tilbud, lager) and the single-store restriction, but says nothing about result limits, empty-result behavior, or failures for unsupported store values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: the action and scope come first, the returned fields second. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, open-world lookup with no output schema, the description covers the essentials: what is searched, where, and what comes back. The remaining gap is result sizing and the meaning of 'antal', which matters given a default of 10 results.
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 must carry parameter meaning. It does clarify that butik takes one of two values (nemlig/bilka), which the schema does not express as an enum, but the required 'tekst' parameter and especially 'antal' (default 10, presumably result count) are left completely undefined.
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?
"Søg efter varer i én butik" gives a specific verb (søg) and resource (varer) plus a scope constraint limited to a single store, and the parenthetical enumerates the two supported stores. It is clearly distinguishable from siblings like ugens_tilbud and soeg_opskrifter, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word "Søg" signals a query-style tool and "i én butik" hints that cross-store comparison belongs elsewhere (sammenlign_liste). There is no explicit when-to-use/when-not guidance, no prerequisite statement, and no mention of what to do if the product is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tidligere_ordrerBRead-only
Tidligere ordrer. Med ordre_id: varerne i den ordre (godt til 'det vi plejer at købe').
| Name | Required | Description | Default |
|---|---|---|---|
| antal | No | ||
| butik | No | nemlig | |
| ordre_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotation, the description usefully discloses that the tool's behavior changes from previous orders to the contents of one order when ordre_id is supplied. It remains basic because it says nothing about account or session requirements, ordering or recency of results, empty results, or store-specific behavior.
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 text is compact and front-loads the general resource, then immediately presents the conditional mode and a practical example. Its fragmentary style is easy to scan, although it is too terse to cover several invocation-relevant details.
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?
An agent can make a basic no-argument call and understands the special ordre_id mode, making the definition minimally usable. However, with no output schema and no parameter descriptions, the omission of ID discovery, antal and butik semantics, result ordering, and expected contents for each mode leaves clear 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 only compensates for ordre_id by explaining its effect and giving a use case. It does not clarify whether antal limits orders or items, how results are selected, or which values butik accepts beyond the schema's default.
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 identifies the resource as previous orders and adds a useful second mode: supplying ordre_id returns the items in that order. The opening phrase largely restates the tool name and no sibling differentiation is provided, but the overall purpose 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?
It explicitly conditions the item-level mode on ordre_id and gives the concrete shopping intent 'det vi plejer at købe'. It does not explain the likely workflow of first listing orders to obtain an ID, nor when another sibling tool would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ugens_tilbudCRead-only
Ugens tilbud i én butik. nemlig: Skarp pris, Priskup, Dagstilbud og Undgå madspild.
| Name | Required | Description | Default |
|---|---|---|---|
| antal | No | ||
| butik | No | nemlig |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one useful constraint — offers are retrieved for one store at a time ('i én butik') — but says nothing about result ordering, page size behavior, or what the offer categories mean for the returned 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?
It is short and front-loaded with the scope constraint, so nothing is bloated. But the second sentence is under-specified jargon rather than efficient information, so brevity comes at the cost of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameter descriptions, and only read-only/open-world annotations, the description should explain what an offer record contains and what 'antal' controls. Neither is present, leaving an agent able to invoke the tool but unable to predict or interpret its results.
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 must carry the burden for both parameters. 'i én butik' loosely gestures at the 'butik' parameter and the 'nemlig:' token hints at its default, but 'antal' (result count, default 25) is never mentioned, and no valid store values or limits are given.
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 first sentence identifies the resource (weekly offers) and scopes it to a single store, which lets an agent distinguish it from product/recipe search siblings. However, there is no explicit verb (fetch/list) and the second sentence is a cryptic colon-list of Danish offer categories ('Skarp pris, Priskup, Dagstilbud og Undgå madspild') whose relation to the tool's output is left implicit.
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 versus soeg_varer or sammenlign_liste, no prerequisites, and no exclusions. An agent must infer that this returns promotional offers rather than searchable catalog items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vis_kurvCRead-only
Kurvens linjer, gebyrer, total, minimumskøb og valgt leveringstid.
| Name | Required | Description | Default |
|---|---|---|---|
| butik | No | nemlig |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description's genuine contribution is naming what comes back (lines, fees, total, minimum purchase, selected delivery time), which matters because there is no output schema. It still omits whether a session/login is required, what happens with an empty basket, or that the store is selectable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but the single comma-separated field list is not a well-formed sentence and gives no structure beyond enumeration. Nothing is wasted, yet the fragment form makes it feel like a stub rather than a definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and no output schema, the field list does cover the essentials of the return value. It remains incomplete about preconditions (empty basket, authentication) and about the store parameter, which are the two things an agent would still need to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one optional parameter ('butik', defaulting to 'nemlig'), which is close to the zero-parameter baseline. However, schema description coverage is 0% and the description never mentions store selection, so the agent gets no confirmation that the basket can be viewed for a different store.
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 is a noun-phrase fragment ('Kurvens linjer, gebyrer, total, minimumskøb og valgt leveringstid') with no verb, so it never states that the tool retrieves or displays the basket. It expands the name 'vis_kurv' into a list of returned fields rather than declaring an action, leaving the agent to infer 'read the cart' from the name plus readOnlyHint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives such as saet_antal_i_kurv or leveringstider. The agent must deduce on its own that this is the read-side counterpart to the basket-mutation sibling.
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.
9 tool updates
v0.1.0- First observed
hent_opskrift - First observed
leveringstider - First observed
saet_antal_i_kurv - First observed
sammenlign_liste - First observed
soeg_opskrifter - First observed
soeg_varer - First observed
tidligere_ordrer - First observed
ugens_tilbud - First observed
vis_kurv
TDQS
Scored across 9 tools
Each tool targets a clear distinct resource: product search, weekly offers, recipe search, recipe detail, list price comparison, cart view, cart modification, delivery times, and order history. The closest pair is soeg_varer vs ugens_tilbud and soeg_opskrifter vs hent_opskrift, but descriptions clearly delineate search vs. detail/offers. Minor overlap only, easily resolved.
All names are consistently snake_case and in the same language, with action tools using verb_noun (soeg_varer, hent_opskrift, sammenlign_liste, vis_kurv). A few query tools are bare noun phrases (leveringstider, tidligere_ordrer, ugens_tilbud), a minor deviation from the verb-first convention but still readable and predictable.
Nine tools is well within the ideal 3-15 range and each maps to a genuine grocery-shopping workflow stage (search, offers, recipes, comparison, cart, delivery, history). No tool appears redundant or trivial.
Coverage spans discovery, pricing, cart management, and history, but there is no checkout/place-order or explicit add-item tool, so an agent can build a cart but cannot finalize an order through the surface. The set supports browsing and planning well but has a notable lifecycle gap at the ordering end.
Maintenance
Related MCP Connectors
Danish grocery catalog as MCP tools: live offers across all major chains, stores, EAN lookup, stock.
Live prices, deals & optimal multi-stop shopping routes for German grocery & drug stores.
Compare 18M+ prices across Denmark, Sweden, Norway and Germany: product search, wishlists. No login.
Grocery lists, recipes, menu plan, household, supermarket offers and receipt photos to track costs
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables users to compare prices, track budgets, and find promotional deals across major Dutch supermarkets and drugstores. It supports automated shopping list optimization, meal planning, and price history alerts for stores like Albert Heijn, Jumbo, and Kruidvat.20MIT
- FlicenseBqualityDmaintenanceEnables cross-store price comparison and recipe-driven cart automation for Israeli grocery stores Shufersal and Tiv Taam, with an extensible architecture for additional stores.14-
- AlicenseAqualityBmaintenanceEnables searching products, viewing product details, managing the basket, and accessing order history on nemlig.com through natural language. It does not support placing orders or accessing payment cards.628MIT
- AlicenseNot gradedqualityBmaintenanceEnables grocery shopping at Nemlig.com via MCP, including product searches, basket management, and session-based authentication.MIT