MCP Hub
Back to servers

bol-mcp

MCP server for managing orders, offers, shipments, returns, and invoices via the bol.com Retailer API

npm75/wk
Updated
Mar 5, 2026

Quick Install

npx -y bol-mcp

bol-mcp

npm version License: MIT Node.js MCP CI Coverage

Een Model Context Protocol (MCP) server voor de bol.com Retailer API. Beheer bestellingen, aanbiedingen, verzendingen, retouren, facturen en commissies — allemaal via natuurlijke taal in je AI-app.

Let op: Dit is een onofficieel, community-onderhouden project en is niet verbonden aan of goedgekeurd door bol.com.

A community-built Model Context Protocol (MCP) server for the bol.com Retailer API. Manage orders, offers, shipments, returns, invoices, and commissions — all through natural language via any MCP-compatible AI client.

Note: This is an unofficial, community-maintained project and is not affiliated with or endorsed by bol.com.

Snel starten

Je hoeft deze repo niet te clonen.

  1. Zorg dat Node.js 20+ is geïnstalleerd (je AI-app draait npx op je machine)
  2. Haal bol.com API-gegevens op (zie Authentication)
  3. Voeg de server toe als MCP server in je AI-app (kopieer onderstaande configuratie)
  4. Stel vragen in gewoon Nederlands (zie Voorbeelden)

Quick Start (Non-Developers)

You do not need to clone this repo.

  1. Make sure Node.js 20+ is installed (your AI app will run npx on your machine)
  2. Get bol.com API credentials (see Authentication)
  3. Add the server to your AI app as an MCP server (copy/paste config below)
  4. Ask in plain language (see Example Usage)

Add To Claude Desktop (Also Works In Cowork)

Cowork runs inside Claude Desktop and uses the same connected MCP servers and permissions.

  1. Open your Claude Desktop MCP config file:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\\Claude\\claude_desktop_config.json
  2. Add this server entry (or merge it into your existing mcpServers):
{
  "mcpServers": {
    "bol-mcp": {
      "command": "npx",
      "args": ["-y", "bol-mcp"],
      "env": {
        "BOL_CLIENT_ID": "your-client-id",
        "BOL_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}
  1. Restart Claude Desktop

Add To Other AI Apps

Most MCP apps have a screen like "Add MCP Server" where you can fill in:

  • Command: npx
  • Args: -y bol-mcp
  • Env: BOL_CLIENT_ID=your-client-id and BOL_CLIENT_SECRET=your-client-secret

If your app wants JSON, paste this and adapt the top-level key name to your client (common ones are mcpServers, servers, or context_servers):

{
  "<servers-key>": {
    "bol-mcp": {
      "command": "npx",
      "args": ["-y", "bol-mcp"],
      "env": {
        "BOL_CLIENT_ID": "your-client-id",
        "BOL_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Troubleshooting

  • Error: Missing required env vars: BOL_CLIENT_ID, BOL_CLIENT_SECRET
    • Fix: add both env vars to the MCP server config and restart your app.
  • Error: npx: command not found or server fails to start
    • Fix: install Node.js 20+ and restart your app.
  • You can connect, but API calls fail with 401/403
    • Fix: verify client ID/secret are correct and active in the bol.com Seller Dashboard.

API Coverage

bol.com exposes several APIs for different purposes. This MCP server covers the Retailer API v10 and the Shared API — the core APIs for marketplace sellers managing their day-to-day operations.

APIStatusDescription
Retailer API v10CoveredCore seller operations: orders, offers, shipments, returns, invoices, commissions, products, inventory, promotions, replenishments, subscriptions, and more
Shared API v10CoveredCross-API utilities for tracking asynchronous process statuses
Offer API v11Not coveredNext-generation offer management (v11 successor to the Retailer API offer endpoints)
Advertiser API v11Not coveredSponsored product campaigns, ad groups, keywords, budgets, and performance reporting
Economic Operators APINot coveredEconomic operator information and regulatory compliance data

The Retailer API v10 offer endpoints included in this MCP are fully functional. The Offer API v11 is a newer version with an updated endpoint structure — support may be added in a future release.

Features

  • 76 tools across 17 categories covering the bol.com Retailer API v10
  • Order management — list, inspect, and cancel orders with status and fulfilment filtering
  • Offer CRUD — create, update, delete offers with price/stock management and export reports
  • Shipment handling — create shipments with partial quantity support and invoice requests
  • Return processing — list, inspect, create, and handle returns
  • Invoice access — retrieve invoices by period with full UBL detail and specifications
  • Commission calculator — single and bulk commission rates by EAN, condition, and price
  • Product catalog — browse categories, search products, view competing offers, ratings, and assets
  • Product content — manage catalog content, upload reports, and chunk recommendations
  • Insights — offer visits, buy box %, performance indicators, product ranks, sales forecasts, and search terms
  • Inventory — LVB/FBB inventory levels with filtering
  • Promotions — list and inspect promotions and their products
  • Replenishments — full FBB replenishment lifecycle: create, update, delivery dates, pickup slots, labels
  • Retailers — retailer account information
  • Shipping labels — delivery options and label creation
  • Subscriptions — webhook/pubsub/SQS event subscriptions with signature key management
  • Transports — update transport tracking information
  • Process status — track asynchronous operations by ID, entity, or in bulk
  • OAuth2 authentication with automatic token refresh
  • Input validation via Zod schemas on every tool for safe, predictable operations
  • Response caching with configurable TTL and automatic invalidation on writes
  • Rate limit handling with exponential backoff and Retry-After header support
  • Toolset filtering to expose only the tool categories you need
  • Docker support for containerized deployment
  • Actionable error messages with context-aware recovery suggestions

Supported Clients

Advanced setup and supported clients (expand)

This MCP server is not tied to one coding agent. It works with any MCP-compatible client or agent runtime that can start a stdio MCP server.

Client / runtimeDocs
Claude CodeMCP in Claude Code
Anthropic API (Messages API)Remote MCP servers
Codex CLI (OpenAI)Codex CLI docs
Gemini CLI (Google)Gemini CLI MCP server docs
VS Code (Copilot)Use MCP servers in VS Code
Claude DesktopMCP in Claude Desktop
CursorCursor docs
WindsurfWindsurf MCP docs
ClineCline MCP docs
ZedZed context servers docs
Any other MCP hostUse command/args/env from Generic MCP Server Config

Claude Ecosystem Notes

Claude currently has multiple MCP-related concepts that are easy to mix up:

  • Local MCP servers (Claude Desktop): defined in claude_desktop_config.json and started on your machine (docs).
  • Cowork: reuses the MCP servers connected in Claude Desktop (docs).
  • Connectors: remote MCP integrations managed in Claude (docs).
  • Cowork plugins: Claude-specific workflow packaging (instructions + tools/data integrations) (docs). Useful in Claude, but not portable as a generic MCP server config for other agent clients.

Verified against vendor docs on 2026-03-05.

Setup (Power Users)

If Quick Start worked in your client, you can skip this section. These are additional per-client setup options and CLI one-liners.

Generic MCP Server Config

Use this as the baseline in any host:

  • Command: npx
  • Args: ["-y", "bol-mcp"]
  • Required env vars: BOL_CLIENT_ID, BOL_CLIENT_SECRET
  • Optional env vars: BOL_CACHE_TTL, BOL_MAX_RETRIES, BOL_TOOLSETS (see Configuration)

Minimal JSON (adapt the top-level key to your host):

{
  "<servers-key>": {
    "bol-mcp": {
      "command": "npx",
      "args": ["-y", "bol-mcp"],
      "env": {
        "BOL_CLIENT_ID": "your-client-id",
        "BOL_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Host key mapping:

HostTop-level keyNotes
VS CodeserversAdd "type": "stdio" on the server object
Claude Desktop / Cursor / Windsurf / ClinemcpServersSame command/args/env block
Zedcontext_serversSame command/args/env block
Codex CLI (TOML)mcp_serversUses TOML, shown below

Claude Code

claude mcp add --scope user bol-mcp \
  --env BOL_CLIENT_ID=your-client-id \
  --env BOL_CLIENT_SECRET=your-client-secret \
  -- npx -y bol-mcp

Codex CLI (OpenAI)

codex mcp add bol-mcp \
  --env BOL_CLIENT_ID=your-client-id \
  --env BOL_CLIENT_SECRET=your-client-secret \
  -- npx -y bol-mcp

~/.codex/config.toml alternative:

[mcp_servers.bol-mcp]
command = "npx"
args = ["-y", "bol-mcp"]
env = { "BOL_CLIENT_ID" = "your-client-id", "BOL_CLIENT_SECRET" = "your-client-secret" }

Gemini CLI (Google)

gemini mcp add bol-mcp -- npx -y bol-mcp

Set BOL_CLIENT_ID and BOL_CLIENT_SECRET in ~/.gemini/settings.json.

VS Code (Copilot)

Open Command Palette (Cmd+Shift+P / Ctrl+Shift+P) > MCP: Add Server > Command (stdio), or use .vscode/mcp.json with top-level key servers and the canonical command/args/env block from Generic MCP Server Config.

Claude Desktop + Cowork / Cursor / Windsurf / Cline / Zed

Cowork runs inside Claude Desktop and uses the same connected MCP servers and permissions. Configure once in Claude Desktop, then the server is available in Cowork.

Use the canonical config block and place it in the host file below with the matching top-level key.

ClientConfig locationTop-level key
Claude Desktop (macOS)~/Library/Application Support/Claude/claude_desktop_config.jsonmcpServers
Claude Desktop (Windows)%APPDATA%\\Claude\\claude_desktop_config.jsonmcpServers
Cursor (project).cursor/mcp.jsonmcpServers
Cursor (global)~/.cursor/mcp.jsonmcpServers
Windsurf~/.codeium/windsurf/mcp_config.jsonmcpServers
ClineMCP settings UImcpServers
Zed (macOS/Linux)~/.zed/settings.json or ~/.config/zed/settings.jsoncontext_servers

Docker

docker run -i --rm \
  -e BOL_CLIENT_ID=your-client-id \
  -e BOL_CLIENT_SECRET=your-client-secret \
  ghcr.io/bartwaardenburg/bol-mcp

Other MCP Clients

Use the values from Generic MCP Server Config.

Terminology

What is portable across hosts:

  • MCP server runtime settings (command, args, env)
  • Transport model (stdio command server)
  • Tool names and tool schemas exposed by this server

What is host/vendor-specific (not portable as-is):

Security Notes

  • Trust model: Any prompt or agent allowed to call this MCP server can execute bol.com API actions with the configured credentials.
  • Least-privilege credentials: Use separate bol.com API credentials per environment/team/use case and rotate/revoke when access changes.
  • Write-action approvals: Enable host-side approvals for mutating tools (create_*, update_*, delete_*, cancel_*, handle_return, shipment/replenishment actions).
  • Team config governance: Keep shared MCP config in version control, require review for changes to command/args/env/toolset filtering, and keep secrets in a vault or host secret manager (not in plain-text repo files).

Configuration

Required

VariableDescription
BOL_CLIENT_IDYour bol.com API client ID
BOL_CLIENT_SECRETYour bol.com API client secret

Generate your credentials in the bol.com Partner Platform under Settings > API Settings.

Optional

VariableDescriptionDefault
BOL_CACHE_TTLResponse cache lifetime in seconds. Set to 0 to disable caching.120
BOL_MAX_RETRIESMaximum retry attempts for rate-limited (429) requests with exponential backoff.3
BOL_TOOLSETSComma-separated list of tool categories to enable (see Toolset Filtering).All toolsets

Authentication

This server authenticates with the bol.com Retailer API using the OAuth2 client credentials flow. It automatically obtains and refreshes access tokens — you only need to provide your client ID and secret.

For full details, see the official bol.com authentication documentation.

Creating Your Credentials

  1. Log in to the bol.com Seller Dashboard
  2. Navigate to Settings > Services > API Settings
  3. Provide technical contact details (required before creating credentials)
  4. Create a new API credential set
  5. Copy the Client ID and Client Secret

How It Works

The server exchanges your credentials for a short-lived access token via the bol.com token endpoint:

  • Endpoint: POST https://login.bol.com/token
  • Auth: HTTP Basic with base64(clientId:clientSecret)
  • Grant type: client_credentials
  • Token lifetime: ~5 minutes (299 seconds)

Tokens are automatically reused and refreshed before expiry — no manual token management required.

Security Best Practices

See Security Notes. bol.com-specific credential hygiene:

  • Never share your client ID or client secret, and don't hardcode them in source files
  • Use environment variables or host secret stores to pass credentials
  • Revoke and replace credentials immediately if compromise is suspected

Available Tools

Orders

ToolDescription
list_ordersList orders with optional status and fulfilment method filtering
get_orderGet detailed order information by order ID
cancel_order_itemsCancel order items with a reason code

Offers

ToolDescription
get_offerGet offer details by offer ID
create_offerCreate a new offer (EAN, condition, price, stock, fulfilment method)
update_offerUpdate offer details (reference, onHoldByRetailer, unknown product title, fulfilment)
delete_offerDelete an offer permanently
update_offer_priceUpdate the pricing for an offer
update_offer_stockUpdate the stock level for an offer
request_offer_exportRequest a CSV export of all offers
get_offer_exportDownload a previously requested offer export
request_unpublished_offer_reportRequest a report of unpublished offers
get_unpublished_offer_reportDownload a previously requested unpublished offer report

Shipments

ToolDescription
list_shipmentsList shipments with optional order ID and fulfilment method filtering
get_shipmentGet shipment details by shipment ID
create_shipmentCreate a shipment for order items (supports partial quantities)
get_shipment_invoice_requestsList invoice requests for shipments

Returns

ToolDescription
list_returnsList returns with optional handled status and fulfilment method filtering
get_returnGet return details by RMA ID
handle_returnHandle/process a return (accept, reject, repair, etc.)
create_returnCreate a return for an order item

Invoices

ToolDescription
list_invoicesList invoices by date period (max 31 days, format: YYYY-MM-DD)
get_invoiceGet full invoice details by invoice ID
get_invoice_specificationGet detailed invoice specification/line items

Commissions

ToolDescription
get_commissionCalculate the commission for a product by EAN, condition, and unit price
get_bulk_commissionsCalculate commissions for multiple products at once

Products

ToolDescription
get_product_categoriesBrowse product categories
get_product_listSearch and browse products by category or search term
get_product_list_filtersGet available product list filters
get_product_assetsGet product images and assets by EAN
get_competing_offersGet competing offers for a product by EAN
get_product_placementGet product placement information
get_price_star_boundariesGet price star boundaries for a product
get_product_idsGet product identifiers by EAN
get_product_ratingsGet product ratings and reviews

Product Content

ToolDescription
get_catalog_productGet catalog product details by EAN
create_product_contentCreate or update product content
get_upload_reportGet product content upload report
get_chunk_recommendationsGet product content recommendations

Insights

ToolDescription
get_offer_insightsGet offer visit and buy box insights
get_performance_indicatorsGet retailer performance indicators
get_product_ranksGet product search and browse rankings
get_sales_forecastGet sales forecast for an offer
get_search_termsGet search term volume data

Inventory

ToolDescription
get_inventoryGet LVB/FBB inventory with filtering by stock level, state, and EAN

Promotions

ToolDescription
list_promotionsList available promotions by type
get_promotionGet promotion details
get_promotion_productsGet products in a promotion

Replenishments

ToolDescription
list_replenishmentsList FBB replenishments with filtering
get_replenishmentGet replenishment details
create_replenishmentCreate a new FBB replenishment
update_replenishmentUpdate or cancel a replenishment
get_delivery_datesGet available FBB delivery dates
get_pickup_time_slotsGet pickup time slots for a delivery date
request_product_destinationsRequest product warehouse destinations
get_product_destinationsGet product warehouse destinations

Retailers

ToolDescription
get_retailer_informationGet retailer account information

Shipping Labels

ToolDescription
get_delivery_optionsGet available shipping/delivery options for order items
create_shipping_labelCreate a shipping label for order items

Subscriptions

ToolDescription
list_subscriptionsList all event subscriptions
get_subscriptionGet subscription details
create_subscriptionCreate an event subscription (webhook, GCP Pub/Sub, or AWS SQS)
update_subscriptionUpdate an event subscription
delete_subscriptionDelete an event subscription
test_subscriptionSend a test notification to a subscription
get_signature_keysGet public keys for webhook signature validation

Transports

ToolDescription
update_transportUpdate transport/tracking information

Process Status

ToolDescription
get_process_statusGet the status of an asynchronous process by process status ID
get_process_status_by_entityGet process statuses by entity ID and event type
get_process_status_bulkGet the status of multiple processes by their IDs (up to 1000)

Toolset Filtering

Reduce context window usage by enabling only the tool categories you need. Set the BOL_TOOLSETS environment variable to a comma-separated list:

BOL_TOOLSETS=orders,offers
ToolsetTools included
ordersOrder listing, details, and cancellation
offersFull offer CRUD, price/stock management, export reports
shipmentsShipment listing, details, creation, and invoice requests
returnsReturn listing, details, creation, and handling
invoicesInvoice listing, details, and specifications
commissionsSingle and bulk commission calculation
productsProduct categories, search, assets, competing offers, ratings, placement
product-contentCatalog products, content creation, upload reports, recommendations
insightsOffer insights, performance indicators, product ranks, sales forecasts, search terms
inventoryLVB/FBB inventory levels
promotionsPromotion listing and product details
replenishmentsFBB replenishment lifecycle, delivery dates, pickup slots, destinations
retailersRetailer account information
shipping-labelsDelivery options and shipping label creation
subscriptionsEvent subscription management and signature keys
transportsTransport tracking updates
process-statusAsynchronous process status tracking (by ID, entity, or bulk)

When not set, all toolsets are enabled. Invalid names are ignored; if all names are invalid, all toolsets are enabled as a fallback.

Voorbeelden

Eenmaal verbonden kun je in gewoon Nederlands vragen stellen:

  • "Toon al mijn openstaande bestellingen"
  • "Geef de details van bestelling 1234567890"
  • "Maak een aanbieding voor EAN 9781234567890 voor 19,99 EUR met 50 stuks op voorraad"
  • "Werk de voorraad bij voor aanbieding abc-123 naar 25 stuks"
  • "Verzend orderitems voor bestelling 1234567890 met transportcode TNT"
  • "Toon alle onbehandelde retouren"
  • "Wat is de commissie op EAN 9781234567890 bij 29,99 EUR?"
  • "Toon mijn facturen van januari 2025"

Example Usage

Once connected, you can interact with the bol.com API using natural language:

  • "List all my open orders"
  • "Show me the details of order 1234567890"
  • "Create an offer for EAN 9781234567890 at 19.99 EUR with 50 units in stock"
  • "Update the stock for offer abc-123 to 25 units"
  • "Ship order items for order 1234567890 with transport code TNT"
  • "Show me all unhandled returns"
  • "What's the commission on EAN 9781234567890 at 29.99 EUR?"
  • "List my invoices for January 2025"

Community

Development

# Install dependencies
pnpm install

# Run in development mode
pnpm dev

# Build for production
pnpm build

# Run tests
pnpm test

# Type check
pnpm typecheck

Project Structure

src/
  index.ts              # Entry point (stdio transport)
  server.ts             # MCP server setup and toolset filtering
  bol-client.ts         # bol.com API HTTP client with OAuth2, caching, and retry
  cache.ts              # TTL-based in-memory response cache
  types.ts              # TypeScript interfaces for bol.com API v10
  tool-result.ts        # Error formatting with recovery suggestions
  update-checker.ts     # NPM update notifications
  tools/
    orders.ts           # Order listing, details, and cancellation
    offers.ts           # Offer CRUD, pricing, stock, and export reports
    shipments.ts        # Shipment listing, details, creation, and invoices
    returns.ts          # Return listing, details, creation, and handling
    invoices.ts         # Invoice listing, details, and specifications
    commissions.ts      # Single and bulk commission calculation
    products.ts         # Product catalog, search, competing offers, ratings
    product-content.ts  # Catalog content management and recommendations
    insights.ts         # Offer insights, performance, ranks, forecasts
    inventory.ts        # LVB/FBB inventory management
    promotions.ts       # Promotion listing and products
    replenishments.ts   # FBB replenishment lifecycle
    retailers.ts        # Retailer account information
    shipping-labels.ts  # Delivery options and label creation
    subscriptions.ts    # Event subscription management
    transports.ts       # Transport tracking updates
    process-status.ts   # Asynchronous process status tracking

Requirements

  • Node.js >= 20
  • A bol.com seller account with API credentials

License

MIT - see LICENSE for details.

Reviews

No reviews yet

Sign in to write a review