loading…
Search for a command to run...
loading…
MCP server for the bol.com Retailer API that enables managing orders, offers, shipments, returns, invoices, and commissions via natural language.
MCP server for the bol.com Retailer API that enables managing orders, offers, shipments, returns, invoices, and commissions via natural language.
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.
Je hoeft deze repo niet te clonen.
npx op je machine)You do not need to clone this repo.
npx on your machine)Cowork runs inside Claude Desktop and uses the same connected MCP servers and permissions.
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\\Claude\\claude_desktop_config.jsonmcpServers):{
"mcpServers": {
"bol-mcp": {
"command": "npx",
"args": ["-y", "bol-mcp"],
"env": {
"BOL_CLIENT_ID": "your-client-id",
"BOL_CLIENT_SECRET": "your-client-secret"
}
}
}
}
Most MCP apps have a screen like "Add MCP Server" where you can fill in:
npx-y bol-mcpBOL_CLIENT_ID=your-client-id and BOL_CLIENT_SECRET=your-client-secretIf 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"
}
}
}
}
Missing required env vars: BOL_CLIENT_ID, BOL_CLIENT_SECRETnpx: command not found or server fails to start401/403bol.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.
| API | Status | Description |
|---|---|---|
| Retailer API v10 | Covered | Core seller operations: orders, offers, shipments, returns, invoices, commissions, products, inventory, promotions, replenishments, subscriptions, and more |
| Shared API v10 | Covered | Cross-API utilities for tracking asynchronous process statuses |
| Offer API v11 | Not covered | Next-generation offer management (v11 successor to the Retailer API offer endpoints) |
| Advertiser API v11 | Not covered | Sponsored product campaigns, ad groups, keywords, budgets, and performance reporting |
| Economic Operators API | Not covered | Economic 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.
Retry-After header supportThis 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 / runtime | Docs |
|---|---|
| Claude Code | MCP 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 Desktop | MCP in Claude Desktop |
| Cursor | Cursor docs |
| Windsurf | Windsurf MCP docs |
| Cline | Cline MCP docs |
| Zed | Zed context servers docs |
| Any other MCP host | Use command/args/env from Generic MCP Server Config |
Claude currently has multiple MCP-related concepts that are easy to mix up:
claude_desktop_config.json and started on your machine (docs).Verified against vendor docs on 2026-03-05.
If Quick Start worked in your client, you can skip this section. These are additional per-client setup options and CLI one-liners.
Use this as the baseline in any host:
npx["-y", "bol-mcp"]BOL_CLIENT_ID, BOL_CLIENT_SECRETBOL_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:
| Host | Top-level key | Notes |
|---|---|---|
| VS Code | servers |
Add "type": "stdio" on the server object |
| Claude Desktop / Cursor / Windsurf / Cline | mcpServers |
Same command/args/env block |
| Zed | context_servers |
Same command/args/env block |
| Codex CLI (TOML) | mcp_servers |
Uses TOML, shown below |
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 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 mcp add bol-mcp -- npx -y bol-mcp
Set BOL_CLIENT_ID and BOL_CLIENT_SECRET in ~/.gemini/settings.json.
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.
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.
| Client | Config location | Top-level key |
|---|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
mcpServers |
| Claude Desktop (Windows) | %APPDATA%\\Claude\\claude_desktop_config.json |
mcpServers |
| Cursor (project) | .cursor/mcp.json |
mcpServers |
| Cursor (global) | ~/.cursor/mcp.json |
mcpServers |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
mcpServers |
| Cline | MCP settings UI | mcpServers |
| Zed (macOS/Linux) | ~/.zed/settings.json or ~/.config/zed/settings.json |
context_servers |
docker run -i --rm \
-e BOL_CLIENT_ID=your-client-id \
-e BOL_CLIENT_SECRET=your-client-secret \
ghcr.io/bartwaardenburg/bol-mcp
Use the values from Generic MCP Server Config.
What is portable across hosts:
command, args, env)stdio command server)What is host/vendor-specific (not portable as-is):
servers, mcpServers, context_servers, mcp_servers)create_*, update_*, delete_*, cancel_*, handle_return, shipment/replenishment actions).| Variable | Description |
|---|---|
BOL_CLIENT_ID |
Your bol.com API client ID |
BOL_CLIENT_SECRET |
Your bol.com API client secret |
Generate your credentials in the bol.com Partner Platform under Settings > API Settings.
| Variable | Description | Default |
|---|---|---|
BOL_CACHE_TTL |
Response cache lifetime in seconds. Set to 0 to disable caching. |
120 |
BOL_MAX_RETRIES |
Maximum retry attempts for rate-limited (429) requests with exponential backoff. | 3 |
BOL_TOOLSETS |
Comma-separated list of tool categories to enable (see Toolset Filtering). | All toolsets |
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.
The server exchanges your credentials for a short-lived access token via the bol.com token endpoint:
POST https://login.bol.com/tokenbase64(clientId:clientSecret)client_credentialsTokens are automatically reused and refreshed before expiry — no manual token management required.
See Security Notes. bol.com-specific credential hygiene:
| Tool | Description |
|---|---|
list_orders |
List orders with optional status and fulfilment method filtering |
get_order |
Get detailed order information by order ID |
cancel_order_items |
Cancel order items with a reason code |
| Tool | Description |
|---|---|
get_offer |
Get offer details by offer ID |
create_offer |
Create a new offer (EAN, condition, price, stock, fulfilment method) |
update_offer |
Update offer details (reference, onHoldByRetailer, unknown product title, fulfilment) |
delete_offer |
Delete an offer permanently |
update_offer_price |
Update the pricing for an offer |
update_offer_stock |
Update the stock level for an offer |
request_offer_export |
Request a CSV export of all offers |
get_offer_export |
Download a previously requested offer export |
request_unpublished_offer_report |
Request a report of unpublished offers |
get_unpublished_offer_report |
Download a previously requested unpublished offer report |
| Tool | Description |
|---|---|
list_shipments |
List shipments with optional order ID and fulfilment method filtering |
get_shipment |
Get shipment details by shipment ID |
create_shipment |
Create a shipment for order items (supports partial quantities) |
get_shipment_invoice_requests |
List invoice requests for shipments |
| Tool | Description |
|---|---|
list_returns |
List returns with optional handled status and fulfilment method filtering |
get_return |
Get return details by RMA ID |
handle_return |
Handle/process a return (accept, reject, repair, etc.) |
create_return |
Create a return for an order item |
| Tool | Description |
|---|---|
list_invoices |
List invoices by date period (max 31 days, format: YYYY-MM-DD) |
get_invoice |
Get full invoice details by invoice ID |
get_invoice_specification |
Get detailed invoice specification/line items |
| Tool | Description |
|---|---|
get_commission |
Calculate the commission for a product by EAN, condition, and unit price |
get_bulk_commissions |
Calculate commissions for multiple products at once |
| Tool | Description |
|---|---|
get_product_categories |
Browse product categories |
get_product_list |
Search and browse products by category or search term |
get_product_list_filters |
Get available product list filters |
get_product_assets |
Get product images and assets by EAN |
get_competing_offers |
Get competing offers for a product by EAN |
get_product_placement |
Get product placement information |
get_price_star_boundaries |
Get price star boundaries for a product |
get_product_ids |
Get product identifiers by EAN |
get_product_ratings |
Get product ratings and reviews |
| Tool | Description |
|---|---|
get_catalog_product |
Get catalog product details by EAN |
create_product_content |
Create or update product content |
get_upload_report |
Get product content upload report |
get_chunk_recommendations |
Get product content recommendations |
| Tool | Description |
|---|---|
get_offer_insights |
Get offer visit and buy box insights |
get_performance_indicators |
Get retailer performance indicators |
get_product_ranks |
Get product search and browse rankings |
get_sales_forecast |
Get sales forecast for an offer |
get_search_terms |
Get search term volume data |
| Tool | Description |
|---|---|
get_inventory |
Get LVB/FBB inventory with filtering by stock level, state, and EAN |
| Tool | Description |
|---|---|
list_promotions |
List available promotions by type |
get_promotion |
Get promotion details |
get_promotion_products |
Get products in a promotion |
| Tool | Description |
|---|---|
list_replenishments |
List FBB replenishments with filtering |
get_replenishment |
Get replenishment details |
create_replenishment |
Create a new FBB replenishment |
update_replenishment |
Update or cancel a replenishment |
get_delivery_dates |
Get available FBB delivery dates |
get_pickup_time_slots |
Get pickup time slots for a delivery date |
request_product_destinations |
Request product warehouse destinations |
get_product_destinations |
Get product warehouse destinations |
| Tool | Description |
|---|---|
get_retailer_information |
Get retailer account information |
| Tool | Description |
|---|---|
get_delivery_options |
Get available shipping/delivery options for order items |
create_shipping_label |
Create a shipping label for order items |
| Tool | Description |
|---|---|
list_subscriptions |
List all event subscriptions |
get_subscription |
Get subscription details |
create_subscription |
Create an event subscription (webhook, GCP Pub/Sub, or AWS SQS) |
update_subscription |
Update an event subscription |
delete_subscription |
Delete an event subscription |
test_subscription |
Send a test notification to a subscription |
get_signature_keys |
Get public keys for webhook signature validation |
| Tool | Description |
|---|---|
update_transport |
Update transport/tracking information |
| Tool | Description |
|---|---|
get_process_status |
Get the status of an asynchronous process by process status ID |
get_process_status_by_entity |
Get process statuses by entity ID and event type |
get_process_status_bulk |
Get the status of multiple processes by their IDs (up to 1000) |
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
| Toolset | Tools included |
|---|---|
orders |
Order listing, details, and cancellation |
offers |
Full offer CRUD, price/stock management, export reports |
shipments |
Shipment listing, details, creation, and invoice requests |
returns |
Return listing, details, creation, and handling |
invoices |
Invoice listing, details, and specifications |
commissions |
Single and bulk commission calculation |
products |
Product categories, search, assets, competing offers, ratings, placement |
product-content |
Catalog products, content creation, upload reports, recommendations |
insights |
Offer insights, performance indicators, product ranks, sales forecasts, search terms |
inventory |
LVB/FBB inventory levels |
promotions |
Promotion listing and product details |
replenishments |
FBB replenishment lifecycle, delivery dates, pickup slots, destinations |
retailers |
Retailer account information |
shipping-labels |
Delivery options and shipping label creation |
subscriptions |
Event subscription management and signature keys |
transports |
Transport tracking updates |
process-status |
Asynchronous 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.
Eenmaal verbonden kun je in gewoon Nederlands vragen stellen:
Once connected, you can interact with the bol.com API using natural language:
# Install dependencies
pnpm install
# Run in development mode
pnpm dev
# Build for production
pnpm build
# Run tests
pnpm test
# Type check
pnpm typecheck
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
MIT - see LICENSE for details.
Выполни в терминале:
claude mcp add bol-mcp -- npx Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development