---
title: "Plendio til AI-assistenter - Plendio"
description: "Brug Plendios prissammenligning direkte i Claude, ChatGPT, Gemini og andre AI-assistenter: en gratis MCP-server, der virker uden login. Log ind, hvis assistenten skal bruge dine egne lister. Documentation for the Plendio MCP server."
url: "https://plendio.dk/ai"
source: "https://plendio.dk/ai"
---
# Plendio i din AI-assistent

Spørg om produkter og priser på almindeligt sprog og få svar fra danske, svenske, tyske og norske netbutikker, direkte i den assistent, du allerede bruger. Gratis og uden login.

Plendio søger i over 23 millioner priser fra over 4.500 butikker i Norden og Tyskland.

## ChatGPT

Åbn Plendio i ChatGPT og skriv, hvad du leder efter.

Du kan for eksempel spørge

- “Find den billigste PS5 i Danmark”
- “Sammenlign priser på AirPods Pro 3”
- “Jeg skal på jagt og mangler varmt tøj”

[Åbn i ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6abc1d1fe81c8191afe6805cef9facd8)

## Claude

Føj Plendio til Claude som connector og spørg i en almindelig samtale.

Du kan for eksempel spørge

- “Hvilken robotstøvsuger under 3.000 kr. er bedst?”
- “Hvordan har prisen på en Dyson V15 udviklet sig det seneste år?”
- “Hvem sælger en airfryer billigst inklusive fragt?”

[Tilføj til Claude](https://claude.ai/directory/plendio-commerce)

## Andre AI-agenter (MCP)

Plendio har en åben MCP-server, gratis og uden login. Peg din egen agent eller klient på adressen.

https://plendio.dk/mcp

Blandt værktøjerne: søg produkter, hent et produkt, sammenlign priser og list kategorier.

[Se opsætning](#connect)

## Sådan tilføjer du Plendio i Claude

Åbn Indstillinger, derefter Connectors, gennemse og vælg «Plendio». Eller tilføj en brugerdefineret connector med adressen `https://plendio.dk/mcp`

## Til udviklere

Plendio har en åben MCP-server, så en AI-assistent kan søge efter produkter og sammenligne priser i danske, svenske, tyske og norske netbutikker. Den er gratis, og de fleste værktøjer kræver ikke login. Assistenten kan også lave en ønskeseddel uden en konto. Logger du ind med din Plendio-konto, kan assistenten også gemme, vise, ændre og dele dine lister.

Sådan gør du: Tilføj https://plendio.dk/mcp som brugerdefineret connector i din AI-app. Når assistenten skal bruge din konto, åbner appen Plendios login, og du godkender, hvad den må. Du kan fjerne adgangen igen under Konto → Forbundne apps. Resten af siden er på engelsk og henvender sig til udviklere.

MCP endpoint

https://plendio.dk/mcp

## What it is

Plendio is an independent price comparison service with AI product search for shoppers in Denmark, Sweden, Germany and Norway. The Plendio MCP server lets an AI assistant do what a shopper does on the website: search products in plain language, read a product's specifications and price history, and compare the shops that sell it, cheapest first, including shipping and whether the shop delivers to the shopper's country.

- · **No API key, sign-in optional.** The server is public and free, and most tools work without an account. A shopper who signs in with their Plendio account (OAuth 2.1, [below](#signin)) lets the assistant save, show, change and share their own lists.
- · **Nothing is bought.** The catalogue tools only read. The wishlist tools write anonymous wishlists, and the account tools change the signed-in shopper's own lists; the only thing sent out is the invitation email a shopper asks `share_wishlist` to send.
- · **Transport:** MCP streamable HTTP, stateless, JSON responses. There is no session to keep.
- · **One endpoint per domain:** plendio.dk/mcp (Denmark, DKK), plendio.se/mcp (Sweden, SEK), plendio.de/mcp (Germany, EUR) and plendio.com/mcp. The domain sets the default market; every tool also takes a `market` argument (dk, se, de, no).
- · **Discovery:** [/.well-known/mcp.json](/.well-known/mcp.json), and [llms.txt](/llms.txt) as a plain-text overview of the site.
- · **Prices are prices, links are links.** Results carry consumer prices including VAT and a link to the product's Plendio page, which lists every shop's offer and sends the shopper to the shop. There are no ads in the results and no shop can buy a better position; Plendio may earn a commission when a shopper buys after clicking through, and that never changes the order ([how we rank](/how-we-rank)).

## Connect it to an assistant

Use the endpoint URL above. Authentication: none for the catalogue and wishlist tools. The account tools use OAuth 2.1, which a client that supports MCP authorization finds by itself: there is no key or client id to enter. The first time the assistant calls an account tool, it opens a Plendio sign-in page where the shopper signs in and approves what the app may do ([sign-in](#signin)).

### Claude (claude.ai, Claude Desktop, mobile)

Settings, then Connectors, then **Add custom connector**. Name it Plendio, paste `https://plendio.dk/mcp` as the URL, leave the authentication fields empty and add it. Then switch the connector on in a conversation and ask for a product. On team plans an owner adds the connector first. To use your own lists, choose **Connect** on the connector: Claude opens Plendio's sign-in, and you approve.

### Claude Code

```
claude mcp add --transport http plendio https://plendio.dk/mcp
```

### ChatGPT

In ChatGPT's settings open Apps, then Advanced settings, and turn on **Developer mode**. Create a connector, paste the endpoint URL, choose *OAuth* as the authentication (ChatGPT finds Plendio's sign-in by itself; no client id or secret is needed), and enable it for a chat. ChatGPT opens Plendio's sign-in when it first needs your account. With *no authentication* only the tools that need no account work. Availability of developer mode depends on your plan.

### Gemini CLI

```
gemini mcp add --transport http plendio https://plendio.dk/mcp
```

or in `~/.gemini/settings.json`:

```
{
  "mcpServers": {
    "plendio": { "httpUrl": "https://plendio.dk/mcp" }
  }
}
```

### Cursor, VS Code and other clients

Any client that speaks streamable HTTP takes the URL. In Cursor's `mcp.json`:

```
{
  "mcpServers": {
    "plendio": { "url": "https://plendio.dk/mcp" }
  }
}
```

In VS Code's `.vscode/mcp.json`:

```
{
  "servers": {
    "plendio": { "type": "http", "url": "https://plendio.dk/mcp" }
  }
}
```

To try the server by hand, use the MCP Inspector:

```
npx @modelcontextprotocol/inspector --cli https://plendio.dk/mcp --transport http --method tools/list
```

or plain HTTP:

```
curl -s -X POST https://plendio.dk/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_products","arguments":{"query":"laptop 32 GB RAM"}}}'
```

## The tools

The first four (search, product, prices, categories) are read-only, idempotent and closed-world (they never look beyond Plendio's catalogue). The wishlist tools further down write, and are marked so. The account tools after them need sign-in. Every tool carries a title and its annotations in `tools/list`. The examples below are shortened. Each result has structured content and a short text summary.

### `search_products`: Search products

Free text in Danish, Swedish, German, Norwegian or English, plus optional filters: `category`, `brands`, `shops`, `min_price`, `max_price`, `in_stock`, `sort` (relevance, price\_asc, price\_desc), `page` (24 products per page), `market`. Spec words in the query ("32 GB RAM", "under 12000") are understood as on the website.

Example arguments

```
{
  "query": "laptop 32 GB RAM under 12000",
  "max_price": 12000,
  "in_stock": true
}
```

Example result (structured content)

```
{
  "query": "laptop 32 GB RAM under 12000",
  "market": "dk",
  "currency": "DKK",
  "total": 41,
  "total_exact": true,
  "page": 1,
  "page_size": 24,
  "total_pages": 2,
  "products": [
    {
      "id": 1804231,
      "title": "Acme Book 15 - 15.6\" - 32 GB RAM - 1 TB SSD",
      "brand": "Acme",
      "category": "Bærbare computere",
      "price_from": 8999,
      "currency": "DKK",
      "offer_count": 7,
      "in_stock": true,
      "image": "https://plendio.dk/img/...",
      "url": "https://plendio.dk/products/acme-book-15-32-gb-1804231"
    }
  ],
  "applied": { "max_price": 12000, "in_stock": true, "specs": ["ram_gb >= 32"] },
  "search_url": "https://plendio.dk/search?q=laptop+32+GB+RAM+under+12000"
}
```

### `get_product`: Get product details

One product by the `id` that search\_products returns: specifications, the offers of shops that ship to the market (at most 25, cheapest first) and a summary of the last year's price history.

Example arguments

```
{ "product_id": 1804231 }
```

Example result

```
{
  "id": 1804231,
  "title": "Acme Book 15 - 15.6\" - 32 GB RAM - 1 TB SSD",
  "brand": "Acme",
  "category": "Bærbare computere",
  "url": "https://plendio.dk/products/acme-book-15-32-gb-1804231",
  "market": "dk",
  "currency": "DKK",
  "in_stock": true,
  "specs": [{ "key": "ram_gb", "label": "RAM", "value": "32 GB" }],
  "offer_count": 2,
  "offers": [
    {
      "shop": "cheap.dk", "shop_host": "cheap.dk", "shop_country": "DK",
      "price": 8500, "currency": "DKK", "shipping": 99, "total": 8599,
      "availability": "in_stock", "condition": "new", "ships_to_market": "yes"
    }
  ],
  "price_history": {
    "currency": "DKK", "lowest": 7800, "average": 8600, "highest": 9500,
    "current": 8500, "since": "2026-06-29", "days": 92,
    "scope": "The cheapest price across all shops in the catalogue, whatever country they ship to."
  }
}
```

### `compare_prices`: Compare prices

The shops that sell one product, cheapest first by total price including shipping (by price alone where a shop's shipping is unknown). Shops that do not ship to the market are left out unless `include_other_markets` is true.

Example arguments

```
{ "product_id": 1804231, "market": "dk" }
```

Example result

```
{
  "id": 1804231,
  "title": "Acme Book 15 - 15.6\" - 32 GB RAM - 1 TB SSD",
  "url": "https://plendio.dk/products/acme-book-15-32-gb-1804231",
  "market": "dk",
  "currency": "DKK",
  "offers": [
    {
      "shop": "cheap.dk", "shop_host": "cheap.dk", "shop_country": "DK",
      "price": 8500, "currency": "DKK", "shipping": 99, "total": 8599,
      "availability": "in_stock", "condition": "new", "ships_to_market": "yes"
    },
    {
      "shop": "dear.dk", "shop_host": "dear.dk", "shop_country": "DK",
      "price": 9000, "currency": "DKK", "shipping": 0, "total": 9000,
      "availability": "in_stock", "condition": "new", "ships_to_market": "yes"
    }
  ],
  "offers_omitted": 2
}
```

### `list_categories`: List categories

The category tree with localized names and product counts: the top level, or the subcategories of `parent`. Use the returned `slug` as search\_products' category filter.

Example arguments

```
{ "parent": "elektronik" }
```

Example result

```
{
  "market": "dk",
  "language": "da",
  "parent": "elektronik",
  "categories": [
    {
      "slug": "computere", "path": "elektronik/computere", "name": "Computere",
      "products": 3120, "has_children": true,
      "url": "https://plendio.dk/categories/electronics/computers"
    }
  ]
}
```

## Wishlist tools

These turn a gift search into a shareable Plendio wishlist (an "ønskeseddel") with no login. A list gets two links: a **share link** that opens it read-only on Plendio, for family and friends, and a private **edit link** that belongs to the person who made it, which opens the list on the site for editing and lets them save it to a Plendio account. Anyone who holds the edit link can change the list, so it is shown once and meant to be kept private. The tools write (`readOnlyHint: false`), never destroy anything (`destructiveHint: false`) and stay inside Plendio (`openWorldHint: false`).

### `create_wishlist`: Create a shareable wishlist

A title (up to 80 characters), a market and 1 to 50 products by Plendio id or slug, each with an optional note of up to 140 characters. Unknown or unavailable products are reported in `not_stored` and not stored. Markup and links are removed from the text. Not idempotent: each call makes a new list.

Example arguments

```
{
  "title": "Emmas fødselsdag",
  "market": "dk",
  "items": [
    { "product_id": 1804231, "note": "Gerne i sort" },
    { "slug": "acme-book-15-32-gb-1804232" }
  ]
}
```

Example result (shortened)

```
{
  "title": "Emmas fødselsdag",
  "market": "dk",
  "share_url": "https://plendio.dk/l/a.mQ3x...",
  "item_count": 2,
  "items": [
    {
      "product_id": 1804231,
      "title": "Acme Book 15 - 15.6\" - 32 GB RAM - 1 TB SSD",
      "note": "Gerne i sort",
      "price_from": 8999,
      "currency": "DKK",
      "available": true,
      "url": "https://plendio.dk/products/acme-book-15-32-gb-1804231?src=ai"
    }
  ],
  "total_from": 8999,
  "currency": "DKK",
  "edit_url": "https://plendio.dk/wishlist/edit/Zk9...",
  "instruction": "Keep the edit link private; anyone with it can change the list. The share link is safe to send to family and friends.",
  "not_stored": [{ "product": "1804232", "reason": "no active product with that id" }]
}
```

### `add_to_wishlist`: Add products to a wishlist

Takes the edit link (or the token at the end of it) and up to 50 products. A product that is already on the list stays as it is, note included, so repeating a call changes nothing more (idempotent). A list holds at most 50 products.

Example arguments

```
{
  "edit_token": "https://plendio.dk/wishlist/edit/Zk9...",
  "items": [{ "product_id": 1804240, "note": "Str. 42" }]
}
```

### `remove_from_wishlist`: Remove products from a wishlist

Takes the edit link and the products to take off. The list itself is never deleted, and a removed product can be added again (idempotent, not destructive).

Example arguments

```
{
  "edit_token": "Zk9...",
  "items": [{ "product_id": 1804240 }]
}
```

### `get_wishlist`: Get a wishlist

Read-only. Takes the share link (or the share id at its end) and returns the title, the items with notes and their current best prices. The edit link is not accepted. The title and notes are text written by whoever made the list.

Example arguments

```
{ "share_url": "https://plendio.dk/l/a.mQ3x..." }
```

### Saving, limits and expiry

- · Opening the edit link on Plendio lets the person add and remove products on the normal wishlist page, and, signed in, save the list to their account. **Saving ends the edit link**: from then on only the account can change the list. The share link keeps working.
- · At most 20 lists per client address an hour; edits are limited too. A wrong, expired or already saved edit token gets the same error.
- · The lists are private by link, not indexed by search engines and not in the sitemap. A list that is not opened or edited for 90 days is deleted.
- · A human who clicks a shop on a list page is on Plendio's website, as on any other page of the site.

## Sign-in and account tools

Signing in is optional. Every tool above works without it. A shopper who signs in with their Plendio account (password, email link or Google) lets the assistant work on the lists on that account: the same wishlists, shopping lists and favourites they see on the website.

- · **How it connects.** Add the endpoint as a custom connector. When the assistant first calls an account tool, the app opens a Plendio page; the shopper signs in there (never in the app, which never sees the password), sees the app's name and what it asks for, and approves or declines.
- · **OAuth 2.1.** Authorization code with PKCE (S256), a resource indicator for this host's `/mcp`, client ID metadata documents or dynamic client registration. Metadata at `/.well-known/oauth-authorization-server` and `/.well-known/oauth-protected-resource/mcp`. Access tokens last an hour; refresh tokens rotate on every use.
- · **Scopes.** `lists:read` (see the lists), `lists:write` (change them), `lists:share` (share them by email and manage who they are shared with). An app that asks for none gets all three, shown on the consent page.
- · **Removing access.** Account, then Connected apps (*Forbundne apps*), then Remove access. Changing the account's password or email address removes every connected app. Signing out of Plendio does not.

| Tool                      | Scope         | What it does                                                                                                                   |
|---------------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------|
| `list_my_wishlists`       | `lists:read`  | The lists on the account: own wishlists, shopping lists and favourites, and lists shared with the shopper.                     |
| `get_my_wishlist`         | `lists:read`  | One list by list\_id: title, recipient, date, items with notes and best current prices.                                        |
| `claim_wishlist`          | `lists:write` | Saves an anonymous wishlist (by its edit link) to the account. The edit link then stops working; the share link keeps working. |
| `add_to_my_wishlist`      | `lists:write` | Adds products, each with an optional note.                                                                                     |
| `remove_from_my_wishlist` | `lists:write` | Removes products.                                                                                                              |
| `update_my_wishlist`      | `lists:write` | Changes a list's title, recipient or event date.                                                                               |
| `share_wishlist`          | `lists:share` | Invites people by email, as viewers or editors (at most 10 addresses a call, 20 people a list).                                |
| `list_shares`             | `lists:share` | Who a list is shared with, their role and whether they accepted.                                                               |
| `revoke_share`            | `lists:share` | Ends one person's access to a list.                                                                                            |

The tools act only on lists the signed-in shopper owns or has been given access to. `share_wishlist` sends each address an invitation email from Plendio in the shopper's name, which cannot be recalled, so an assistant should confirm the addresses and the role first. Account tools have a per-account limit on top of the per-client one.

## Limits and errors

- · 120 tool calls per minute and 20000 per day for each client address. Listing the tools and the handshake are not counted the same way; they have ten times the allowance.
- · Over the limit the server answers HTTP **429** with a `Retry-After` header and a JSON-RPC error that says how many seconds to wait.
- · One JSON-RPC message per request (batches are refused with 400); a request body may be at most 64 KB.
- · A search has 20 seconds, every other call 10; a call that runs out of time says so and suggests a narrower query.
- · The wishlist tools write; they run on a budget and under limits of their own, so a flood of writes cannot slow the read-only tools.
- · Answers are capped: 24 products per page, 25 offers per product, 60 categories per list, 60 specification rows. Use `page` or a filter for more.
- · A failed call returns an error whose text says what to change (for example an unknown market, or a product id that does not exist), never a stack trace.

## Privacy

The server sets no cookies, and the tools that need no account know nothing about the person. For each tool call we log the tool name, the market, the query text, the number of results, the outcome and duration, the client's name and version as it introduced itself, its user agent and a hashed form of the client's IP address (a keyed hash that changes whenever the server restarts and cannot be turned back into an address). The logs are used to run the service, keep it within its limits and see which questions it cannot answer yet. The wishlist tools store a list's title, its products and short notes, and nothing about the person: no name, no e-mail address, no address of the client. The edit token is stored only as a hash and is never logged. A list that is not opened or edited for 90 days is deleted. When a shopper signs in, we also store, per connected app, its name, the scopes granted, when it was connected and last used, and its tokens as hashes only; an account tool call's log line carries the shopper's user id and the app's name. What a tool returns (the shopper's lists, and the email addresses a list is shared with) goes to the app's provider, under that provider's own privacy policy. Plendio's own [privacy policy](/privacy) covers the rest.

## Support

Questions, bug reports and requests: [hello@plendio.com](mailto:hello@plendio.com). The operator's company details (name, CVR number and address) are on the [contact and company details](/impressum) page and the [terms of use](/terms) apply.