bol-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bol-mcpShow my open orders from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bol-mcp
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.
Zorg dat Node.js 20+ is geïnstalleerd (je AI-app draait
npxop je machine)Haal bol.com API-gegevens op (zie Authentication)
Voeg de server toe als MCP server in je AI-app (kopieer onderstaande configuratie)
Stel vragen in gewoon Nederlands (zie Voorbeelden)
Quick Start (Non-Developers)
You do not need to clone this repo.
Make sure Node.js 20+ is installed (your AI app will run
npxon your machine)Get bol.com API credentials (see Authentication)
Add the server to your AI app as an MCP server (copy/paste config below)
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.
Open your Claude Desktop MCP config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\\Claude\\claude_desktop_config.json
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"
}
}
}
}Restart Claude Desktop
Add To Other AI Apps
Most MCP apps have a screen like "Add MCP Server" where you can fill in:
Command:
npxArgs:
-y bol-mcpEnv:
BOL_CLIENT_ID=your-client-idandBOL_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_SECRETFix: add both env vars to the MCP server config and restart your app.
Error:
npx: command not foundor server fails to startFix: install Node.js 20+ and restart your app.
You can connect, but API calls fail with
401/403Fix: 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.
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.
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-Afterheader supportToolset filtering to expose only the tool categories you need
Docker support for containerized deployment
Actionable error messages with context-aware recovery suggestions
Supported Clients
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 / runtime | Docs |
Claude Code | |
Anthropic API (Messages API) | |
Codex CLI (OpenAI) | |
Gemini CLI (Google) | |
VS Code (Copilot) | |
Claude Desktop | |
Cursor | |
Windsurf | |
Cline | |
Zed | |
Any other MCP host | Use 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.jsonand 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:
npxArgs:
["-y", "bol-mcp"]Required env vars:
BOL_CLIENT_ID,BOL_CLIENT_SECRETOptional 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:
Host | Top-level key | Notes |
VS Code |
| Add |
Claude Desktop / Cursor / Windsurf / Cline |
| Same command/args/env block |
Zed |
| Same command/args/env block |
Codex CLI (TOML) |
| Uses 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-mcpCodex 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-mcpSet 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.
Client | Config location | Top-level key |
Claude Desktop (macOS) |
|
|
Claude Desktop (Windows) |
|
|
Cursor (project) |
|
|
Cursor (global) |
|
|
Windsurf |
|
|
Cline | MCP settings UI |
|
Zed (macOS/Linux) |
|
|
Docker
docker run -i --rm \
-e BOL_CLIENT_ID=your-client-id \
-e BOL_CLIENT_SECRET=your-client-secret \
ghcr.io/bartwaardenburg/bol-mcpOther 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 (
stdiocommand server)Tool names and tool schemas exposed by this server
What is host/vendor-specific (not portable as-is):
Host config key names (
servers,mcpServers,context_servers,mcp_servers)Host UX/workflows for adding servers (CLI commands, UI menus, settings paths)
Anthropic-specific concepts such as Claude Desktop local MCP servers, Claude Connectors via remote MCP, and Claude Code plugins used in Cowork workflows
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
Variable | Description |
| Your bol.com API client ID |
| Your bol.com API client secret |
Generate your credentials in the bol.com Partner Platform under Settings > API Settings.
Optional
Variable | Description | Default |
| Response cache lifetime in seconds. Set to |
|
| Maximum retry attempts for rate-limited (429) requests with exponential backoff. |
|
| Comma-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
Log in to the bol.com Seller Dashboard
Navigate to Settings > Services > API Settings
Provide technical contact details (required before creating credentials)
Create a new API credential set
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/tokenAuth: HTTP Basic with
base64(clientId:clientSecret)Grant type:
client_credentialsToken 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
Tool | Description |
| List orders with optional status and fulfilment method filtering |
| Get detailed order information by order ID |
| Cancel order items with a reason code |
Offers
Tool | Description |
| Get offer details by offer ID |
| Create a new offer (EAN, condition, price, stock, fulfilment method) |
| Update offer details (reference, onHoldByRetailer, unknown product title, fulfilment) |
| Delete an offer permanently |
| Update the pricing for an offer |
| Update the stock level for an offer |
| Request a CSV export of all offers |
| Download a previously requested offer export |
| Request a report of unpublished offers |
| Download a previously requested unpublished offer report |
Shipments
Tool | Description |
| List shipments with optional order ID and fulfilment method filtering |
| Get shipment details by shipment ID |
| Create a shipment for order items (supports partial quantities) |
| List invoice requests for shipments |
Returns
Tool | Description |
| List returns with optional handled status and fulfilment method filtering |
| Get return details by RMA ID |
| Handle/process a return (accept, reject, repair, etc.) |
| Create a return for an order item |
Invoices
Tool | Description |
| List invoices by date period (max 31 days, format: YYYY-MM-DD) |
| Get full invoice details by invoice ID |
| Get detailed invoice specification/line items |
Commissions
Tool | Description |
| Calculate the commission for a product by EAN, condition, and unit price |
| Calculate commissions for multiple products at once |
Products
Tool | Description |
| Browse product categories |
| Search and browse products by category or search term |
| Get available product list filters |
| Get product images and assets by EAN |
| Get competing offers for a product by EAN |
| Get product placement information |
| Get price star boundaries for a product |
| Get product identifiers by EAN |
| Get product ratings and reviews |
Product Content
Tool | Description |
| Get catalog product details by EAN |
| Create or update product content |
| Get product content upload report |
| Get product content recommendations |
Insights
Tool | Description |
| Get offer visit and buy box insights |
| Get retailer performance indicators |
| Get product search and browse rankings |
| Get sales forecast for an offer |
| Get search term volume data |
Inventory
Tool | Description |
| Get LVB/FBB inventory with filtering by stock level, state, and EAN |
Promotions
Tool | Description |
| List available promotions by type |
| Get promotion details |
| Get products in a promotion |
Replenishments
Tool | Description |
| List FBB replenishments with filtering |
| Get replenishment details |
| Create a new FBB replenishment |
| Update or cancel a replenishment |
| Get available FBB delivery dates |
| Get pickup time slots for a delivery date |
| Request product warehouse destinations |
| Get product warehouse destinations |
Retailers
Tool | Description |
| Get retailer account information |
Shipping Labels
Tool | Description |
| Get available shipping/delivery options for order items |
| Create a shipping label for order items |
Subscriptions
Tool | Description |
| List all event subscriptions |
| Get subscription details |
| Create an event subscription (webhook, GCP Pub/Sub, or AWS SQS) |
| Update an event subscription |
| Delete an event subscription |
| Send a test notification to a subscription |
| Get public keys for webhook signature validation |
Transports
Tool | Description |
| Update transport/tracking information |
Process Status
Tool | Description |
| Get the status of an asynchronous process by process status ID |
| Get process statuses by entity ID and event type |
| Get 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,offersToolset | Tools included |
| Order listing, details, and cancellation |
| Full offer CRUD, price/stock management, export reports |
| Shipment listing, details, creation, and invoice requests |
| Return listing, details, creation, and handling |
| Invoice listing, details, and specifications |
| Single and bulk commission calculation |
| Product categories, search, assets, competing offers, ratings, placement |
| Catalog products, content creation, upload reports, recommendations |
| Offer insights, performance indicators, product ranks, sales forecasts, search terms |
| LVB/FBB inventory levels |
| Promotion listing and product details |
| FBB replenishment lifecycle, delivery dates, pickup slots, destinations |
| Retailer account information |
| Delivery options and shipping label creation |
| Event subscription management and signature keys |
| Transport tracking updates |
| 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.
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
Support: SUPPORT.md
Security reporting: SECURITY.md
Contributing guidelines: CONTRIBUTING.md
Bug reports and feature requests: Issues
Development
# Install dependencies
pnpm install
# Run in development mode
pnpm dev
# Build for production
pnpm build
# Run tests
pnpm test
# Type check
pnpm typecheckProject 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 trackingRequirements
Node.js >= 20
A bol.com seller account with API credentials
License
MIT - see LICENSE for details.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BartWaardenburg/bol-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server