willys-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WILLYS_HOME | No | Directory where .env and session database are stored. Defaults to the project directory if not set. | ./ |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| willys_loginA | Logga in på Willys och få ett sessionId tillbaka. Säkert att anropa: servern läser uppgifterna ur .env, de når aldrig din kontext (se read_doc med help/security.md). Återanvänder en giltig session (24h); force=true tvingar ny inloggning. |
| willys_check_authB | Kontrollera om en session fortfarande är giltig. |
| willys_logoutC | Avsluta sessionen. |
| willys_read_docA | Läs ett dokument som följer med servern (t.ex. "help/setup.md"). Deterministiskt begränsad till serverns docs/-mapp — kan inte läsa .env, sessioner eller något annat på datorn, så den är säker att anropa fritt. De korta instruktionerna pekar hit för detaljer så de inte belastar varje session. Tillgängliga: help/setup.md, help/security.md, help/search.md, help/planning.md, help/errors.md. |
| willys_fetch_urlA | Hämta en webbsida från ANVÄNDARENS dator och få tillbaka strukturerad data (JSON-LD, t.ex. schema.org Recipe) plus ren text. Kör detta FÖRST när du behöver läsa en URL — det går via användarens hem-IP och tar sig förbi block som din egen hämtning fastnar på, och det är billigare. Faller din egen webbläsning tillbaka bara om detta misslyckas. Renderar JS-sidor automatiskt vid behov. |
| willys_open_fileA | Öppna en lokal fil i användarens standardeditor. Använd för att öppna .env åt dem vid uppsättning — sökvägen står i svaret från willys_setup. En chattklient gör inte filsökvägar klickbara. Läser inte innehållet. |
| willys_setupA | Kontrollera om servern är konfigurerad på den här datorn och få exakta steg om något saknas, med full sökväg till filen. Kräver ingen session. Kör detta först om willys_login svarar SETUP_REQUIRED. Se read_doc med help/setup.md. |
| willys_setup_initA | Skapa .env åt användaren och skriv in butiks-id, med rättigheter 600. Returnerar sökvägen till filen. Öppna den sedan med willys_open_file så användaren kan fylla i sina uppgifter. |
| willys_searchC | Sök produkter. onlySwedish filtrerar på verifierad svensk märkning (labels), inte på varumärke. |
| willys_search_suggestionsB | Sökförslag (autocomplete) för en term. |
| willys_get_product_detailC | Detaljerad produktinformation för en artikelkod. |
| willys_find_cheapestA | Sök och rangordna på jämförpris (kr/kg, kr/l, kr/st), sorterat av Willys över hela träffmängden. Returnerar tillgängliga kategorier så du kan smalna av — utan kategori rankas köttfärssås som köttfärs. |
| willys_get_cartC | Hämta kundvagnens innehåll. |
| willys_add_to_cartC | Lägg en produkt i kundvagnen. |
| willys_remove_from_cartB | Ta bort en produkt ur kundvagnen. |
| willys_get_ordersC | Hämta orderhistorik, sidad. |
| willys_get_order_detailsC | Alla varurader i en tidigare order. |
| willys_get_frequent_productsB | Vanligast köpta varor, härledda ur din faktiska orderhistorik (inte CMS-sidan, som saknar produktdata). |
| willys_get_customer_infoC | Hämta kundprofil. |
| willys_find_storesB | Slå upp butiker på ort, namn eller postnummer. Läser ur lokal cache (hela kedjan, 254 butiker). |
| willys_nearest_storesB | Närmaste butiker till en koordinat, sorterade på avstånd. |
| willys_get_storeB | Detaljer för en butik: öppettider, plockavgift, fri frakt-gräns och länk till butikens erbjudandeblad. |
| willys_refresh_storesC | Hämta om butiksregistret från Willys. |
| willys_get_campaignsB | Butiksspecifika kampanjer och erbjudanden. Ersätter den döda get_offers. |
| willys_plan_add_recipeA | Lägg ett recepts ingredienser i behovsregistret. Mängder slås ihop per vara över alla recept i planen, så tre recept som vill ha ägg blir ETT behov. Rör inte kundvagnen — kör willys_plan_apply för det. |
| willys_plan_remove_recipeA | Ta bort ett recept ur planen. Behoven räknas om; varor som bara det receptet krävde försvinner ur den föreslagna korgen. |
| willys_plan_set_ingredientA | Lägg till eller rätta EN ingrediens i ett recept utan att röra de andra. Använd detta för att fixa en felmatchad rad (t.ex. skärpa mustContain) i stället för att skicka om hela receptet med willys_plan_add_recipe. |
| willys_plan_remove_ingredientA | Ta bort EN ingrediens ur ett recept (t.ex. en skafferivara användaren redan har hemma), utan att röra receptets övriga rader. |
| willys_plan_statusA | Visa vad planen kräver, vilken produkt och mängd som föreslås för varje vara, vad det kostar, och vilka val som väntar på svar om överskott. Läser bara — ändrar varken plan eller kundvagn. Kör detta innan willys_plan_apply. |
| willys_plan_applyA | Synka kundvagnen mot planen. Skickar BARA differensen: rätt vara i rätt antal ger inget anrop, växande behov byter förpackning eller höjer antalet. dryRun=true (default) visar ändringarna utan att röra vagnen. |
| willys_plan_clearA | Nollställ planen. Tömmer INTE kundvagnen — den behåller det som redan lagts i. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
The tools span distinct domains (stores, products, cart, orders, planning) with clear purposes. Some pairs like find_stores vs nearest_stores and search vs find_cheapest could be confused, but descriptions clarify the specific use cases. Overall, a capable agent can differentiate most tools without difficulty.
Most tools follow a willys_verb_noun pattern (e.g., willys_get_cart, willys_plan_apply) with snake_case throughout. Minor deviations like willys_search, willys_login, and willys_setup_init don't break the pattern significantly. The naming is predictable and readable.
With 31 tools, the server feels heavy, especially when including meta-tools like willys_fetch_url and willys_open_file that aren't grocery-specific. The broad scope (stores, products, cart, orders, planning, auth, setup) justifies many tools, but 31 is above the typical well-scoped range. It's borderline acceptable.
The tool surface covers the main workflows: store lookup, product search, cart management, order history, customer info, and meal planning. Missing explicit cart quantity updates or recipe listing can be worked around via add/remove and plan status. Overall, no critical dead ends for the core domain.