Skip to main content
Glama

handle-mcp

Let your AI agent shop at nemlig.com, BilkaToGo and REMA 1000. An MCP server for Claude, Grok or Codex. It reads the offers, plans the week on your budget and fills the cheapest cart. You pay.

Install → · handlemcp.dk

It can never order or pay. You do. That code does not exist, and a test fails if it shows up (why).

It counts anonymous usage, and tells you so. No id, no personal data. Off with HANDLE_TELEMETRY=0. Exactly what is sent.

How it works

  1. Plan. Give your agent a budget. It reads this week's offers and the recipes, and plans the meals around them.

  2. Compare. It prices the whole list in every store: pack sizes, offers, delivery fee and minimum order.

  3. Fill. It fills the cheapest store's cart with your login. Only the cart. (At REMA 1000: your shopping list "handle-mcp".)

  4. Pay. You open the store, check the cart, pick a delivery or pickup time and pay.

Taste, budget and meal rules live in your own prompt or skill. The server finds and counts. Build your own skill.

Related MCP server: TilbudsTrolden

Requirements

  • macOS, Linux or Windows (x64). Windows on ARM is not supported yet: a dependency (cryptography) has no ready-made build for it.

  • uv. It fetches Python 3.12+ if you do not have it.

  • An MCP client, Grok, Claude Code, Claude Desktop or Codex etc.

  • An account at nemlig.com or BilkaToGo with home delivery to your address, or at REMA 1000 (Køb & Hent or shopping in the store yourself).

Install

uvx handle-mcp@latest login nemlig
claude mcp add handle -- uvx handle-mcp@latest

@latest runs the newest release at each start. To choose when to update, use a version instead, e.g. handle-mcp@1.5.2 (more).

Then ask:

  • "Plan 5 dinners for 4 within 900 kr, built on this week's offers. Fill the cheapest cart."

  • "What is on offer this week? Any free gifts?"

  • "Which delivery times are cheapest tomorrow?"

Other stores, Claude Desktop, headless machines and AI agents (--from-env): setup. nemlig's offers and REMA 1000's search work with no login. No terminal? Join the waitlist.

Tools

Tool

Writes?

What

search_products

no

Price, price per kg/l, offers

search_recipes

no

The store's recipes (nemlig)

list_recipes

no

Featured recipes (BilkaToGo: the week's madplan), by tag (nemlig) or by category (BilkaToGo)

get_recipe

no

The products to buy for a recipe, for any number of persons

list_offers

no

This week's offers and free gifts

compare_basket

no

Prices a list in every store, fees included, cheapest first

get_cart

no

Cart lines, fees, total, in one store or every store

set_cart_quantities

yes

Sets quantities in the cart (REMA 1000: the list "handle-mcp"). Nothing else

add_recipe_to_cart

yes

Puts a recipe's products in the cart, after your yes. Nothing else

get_delivery_info

no

Chosen time, fees

list_delivery_slots

no

Free times, cheapest first (REMA 1000: Køb & Hent times)

get_orders / get_order

no

What you usually buy

Full arguments and fields: docs/tools.md.

Usage counts

Anonymous counts, so we can show the stores what handle-mcp sends them. On by default. Every event has version and date (day only):

Event

When

Fields

server_started

once a day per machine

os

first_tool_call

the first tool call of the day (listing tools is not a call)

tool

login_ok

once a day per store

store

cart_filled

after 30 quiet minutes, only if every line went in; then nothing until the cart is empty again

store, basket_total_dkk (nearest 50 kr), item_count

list_filled

the same, for REMA 1000's shopping list

store, basket_total_dkk, item_count

Never sent: names, addresses, phone, email, logins, product names, order ids or any id for you or your machine. Events go to Umami Cloud over HTTPS. Umami sees your IP to answer and to guess the country; it does not save it. Sends run in the background with a 2 second timeout, and a failed send never breaks a tool. Cart links carry utm_source=handlemcp.

Your AI tells you once: the first tool answer on a machine has a telemetry_notice. The only file is ~/.config/handle-mcp/telemetry.json: whether the notice was shown, the day each daily event was last sent, and which stores have a counted cart that is not empty yet.

Off:

HANDLE_TELEMETRY=0          # or DO_NOT_TRACK=1, or --no-telemetry

Your own Umami: HANDLE_TELEMETRY_URL and HANDLE_TELEMETRY_WEBSITE. Why: ADR 0005.

More

Setup · Skills · Security · Troubleshooting · Testing · Roadmap · Contributing · Credits

Unofficial. Uses the stores' private website APIs, so it can break any day. Not affiliated with nemlig.com, Salling Group or REMA 1000.

MIT

Free, and it stays free. If it saves you time or money:

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      A
      quality
      A
      maintenance
      A Model Context Protocol server for real-time Swiss grocery shopping that searches and compares products across 8 major Swiss retailers (Migros, Coop, Aldi, Denner, Lidl, Farmy, Volgshop, Otto’s), normalizes per-unit prices, surfaces promotions, computes optimal multi-store shopping plans, and works with any MCP-compatible client without API keys or accounts.
      7
      524 npm
      42
      -
    • A
      license
      A
      quality
      B
      maintenance
      An MCP server for Nordic grocery shopping that finds deals across supermarkets in Denmark, Norway, Sweden, and Finland, plans weekly dinners around cheap ingredients, and generates shopping lists grouped by store.
      18
      48
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server that queries Norwegian grocery store flyers (kundeaviser) to help AI agents plan cheap meals based on current offers.
      7
      1
      MIT