Continente MCP

io.github.andredelgadoPublished by GitHub account andredelgadov0.13.0Updated Nov 7, 2026

Unofficial Continente.pt shopping: search products, read favorites and orders, manage the cart.

Overview

AI-generated overview

Unofficial Continente.pt grocery server: search products, read favorites and orders, and fill or edit the shopping cart, with checkout left on the website.

What you can do
  • Search the catalogue and read product details, prices, sale rules, labels, allergens and nutrition
  • Show open product choices side by side for the user to pick
  • Read account favorites, recent orders and frequently bought products
  • Read the cart, preview changes, and add, set, remove or clear cart lines
  • List Cartão Continente coupons and set which ones the cart uses
  • Report local session, login and cache state without contacting the site
When to use it
Useful when you shop at Continente.pt and want an assistant to build a weekly basket, compare pack sizes and unit prices, check labels for allergens, or restock from past orders. Search and product details work without an account; cart, favorites and orders need one.
Requirements
Runs locally over stdio via npx (Node.js 22 or newer) or a Claude Desktop extension on macOS or Windows. A Continente.pt account is needed for cart, favorites and orders, supplied through CONTINENTE_EMAIL and CONTINENTE_PASSWORD or a credentials file named by CONTINENTE_CREDENTIALS_FILE. Chromium is downloaded automatically on first use (about 150 MB).
Before you install
The server stores your Continente email and password (or reads them from a credentials file) and drives the site with a headless browser, so it may break when the site changes. It changes your real cart: add, set, remove, clear and coupon tools write to the account, and an unconfirmed change may still have gone through, so it must not be retried blindly. Checkout, payment and delivery slots are not handled. It is unofficial and not affiliated with Continente.

Installation

In SourceWeft

  1. Open Continente MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Continente MCP

[CI] [npm] [License: MIT]

An MCP server that lets AI assistants shop at Continente.pt: search products, check prices and sale rules, read your favorites and past orders, and fill your cart. Checkout and payment always stay on the website.

Unofficial. This project is not affiliated with, endorsed by or supported by Continente or MC Sonae. It automates the public website with a headless browser, may break when the site changes, and should be used in line with the website's terms. You are responsible for anything placed in your cart.

Features

  • Catalogue search and product details, with exact prices, unit prices, availability and sale rules for weighted and bulk products.
  • Safe cart changes. Every change is confirmed by reading the cart back. If a change cannot be confirmed, the result says so and tells the assistant to check the cart instead of retrying.
  • Your account: favorites, order history and a ranking of the products you buy most.
  • Runs locally over stdio. Your credentials and session are stored on your computer and sent only to Continente.pt.
  • Built-in guidance. The server tells the assistant the cart rules as soon as it connects, and offers a basket-planner prompt with the full shopping workflow. Nothing extra to install; the same guide also ships as a skill.

Requirements

  • A Continente.pt account for account features (search and product details work without one)
  • Claude Desktop on macOS or Windows for the one-click install, or Node.js 22 or newer for any other MCP client

The server drives the website with Chromium, which it downloads automatically the first time it needs it (about 150 MB, once).

Install in Claude Desktop (one click)

  1. Download continente-mcp.mcpb from the latest release.
  2. Open it. Claude Desktop shows an install dialog; click Install.
  3. Enter your Continente email and password when asked. Claude Desktop keeps the password in its secure settings storage.

That's it. The server is also listed in the MCP Registry as io.github.andredelgado/continente-mcp, so clients that browse the registry can find it. To use 1Password instead of storing the password in Claude Desktop, use the manual setup below.

Updates

The server checks npm once a day for a newer release. When there is one, it tells the assistant, so Claude can mention it, and get_session_status shows it.

  • Extension: download the new continente-mcp.mcpb and open it. Claude Desktop updates the extension in place and keeps your email and password.
  • npx setups: using continentept-mcp@latest picks up new versions when the client restarts.
  • Release emails: on GitHub, choose Watch → Custom → Releases.

Manual setup (any MCP client)

1. Save your credentials in ~/.continentept-mcp/credentials.env (see configuration for other options):

sh
mkdir -p ~/.continentept-mcp && chmod 700 ~/.continentept-mcpprintf '[email protected]\nCONTINENTE_PASSWORD=your-password\n' > ~/.continentept-mcp/credentials.envchmod 600 ~/.continentept-mcp/credentials.env

Using 1Password? Skip the file and pass secret references through op run instead; see Using 1Password.

Optionally check that login works:

sh
npx -y continentept-mcp login

2. Add the server to your MCP client.

Claude Code:

sh
claude mcp add continente -- npx -y continentept-mcp

Claude Desktop, Cursor and other clients (claude_desktop_config.json, mcp.json, ...):

json
{  "mcpServers": {    "continente": {      "command": "npx",      "args": ["-y", "continentept-mcp"]    }  }}

To keep the credentials file elsewhere, add "env": { "CONTINENTE_CREDENTIALS_FILE": "/absolute/path/to/credentials.env" }.

Chromium downloads itself on first use. To fetch it ahead of time, run npx -y continentept-mcp install-browser (on Linux, add --with-deps for the system libraries it needs).

Then ask your assistant something like "Add semi-skimmed milk and a dozen eggs to my Continente cart" or "What do I usually buy? Build me a list for this week."

Tools

ToolWhat it does
search_productsSearch the catalogue in relevance order, with favorites marked and a cursor for more
get_productPrice, pack size, availability and sale rules for one product
get_product_labelsIngredients, allergens and nutrition as the label declares them
choose_productsLet the user pick between products, with photos where the client supports it
list_favoritesYour saved favorites (refresh: true fetches the latest)
get_cartCart lines, quantities, bags and totals
preview_cart_changesWhat a list of changes would do and cost, without changing the cart
add_cart_itemAdd an amount on top of what is in the cart
set_cart_item_quantityMake the cart hold exactly a quantity; zero removes
remove_cart_itemRemove a line from the cart
clear_cartEmpty the whole cart in one confirmed step
list_couponsYour Cartão Continente coupons, and which are selected in the cart
set_cart_couponsChoose which coupons the cart uses, confirmed by reading the cart back
list_ordersRecent orders with their product lines
get_orderOne order's product lines
list_frequently_bought_productsProducts ranked by how often you order them
get_session_statusLocal login, cookie and cache state (no network)

See the tool reference for inputs, outputs, error codes and limits.

About uncertain cart changes

A cart change can fail after the request has reached the website, for example on a timeout. In that case the result has mutation.outcome: "unknown" and asks the client to call get_cart before doing anything else. The server never retries such a change on its own, and clients should not either: repeating an add_cart_item could add the item twice.

Guidance for the assistant

When a client connects, the server sends short instructions with these cart rules, so the assistant follows them without any setup. For planning a shopping list, pick the basket-planner prompt from your client's prompt or attachment menu, optionally with a request such as "weekly basket for two".

The same guide is available as a skill in skills/basket-planner. Clients that support skills, such as Claude Desktop (Settings → Capabilities → Skills) or Claude Code (~/.claude/skills/), then apply it automatically whenever you ask about groceries.

Command line

text
continentept-mcp                    Start the MCP server on stdiocontinentept-mcp login              Sign in and save the session (--show-browser to watch)continentept-mcp install-browser    Download Chromium now instead of on first use (extra arguments go to Playwright)continentept-mcp --version

Limitations

  • One account per server process.
  • Searches read at most five result pages and order listings at most ten pages, so very broad queries or long histories are reported as incomplete rather than read in full.
  • Login handles the standard email and password flow. When Continente asks you to confirm you are not a robot, the server opens a sign-in window for you to tick the box; where no window can be shown, run continentept-mcp login --show-browser and do it there. The server never answers that check itself.
  • There are no checkout, payment, delivery-slot or favorites-editing tools.

Documentation

License

MIT

Source: README.md at commit 379a11a

Tools

17

search_products

Search products

Search the Continente.pt catalogue. No login needed. Results keep the website's relevance order and mark saved favorites; pass favoritesFirst to move them to the top. Each shows its price with what it is for (per item, piece, kg or litre), any promotions, the pack size, brand, category and productId. Filter with category, excludeCategory or brand, and sort by unit_price to compare packs. Pass nextCursor back as cursor, with the same query, for the next products.

ParameterssortbrandlimitqueryrequiredcursorcategoryfavoritesFirstexcludeCategory

get_product

Get product

Get one product by productId: price, promotions with their dates, pack size, availability and sale rules (sale unit, minimum, maximum and step). A multi-buy or nth-unit offer is applied by the cart, not in the price shown. Availability is what the product page shows this session, signed in or not; it is not a delivery-slot stock check. Check this before choosing a quantity for weighted or bulk products. No login needed.

ParametersproductIdrequired

choose_products

Choose products

Show the user the open choices of a request side by side, with photos where the client supports it, so they pick one product for each. Use it only when the user must decide between candidates, such as two milks or 500 g against 1 kg; settle everything else yourself (favorites, usual purchases, cheapest per kg). Put all open choices of a list in one call, at most 10, each with 2 to 4 candidates and your suggestion. It changes nothing: the choices come back as a chat message, then change the cart with set_cart_item_quantity.

Parametersdecisionsrequired

get_product_labels

Get product labels

Ingredients, allergens and nutrition for up to 20 products, as the website's copy of each label declares them: the ingredient list, the words it prints in capitals (how labels mark allergens), the allergen and "may contain traces" statements, and nutrients per 100 g or ml. Use it only when a task needs them, such as checking vegan, gluten or allergens, or adding up protein. Nothing is inferred: absence of an allergen in these fields is not a "free from" claim, and the packaging prevails. No login needed.

ParametersproductIdsrequired

list_favorites

List favorites

List the products saved as favorites on the account. Uses a local snapshot that is refreshed automatically when missing; snapshots older than 24 hours are marked stale. Pass refresh: true to fetch the current list from the website.

Parametersrefresh

get_cart

Get cart

Read the shopping cart: each line with productId, cartItemId, kind (product or bag), quantity, unit price (per item or per kg) and lineTotal, its promotions and lineTotalBeforeDiscount when the cart discounts the line, plus the totals (products, bags, deposit, delivery, discounts and grandTotal, the amount to pay), and checkout: the minimum order and whether the delivery fee is free with EntregaZero or set at checkout by day, slot and area (it is not in the totals until then). Use it to check current quantities before changing them and to verify any uncertain change.

Takes no parameters.

preview_cart_changes

Preview cart changes

Check products and the total wanted of each before changing the cart, without changing anything. For each: what the cart holds, what set_cart_item_quantity would do (add, increase, decrease, remove or none), why it would be refused (such as a minimum or step), availability, pack details and the estimated cost, plus the products total after the changes with its minimum order and delivery fee. Reads one product page per item, at most 30. Prices and stock can change before you apply it.

Parametersitemsrequired

add_cart_item

Add to cart

Add an amount of a product to the cart, on top of any quantity already there. quantity is in the product sale unit (default 1). Use set_cart_item_quantity instead when the user wants a specific total. If the result has mutation.outcome "unknown", the cart may have changed: call get_cart before any further change and never repeat the request automatically.

ParametersquantityproductIdrequiredcartItemId

set_cart_item_quantity

Set cart quantity

Make the cart hold exactly this quantity of a product, adding it if it is not there yet. Zero removes it. Pass cartItemId from get_cart when the product has more than one line. If the result has mutation.outcome "unknown", the cart may have changed: call get_cart before any further change and never repeat the request automatically.

ParametersquantityrequiredproductIdrequiredcartItemId

remove_cart_item

Remove from cart

Remove a product line from the cart. Succeeds without changes if it is already absent. Pass cartItemId from get_cart when the product has more than one line. If the result has mutation.outcome "unknown", the cart may have changed: call get_cart before any further change and never repeat the request automatically.

ParametersproductIdrequiredcartItemId

clear_cart

Empty cart

Remove every product from the cart in one step, with the website's own "remove all" action, and confirm the cart is empty. Only when the user asks to empty or clear the whole cart; pass confirm: true. To remove some products, use remove_cart_item. If the result has mutation.outcome "unknown", the cart may have changed: call get_cart before any further change and never repeat the request automatically.

Parametersconfirmrequired

list_coupons

List coupons

List the Cartão Continente coupons on the account page, with each one's couponId, description, benefit and availability as shown, and whether it is selected in the cart (null when the cart has no coupon choices, for example because it is empty). Whether a coupon applies to the cart and whether coupons combine are not stated. Needs the account to be signed in.

Takes no parameters.

set_cart_coupons

Select cart coupons

Make exactly these coupons the cart's selection, by couponId from list_coupons; an empty list removes them all. Only when the user asks to use or stop using coupons. It submits the cart's own coupon form and confirms the result by reading the cart back. A coupon is applied at checkout, on the website. If the result has mutation.outcome "unknown", the selection may have changed: call list_coupons before any further change and never repeat the request automatically.

ParameterscouponIdsrequired

list_orders

List orders

List recent orders, newest first, with their product lines. Each order has an orderId for get_order. Use detailLimit or includeLines: false to read fewer details, and pass the returned nextCursor as cursor to continue.

ParameterslimitcursordetailLimitincludeLines

get_order

Get order

Get the product lines of one order by its orderId from list_orders (not the displayed order number).

ParametersorderIdrequired

list_frequently_bought_products

List frequently bought products

Rank products by how many recent orders contained them, with total quantities per unit. orderLimit sets how many recent orders to read (default 10); limit caps the products returned (default 25). Useful for building a usual shopping list.

ParameterslimitorderLimit

get_session_status

Get session status

Report local state without contacting the website: browser status, whether credentials and saved cookies exist, the last observed login state and favorites snapshot freshness. Never returns secrets.

Takes no parameters.

Version history

9
  1. v0.13.0LatestNov 4, 2026
  2. v0.12.1Oct 26, 2026
  3. v0.11.0Oct 17, 2026
  4. v0.10.0Oct 17, 2026
  5. v0.9.0Oct 16, 2026
  6. v0.8.0Oct 16, 2026
  7. v0.6.1Oct 16, 2026
  8. v0.6.0Oct 15, 2026
  9. v0.4.0Oct 15, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts