# bol.com MCP by usefulapi (remote · bol-com.usefulapi.io)

Read bol orders, returns, offers and inventory; update an offer’s stock, price or sale status.

- Trust score: 18/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `bol-com.usefulapi.io`: 18/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-bol-com/bol-com.md), [page](https://verifymcp.io/servers/io-usefulapi-bol-com/bol-com)

## Channel facts

- Endpoint: `https://bol-com.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.6.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-11-05.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the bol.com MCP by usefulapi server?

bol.com MCP by usefulapi is a hosted endpoint at https://bol-com.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-bol-com 'https://bol-com.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-bol-com": {
      "url": "https://bol-com.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-bol-com": {
      "type": "http",
      "url": "https://bol-com.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-bol-com]
url = "https://bol-com.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-bol-com": {
      "type": "remote",
      "url": "https://bol-com.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-bol-com --url 'https://bol-com.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-bol-com:
    url: "https://bol-com.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-bol-com": {
      "Transport": "http",
      "Url": "https://bol-com.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-bol-com -t streamable-http -u 'https://bol-com.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-bol-com": {
      "type": "http",
      "url": "https://bol-com.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-11-02 (score 18, −48)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Stability: 0.07 → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-10-31 (score 66, +4)

- [security improvement] Authorization: partial → pass
- [functional improvement] Stability: unverified → 0.03
- [functional improvement] MCP protocol: fail → pass
- [functional] New prompt “investigate_why_an_offer_is_not_for_sale”
- [functional] New prompt “reconcile_a_bol_invoice_with_its_transactions”
- [functional] New prompt “review_open_orders_and_their_shipments”
- [functional] New prompt “update_an_offer_after_reviewing_stock_or_prices”
- [functional] MCP protocol version: 2025-06-18 → 2025-11-25
- [functional] Server version: 1.2.0 → 1.4.0
- [functional] Server version: 1.1.0 → 1.2.0
- [functional] Server version: 1.0.1 → 1.1.0

### 2026-10-30 (score 62)

First indexed and scored.

## MCP tools (18)

### `bol_list_orders` (~199 tokens)

List orders

List the seller's bol orders (50 per page), each with its order items, EANs, quantities, prices, fulfilment method and the buyer's shipment details (personal data). By default only OPEN orders fulfilled by the retailer (FBR). Use change_interval_minute or latest_change_date to poll for recent changes. GET /retailer/orders.

Input parameters:

- `change_interval_minute` (integer): Only order items changed in the last N minutes (1-60).
- `fulfilment_method` (string): Fulfilled by the retailer (FBR, default), by bol (FBB) or both (ALL).
- `latest_change_date` (string): Only order items last changed on this date, yyyy-mm-dd (up to 3 months back).
- `page` (integer): Page number, from 1 (default 1). Use the previous reply's next_page.
- `status` (string): Order status (default OPEN).

### `bol_get_order` (~74 tokens)

Get an order

One order by id: the order items (with their order item ids), prices, quantities, fulfilment, the buyer's shipment and billing details (personal data) and the latest delivery dates. GET /retailer/orders/{order-id}.

Input parameters:

- `order_id` (string, required): The bol order id (from bol_list_orders).

### `bol_list_shipments` (~124 tokens)

List shipments

List shipments up to 3 months old, newest first (50 per page): shipment id, date, the order items shipped and the transport (track and trace). Filter by order_id OR fulfilment_method (order_id wins). GET /retailer/shipments.

Input parameters:

- `fulfilment_method` (string): FBR or FBB (ignored when order_id is given).
- `order_id` (string): Only the shipments of this order.
- `page` (integer): Page number, from 1 (default 1). Use the previous reply's next_page.

### `bol_get_shipment` (~65 tokens)

Get a shipment

One shipment by id: shipment date, order items, transport and track and trace details, the buyer's delivery address (personal data). GET /retailer/shipments/{shipment-id}.

Input parameters:

- `shipment_id` (string, required): The shipment id (from bol_list_shipments).

### `bol_list_returns` (~131 tokens)

List returns

List customer returns (RMA): return id, registration date, fulfilment method and the return items with their handling status. Set handled explicitly: true = handled returns (newest first), false = returns still to handle (oldest first); bol documents no default. GET /retailer/returns.

Input parameters:

- `fulfilment_method` (string): FBR or FBB.
- `handled` (boolean): true = handled returns, false = returns still to handle. Set it explicitly.
- `page` (integer): Page number, from 1 (default 1). Use the previous reply's next_page.

### `bol_get_return` (~55 tokens)

Get a return

One return by id: return items, reasons, handling results, the customer's details (personal data). GET /retailer/returns/{return-id}.

Input parameters:

- `return_id` (string, required): The return id (from bol_list_returns).

### `bol_list_offers` (~217 tokens)

List offers

List the seller's offers (Offers API v11): offer id, EAN, condition, price bundles, stock, fulfilment, on-hold flag and last-modified time. Filter by offer ids, EANs, your reference, for-sale state or last-modified time. Cursor paging: pass the previous reply's next_cursor. GET /retailer/offers (v11).

Input parameters:

- `cursor` (string): The next_cursor of the previous reply.
- `eans` (array): Only these EANs.
- `for_sale` (boolean): true = only offers currently for sale, false = only those not for sale.
- `last_modified_since` (string): Only offers modified since this UTC time, e.g. 2026-10-01T08:00:00Z.
- `offer_ids` (array): Only these offer ids (UUIDs).
- `page_size` (integer): Offers per page, 1-100.
- `reference` (string): Only offers with this seller reference.

### `bol_get_offer` (~66 tokens)

Get an offer

One offer by id (Offers API v11): condition, price bundles, stock, fulfilment, countries, product. GET /retailer/offers/{offer-id} (v11).

Input parameters:

- `offer_id` (string, required): The offer id (UUID, from bol_list_offers).

### `bol_get_offer_not_for_sale_reasons` (~93 tokens)

Why an offer is not for sale

The reasons an offer is not for sale per country (an offer that is for sale everywhere has none) (content, price, stock, shop status, selling rights, on hold, assortment policy), each with a code and description. GET /retailer/offers/{offer-id}/not-for-sale-reasons (v11).

Input parameters:

- `offer_id` (string, required): The offer id (UUID).

### `bol_update_offer` (~250 tokens)

Update an offer

WRITE: change an existing offer on bol (Offers API v11 PATCH): put it on hold or back on sale, set your reference, replace its price bundles and/or its own stock. Only the fields you pass change. A price or stock change goes live on bol.com. Use bol_list_offers first to see the current values. PATCH /retailer/offers/{offer-id} (v11).

Input parameters:

- `offer_id` (string, required): The offer id (UUID).
- `on_hold` (boolean): true = take the offer off sale (hold), false = list it for sale again.
- `prices` (array): Replaces ALL price bundles: [{quantity: 1, unit_price: 9.99}, ...]. The first quantity must be 1; quantities rise, unit prices (incl. VAT, 2 decimals) fall.
- `reference` (string): Your own reference for the offer (max 100 chars; empty clears it).
- `stock_amount` (integer): Stock in your own warehouse (not FBB stock).
- `stock_managed_by_retailer` (boolean): true = you manage stock levels; false = bol corrects stock for open orders.

### `bol_list_inventory` (~148 tokens)

List FBB inventory

Fulfilment by bol (FBB/LVB) inventory only, not your own stock (50 per page): EAN, title, regular and graded stock, and the stock level. Filter by EAN or title, stock level, stock type or a quantity range. GET /retailer/inventory.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Use the previous reply's next_page.
- `quantity` (string): Quantity range "min-max", e.g. "0-10".
- `query` (string): EAN or product title.
- `state` (string): Stock type filter.
- `stock` (string): Stock level filter.

### `bol_list_invoices` (~108 tokens)

List invoices

List bol invoices (the seller's statements from bol), by default the past 4 weeks: invoice id, issue date, type, period and the media types it can be downloaded in. Pass both dates to look further back (max 31 days). GET /retailer/invoices.

Input parameters:

- `period_end_date` (string): Period end, yyyy-mm-dd.
- `period_start_date` (string): Period start, yyyy-mm-dd (give both dates, max 31 days apart).

### `bol_get_invoice_specification` (~95 tokens)

Get an invoice specification

The transactions (sales, commissions, shipping, returns) behind one bol invoice, as JSON, up to 25,000 lines per page. GET /retailer/invoices/{invoice-id}/specification.

Input parameters:

- `invoice_id` (string, required): The invoice id (from bol_list_invoices).
- `page` (integer): Page number, from 1 (default 1). Use the previous reply's next_page.

### `bol_get_commissions` (~77 tokens)

Calculate commissions

Calculate bol's commission for up to 100 products: for each EAN, a selling price and optionally a condition, returns the fixed amount, the percentage, total cost and any reductions. Read-only (a POST because of the request body). POST /retailer/commission.

Input parameters:

- `products` (array, required): The products to calculate.

### `bol_get_competing_offers` (~127 tokens)

Competing offers for an EAN

The offers on bol.com for one EAN from all retailers: price, condition, fulfilment, the best offer. Optionally only the best offer or one condition and country. GET /retailer/products/{ean}/offers.

Input parameters:

- `best_offer_only` (boolean): true = only the best offer.
- `condition` (string): Offer condition filter.
- `country_code` (string): Webshop country (default NL).
- `ean` (string, required): EAN (8 to 14 digits).
- `page` (integer): Page number, 1-200.

### `bol_get_performance_indicator` (~105 tokens)

Get a performance indicator

The seller's weekly measurements of one bol performance indicator (cancellations, fulfilment, phone availability, response time, case/item ratio, track and trace, returns, reviews) for an ISO year and week. GET /retailer/insights/performance/indicator.

Input parameters:

- `name` (string, required): The indicator.
- `week` (integer, required): ISO week number, 1-53.
- `year` (integer, required): Year, e.g. 2026.

### `bol_get_sales_forecast` (~77 tokens)

Get a sales forecast

bol's sales forecast for one offer: expected sales on the whole bol.com platform for the next 1-12 weeks. GET /retailer/insights/sales-forecast.

Input parameters:

- `offer_id` (string, required): The offer id (UUID).
- `weeks_ahead` (integer, required): Weeks ahead, 1-12.

### `bol_get_process_status` (~71 tokens)

Get a process status

The status of an asynchronous bol process (a write that answered 202) by its process status id: PENDING, SUCCESS, FAILURE or TIMEOUT, with the error message on failure. GET /shared/process-status/{process-status-id}.

Input parameters:

- `process_status_id` (string, required): The process status id.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-bol-com/bol-com#diagnostics

## Score history

- 2026-11-05: 18
- 2026-11-04: 18
- 2026-11-03: 18
- 2026-11-02: 18
- 2026-11-01: 66
- 2026-10-31: 66
- 2026-10-30: 62

## Common questions

### What is the bol.com MCP by usefulapi server?

bol.com MCP by usefulapi is listed in the public MCP registry as io.usefulapi/bol-com. Read bol orders, returns, offers and inventory; update an offer’s stock, price or sale status. This page covers its hosted endpoint (https://bol-com.usefulapi.io/mcp).

### Is the bol.com MCP by usefulapi server safe to use?

bol.com MCP by usefulapi scores 18 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the bol.com MCP by usefulapi server expose?

bol.com MCP by usefulapi exposes 18 tools: bol_list_orders, bol_get_order, bol_list_shipments, bol_get_shipment, bol_list_returns, and 13 more. Their descriptions and schemas cost roughly 2,082 tokens of context every time the server is loaded.

### Does the bol.com MCP by usefulapi server require authentication?

Its publisher declares no required credentials for bol.com MCP by usefulapi. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the bol.com MCP by usefulapi server still maintained?

bol.com MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://bol-com.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/bol-com/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-bol-com/bol-com.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-bol-com/bol-com.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-bol-com/bol-com
