# io.github.sandsower/kronan-mcp (npm · kronan-mcp)

MCP server for the Krónan grocery store API (Iceland)

- Trust score: 67/100 (medium)
- Change this week: +21
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `kronan-mcp`: 67/100 (this document), [markdown](https://verifymcp.io/servers/sandsower-kronan-mcp/kronan-mcp.md), [page](https://verifymcp.io/servers/sandsower-kronan-mcp/kronan-mcp)

## Channel facts

- Registry: `npm`
- Package: `kronan-mcp`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 105 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1395 tokens (~42/item across 33 items; 33 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add sandsower-kronan-mcp -- npx -y kronan-mcp
```

### Codex

```bash
codex mcp add sandsower-kronan-mcp -- npx -y kronan-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sandsower-kronan-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "kronan-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sandsower-kronan-mcp --command npx --arg -y --arg kronan-mcp
```

### Hermes

```yaml
mcp_servers:
  sandsower-kronan-mcp:
    command: "npx"
    args: ["-y", "kronan-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "sandsower-kronan-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "kronan-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 67, +47)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-08-02 (score 20, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-08-01 (score 5, −29)

- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-07-31 (score 34, −26)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 60, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-29 (score 78, +52)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional regression] Security disclosure: unverified → fail
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-07-28 (score 26, −20)

- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (33)

### `get_me` (~19 tokens)

Get the current authenticated identity (user or customer group)

### `list_categories` (~17 tokens)

Get the full 3-level category tree

### `get_category_products` (~45 tokens)

Get paginated product listing for a category (48 per page)

Input parameters:

- `page` (integer): Page number (default: 1)
- `slug` (string, required): Category slug

### `get_product` (~30 tokens)

Get full product details including price, discounts, tags, availability

Input parameters:

- `sku` (string, required): Product SKU

### `search_products` (~92 tokens)

Search for products in the smart store selection. Returns products available for home delivery.

Input parameters:

- `page` (integer): Page number
- `pageSize` (integer): Results per page (max 100)
- `query` (string, required): Search query (max 64 chars)
- `sortBy` (string): Sort field
- `withDetail` (boolean): Include discounted price, discount percent, and tags (slower)

### `get_checkout` (~21 tokens)

Get the active smart checkout (auto-creates if none exists)

### `add_checkout_lines` (~51 tokens)

Add product lines to the active checkout. Set replace=true to replace all existing lines.

Input parameters:

- `lines` (array, required): Lines to add
- `replace` (boolean): Replace all existing lines (default: false)

### `list_orders` (~45 tokens)

List orders, most recent first

Input parameters:

- `limit` (integer): Results per page
- `offset` (integer): Starting index
- `type` (string): Filter by order type

### `get_order` (~27 tokens)

Get full order details including lines with product thumbnails

Input parameters:

- `token` (string, required): Order token

### `delete_order_lines` (~52 tokens)

Remove specific lines from an order by their IDs. Service lines and the last remaining line cannot be deleted.

Input parameters:

- `lineIds` (array, required): IDs of lines to delete
- `token` (string, required): Order token

### `set_order_substitution` (~100 tokens)

Set whether substitution is allowed for specific order lines. Uses a toggle endpoint: fetches current state and only toggles lines that differ. WARNING: Not idempotent due to toggle semantics. Do NOT retry on timeout — check current state first.

Input parameters:

- `lineIds` (array, required): IDs of lines to update
- `substitution` (boolean, required): Desired substitution state (true = allow, false = disallow)
- `token` (string, required): Order token

### `lower_order_quantity` (~68 tokens)

Reduce the quantity of specific order lines. Quantity can only be lowered. Set to 0 to remove.

Input parameters:

- `lineIds` (array, required): IDs of lines to modify
- `quantity` (integer, required): New total quantity (must be lower than current)
- `token` (string, required): Order token

### `list_product_lists` (~33 tokens)

List saved product lists

Input parameters:

- `limit` (integer): Results per page
- `offset` (integer): Starting index

### `create_product_list` (~33 tokens)

Create a new product list

Input parameters:

- `description` (string): List description
- `name` (string, required): List name

### `get_product_list` (~33 tokens)

Get a product list with all items including product details and pricing

Input parameters:

- `token` (string, required): Product list UUID token

### `update_product_list` (~48 tokens)

Update the name or description of a product list

Input parameters:

- `description` (string): New description
- `name` (string): New name
- `token` (string, required): Product list UUID token

### `delete_product_list` (~31 tokens)

Permanently delete a product list and all its items

Input parameters:

- `token` (string, required): Product list UUID token

### `clear_product_list` (~33 tokens)

Remove all items from a product list without deleting the list itself

Input parameters:

- `token` (string, required): Product list UUID token

### `sort_product_list` (~30 tokens)

Sort items in the product list by store departments

Input parameters:

- `token` (string, required): Product list UUID token

### `update_product_list_item` (~64 tokens)

Add a product by SKU or update its quantity in a product list. Set quantity to 0 to remove.

Input parameters:

- `quantity` (integer, required): Quantity (0 to remove)
- `sku` (string, required): Product SKU
- `token` (string, required): Product list UUID token

### `list_purchase_stats` (~53 tokens)

List previously purchased products with frequency data, ordered by most recent purchase

Input parameters:

- `includeIgnored` (boolean): Include ignored products
- `limit` (integer): Results per page
- `offset` (integer): Starting index

### `set_purchase_stat_ignored` (~44 tokens)

Hide or unhide a product from purchase history

Input parameters:

- `id` (integer, required): Purchase stat ID
- `isIgnored` (boolean, required): Whether to ignore this product

### `get_shopping_note` (~22 tokens)

Get the shopping note (auto-creates if none exists)

### `add_shopping_note_line` (~81 tokens)

Add a line to the shopping note. Provide exactly one of text (freeform) or sku (linked product), not both.

Input parameters:

- `quantity` (integer): Quantity
- `sku` (string): Product SKU to link (mutually exclusive with text)
- `text` (string): Freeform text for the line (mutually exclusive with sku)

### `change_shopping_note_line` (~51 tokens)

Update the text or quantity of an existing shopping note line

Input parameters:

- `quantity` (integer): New quantity
- `text` (string): New text
- `token` (string, required): Line UUID token

### `reorder_shopping_note_lines` (~38 tokens)

Reorder shopping note lines by passing their tokens in desired order

Input parameters:

- `linesTokens` (array, required): Line tokens in desired display order

### `delete_shopping_note_line` (~29 tokens)

Remove a line from the shopping note

Input parameters:

- `token` (string, required): Line UUID token

### `delete_archived_line` (~29 tokens)

Remove a specific archived shopping note line

Input parameters:

- `token` (string, required): Archived line UUID token

### `clear_shopping_note` (~24 tokens)

Delete all lines from the shopping note (the note itself is preserved)

### `check_store_order_eligibility` (~27 tokens)

Check if the shopping note contains products that can be ordered from a store

### `list_archived_lines` (~19 tokens)

List previously completed and archived shopping note lines

### `apply_store_product_order` (~28 tokens)

Reorder shopping note lines to match the store's aisle layout for efficient in-store shopping

### `set_line_completion` (~78 tokens)

Mark a shopping note line as completed or uncompleted. Uses a toggle endpoint: fetches current state and only toggles if needed. WARNING: Not idempotent due to toggle semantics. Do NOT retry on timeout — check current state first.

Input parameters:

- `completed` (boolean, required): Desired completion state
- `token` (string, required): Line UUID token

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/sandsower-kronan-mcp/kronan-mcp#diagnostics

## Score history

- 2026-08-03: 67
- 2026-08-02: 20
- 2026-08-01: 5
- 2026-07-31: 34
- 2026-07-30: 60
- 2026-07-29: 78
- 2026-07-28: 26
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/kronan-mcp
- Socket report: https://socket.dev/npm/package/kronan-mcp
- Repository: https://github.com/sandsower/kronan-mcp
- Changelog RSS feed: https://verifymcp.io/servers/sandsower-kronan-mcp/kronan-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/sandsower-kronan-mcp/kronan-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/sandsower-kronan-mcp/kronan-mcp
