bol.com MCP by usefulapi
Read bol orders, returns, offers and inventory; update an offer’s stock, price or sale status.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (3)
- HIGH
- MEDIUMen bol_get_performance_indicator
- LOWen bol_get_offer_not_for_sale_reasons
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"bol-com": {
"url": "https://bol-com.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://bol-com.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (18)
🟢bol_list_orders(status, fulfilment_method, change_interval_minute, latest_change_date, page)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"status": {
"description": "Order status (default OPEN).",
"type": "string",
"enum": [
"OPEN",
"SHIPPED",
"ALL"
]
},
"fulfilment_method": {
"description": "Fulfilled by the retailer (FBR, default), by bol (FBB) or both (ALL).",
"type": "string",
"enum": [
"FBR",
"FBB",
"ALL"
]
},
"change_interval_minute": {
"description": "Only order items changed in the last N minutes (1-60).",
"type": "integer",
"minimum": 1,
"maximum": 60
},
"latest_change_date": {
"description": "Only order items last changed on this date, yyyy-mm-dd (up to 3 months back).",
"type": "string"
},
"page": {
"description": "Page number, from 1 (default 1). Use the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_order(order_id)
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}.
Esquema de entrada
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "The bol order id (from bol_list_orders)."
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_list_shipments(order_id, fulfilment_method, page)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Only the shipments of this order."
},
"fulfilment_method": {
"description": "FBR or FBB (ignored when order_id is given).",
"type": "string",
"enum": [
"FBR",
"FBB"
]
},
"page": {
"description": "Page number, from 1 (default 1). Use the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_shipment(shipment_id)
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}.
Esquema de entrada
{
"type": "object",
"properties": {
"shipment_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "The shipment id (from bol_list_shipments)."
}
},
"required": [
"shipment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_list_returns(handled, fulfilment_method, page)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"handled": {
"description": "true = handled returns, false = returns still to handle. Set it explicitly.",
"type": "boolean"
},
"fulfilment_method": {
"description": "FBR or FBB.",
"type": "string",
"enum": [
"FBR",
"FBB"
]
},
"page": {
"description": "Page number, from 1 (default 1). Use the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_return(return_id)
One return by id: return items, reasons, handling results, the customer's details (personal data). GET /retailer/returns/{return-id}.
Esquema de entrada
{
"type": "object",
"properties": {
"return_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "The return id (from bol_list_returns)."
}
},
"required": [
"return_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_list_offers(offer_ids, eans, reference, for_sale, last_modified_since, ...)
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).
Esquema de entrada
{
"type": "object",
"properties": {
"offer_ids": {
"description": "Only these offer ids (UUIDs).",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "An offer id."
}
},
"eans": {
"description": "Only these EANs.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d{8,14}$",
"description": "EAN (8 to 14 digits)."
}
},
"reference": {
"description": "Only offers with this seller reference.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"for_sale": {
"description": "true = only offers currently for sale, false = only those not for sale.",
"type": "boolean"
},
"last_modified_since": {
"description": "Only offers modified since this UTC time, e.g. 2026-10-01T08:00:00Z.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"
},
"page_size": {
"description": "Offers per page, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "The next_cursor of the previous reply.",
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_offer(offer_id)
One offer by id (Offers API v11): condition, price bundles, stock, fulfilment, countries, product. GET /retailer/offers/{offer-id} (v11).
Esquema de entrada
{
"type": "object",
"properties": {
"offer_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The offer id (UUID, from bol_list_offers)."
}
},
"required": [
"offer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_offer_not_for_sale_reasons(offer_id)
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).
Esquema de entrada
{
"type": "object",
"properties": {
"offer_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The offer id (UUID)."
}
},
"required": [
"offer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴bol_update_offer(offer_id, on_hold, reference, prices, stock_amount, ...)
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).
Esquema de entrada
{
"type": "object",
"properties": {
"offer_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The offer id (UUID)."
},
"on_hold": {
"description": "true = take the offer off sale (hold), false = list it for sale again.",
"type": "boolean"
},
"reference": {
"description": "Your own reference for the offer (max 100 chars; empty clears it).",
"type": "string",
"maxLength": 100
},
"prices": {
"description": "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.",
"minItems": 1,
"maxItems": 4,
"type": "array",
"items": {
"type": "object",
"properties": {
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 24
},
"unit_price": {
"type": "number",
"minimum": 1,
"maximum": 9999
}
},
"required": [
"quantity",
"unit_price"
]
}
},
"stock_amount": {
"description": "Stock in your own warehouse (not FBB stock).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"stock_managed_by_retailer": {
"description": "true = you manage stock levels; false = bol corrects stock for open orders.",
"type": "boolean"
}
},
"required": [
"offer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_list_inventory(query, stock, state, quantity, page)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"description": "EAN or product title.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"stock": {
"description": "Stock level filter.",
"type": "string",
"enum": [
"SUFFICIENT",
"INSUFFICIENT"
]
},
"state": {
"description": "Stock type filter.",
"type": "string",
"enum": [
"REGULAR",
"GRADED"
]
},
"quantity": {
"description": "Quantity range \"min-max\", e.g. \"0-10\".",
"type": "string",
"pattern": "^\\d+-\\d+$"
},
"page": {
"description": "Page number, from 1 (default 1). Use the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_list_invoices(period_start_date, period_end_date)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"period_start_date": {
"description": "Period start, yyyy-mm-dd (give both dates, max 31 days apart).",
"type": "string"
},
"period_end_date": {
"description": "Period end, yyyy-mm-dd.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_invoice_specification(invoice_id, page)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "The invoice id (from bol_list_invoices)."
},
"page": {
"description": "Page number, from 1 (default 1). Use the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_commissions(products)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"products": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"ean": {
"type": "string",
"pattern": "^\\d{8,14}$",
"description": "EAN (8 to 14 digits)."
},
"unit_price": {
"type": "number",
"minimum": 0,
"maximum": 9999,
"description": "Selling price per unit incl. VAT."
},
"condition": {
"description": "Offer condition (default NEW).",
"type": "string",
"enum": [
"NEW",
"AS_NEW",
"GOOD",
"REASONABLE",
"MODERATE"
]
}
},
"required": [
"ean",
"unit_price"
]
},
"description": "The products to calculate."
}
},
"required": [
"products"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_competing_offers(ean, country_code, best_offer_only, condition, page)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"ean": {
"type": "string",
"pattern": "^\\d{8,14}$",
"description": "EAN (8 to 14 digits)."
},
"country_code": {
"description": "Webshop country (default NL).",
"type": "string",
"enum": [
"NL",
"BE"
]
},
"best_offer_only": {
"description": "true = only the best offer.",
"type": "boolean"
},
"condition": {
"description": "Offer condition filter.",
"type": "string",
"enum": [
"ALL",
"BAD",
"MODERATE",
"REASONABLE",
"GOOD",
"AS_NEW",
"NEW",
"REFURBISHED_A",
"REFURBISHED_B",
"REFURBISHED_C"
]
},
"page": {
"description": "Page number, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"ean"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_performance_indicator(name, year, week)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"CANCELLATIONS",
"FULFILMENT",
"PHONE_AVAILABILITY",
"RESPONSE_TIME",
"CASE_ITEM_RATIO",
"TRACK_AND_TRACE",
"RETURNS",
"REVIEWS"
],
"description": "The indicator."
},
"year": {
"type": "integer",
"minimum": 2000,
"maximum": 2100,
"description": "Year, e.g. 2026."
},
"week": {
"type": "integer",
"minimum": 1,
"maximum": 53,
"description": "ISO week number, 1-53."
}
},
"required": [
"name",
"year",
"week"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_sales_forecast(offer_id, weeks_ahead)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"offer_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The offer id (UUID)."
},
"weeks_ahead": {
"type": "integer",
"minimum": 1,
"maximum": 12,
"description": "Weeks ahead, 1-12."
}
},
"required": [
"offer_id",
"weeks_ahead"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢bol_get_process_status(process_status_id)
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}.
Esquema de entrada
{
"type": "object",
"properties": {
"process_status_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "The process status id."
}
},
"required": [
"process_status_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia