Skip to main content
Give AI a budget, fill it cheaply, you pay and they deliver, unpack the week, enjoy dinner

handle-mcp

GitHub stars git clones PyPI version license MIT
macOS, Windows, Linux

Let your AI agent shop at nemlig.com and BilkaToGo.
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

Example from the demo: the agent compares nemlig.com (693 kr) and BilkaToGo (741 kr) and fills the cheaper cart; nothing is ordered. Prices are examples

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 on nemlig.com and BilkaToGo, and both stores' recipes, and plans the meals around them.
  2. Compare. It prices the whole list in both stores: pack sizes, offers, delivery fee and minimum order.
  3. Fill. It puts the list in the cheapest store's cart, with your login. Only the cart, nothing else.
  4. Pay. You open nemlig.com or BilkaToGo, check the cart, pick a delivery time and pay.

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

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.

Install

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

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?"

BilkaToGo, Claude Desktop, headless machines and AI agents (handle-mcp login <store> --from-env): setup. nemlig's offers work with no login at all. 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. 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
get_orders / get_order no What you usually buy

Full arguments and fields: docs/tools.md.

Brugsstatistik

handle-mcp counts, anonymously, how far people get from install to a filled cart, so we can show nemlig.com and BilkaToGo how many carts and kroner it sends them each week. It is on by default and easy to turn off.

What is sent, and nothing else. Every event also has version and date (day only):

Event When Fields
server_started the server starts, at most once per machine per day os (darwin, linux or windows)
first_tool_call the first tool call of the day (a client that only lists the tools sends nothing) tool (e.g. compare_basket)
login_ok a store answers with your cart, at most once per store per day store (nemlig or bilka)
cart_filled once per order: after 30 minutes without changes, only when every line went in. Later edits send nothing until the cart is empty again (after checkout) store, basket_total_dkk (rounded to the nearest 50 kr), item_count

Never sent: names, addresses, phone, email, logins, product names, order ids or any id for you or your machine. The events go to Umami Cloud over HTTPS. Umami sees your IP address to send the answer back and to guess the country; it does not save the address. Sends run with a 2 second timeout, in the background. A failed send never breaks a tool. The first tool answer on a machine has a telemetry_notice, so your AI tells you about it once. 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.

Cart links (url in the cart) carry utm_source=handlemcp&utm_medium=mcp&utm_campaign=cart, so the store sees the visit in its own analytics.

Turn it off with any of:

HANDLE_TELEMETRY=0          # env var
DO_NOT_TRACK=1              # the common opt-out
handle-mcp --no-telemetry   # flag

Send the events to your own Umami: HANDLE_TELEMETRY_URL=https://umami.example.com/api/send and HANDLE_TELEMETRY_WEBSITE=<website id>. Why and how: docs/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 or Salling Group.

MIT

Free, and it stays free. If it saves you time or money: buy me a coffee

Metadata

Release files for handle-mcp 1.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for handle-mcp 1.5.2
File Size Uploaded Provenance Actions
handle_mcp-1.5.2.tar.gz 398.2 kB With provenance Details for handle_mcp-1.5.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for handle-mcp 1.5.2
File Interpreter ABI Platform Actions
handle_mcp-1.5.2-py3-none-any.whl Python 3 none any Details for handle_mcp-1.5.2-py3-none-any.whl

Total release size: 468.2 kB

Release files / handle_mcp-1.5.2.tar.gz

Download URL handle_mcp-1.5.2.tar.gz
Size 398.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7129252be24f94b016823788e2f7859e9e7692903a21a76f3012aff6e79c53cb
BLAKE2b-256 checksum
How to use checksums
d32660ba8d40ddebec3ca07c02d1b43e73f6c37345ef0e238199dc32e510b047
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Release files / handle_mcp-1.5.2-py3-none-any.whl

Download URL handle_mcp-1.5.2-py3-none-any.whl
Size 70.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
35788ed46d88335b2321a7a0ffd75d72134ae746e7cb3eba2ea8884c20dff70e
BLAKE2b-256 checksum
How to use checksums
7124bdaca02a749f47209b156b4a493d91824aaef6285ad779aef254a90292b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Security for handle-mcp 1.5.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for handle_mcp-1.5.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page