PlentyONE MCP by usefulapi
Review PlentyONE orders, items, stock and contacts; add comments and update order status.
Should I use this
Quality & Safety
Findings (6)
- LOWin plentymarkets_get_order_status_history
- LOWin plentymarkets_list_order_statuses
- LOWin plentymarkets_list_order_referrers
- LOWin plentymarkets_list_manufacturers
- LOWin plentymarkets_list_sales_prices
- LOWin plentymarkets_update_order_status
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"plentymarkets": {
"url": "https://plentymarkets.usefulapi.io/mcp"
}
}
}Remote endpoints
https://plentymarkets.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢plentymarkets_list_orders(status_from, status_to, order_type, contact_id, payment_status, ...)
List orders (sales orders, returns, credit notes ...) with filters. Newest first with sort_by createdAt and sort_order desc. Returns {page, totalsCount, isLastPage, entries[]}; each entry has the id, typeId (1 = sales order), statusId, plentyId, createdAt, amounts and the order items unless add_order_items is false. GET /rest/orders.
Input Schema
{
"type": "object",
"properties": {
"status_from": {
"description": "Only orders in this status or a higher one (status ids are numbers like 3, 5.1, 7).",
"type": "number",
"minimum": 0,
"maximum": 1000
},
"status_to": {
"description": "Only orders up to this status (combine with status_from for a range).",
"type": "number",
"minimum": 0,
"maximum": 1000
},
"order_type": {
"description": "Order type id(s), comma separated: 1 sales order, 2 delivery order, 3 returns, 4 credit note, 5 warranty, 6 repair, 7 offer, 8 advance order, 9 multi order, 10 multi credit note, 11 multi delivery, 12 reorder, 13 partial delivery, 14 subscription, 15 redistribution.",
"type": "string",
"maxLength": 60,
"pattern": "^\\d+(,\\d+)*$"
},
"contact_id": {
"description": "Only orders of this contact (customer).",
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"payment_status": {
"type": "string",
"enum": [
"unpaid",
"partlyPaid",
"fullyPaid",
"overpaid"
]
},
"referrer_id": {
"description": "Only orders from this order referrer / marketplace (see plentymarkets_list_order_referrers).",
"type": "number",
"minimum": 0,
"maximum": 2000000000
},
"external_order_id": {
"description": "The order id the marketplace or shop gave the order.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"order_ids": {
"description": "Specific order ids, comma separated.",
"type": "string",
"maxLength": 400,
"pattern": "^\\d+(,\\d+)*$"
},
"included_variation": {
"description": "Only orders that contain this variation id.",
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"created_from": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"created_to": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"updated_from": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"updated_to": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"paid_from": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"paid_to": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"add_order_items": {
"description": "Include the order items (default true). false makes the page much smaller.",
"type": "boolean"
},
"with": {
"description": "Related data to load, for example addresses, comments, payments, documents.",
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"addresses",
"relations",
"comments",
"location",
"payments",
"documents",
"contactSender",
"contactReceiver",
"warehouseSender",
"warehouseReceiver",
"orderItems.variation",
"orderItems.comments",
"orderItems.transactions",
"orderItems.serialNumbers",
"shippingPackages",
"shippingPackages.items",
"shippingInformation",
"originOrderReferences"
]
}
},
"sort_by": {
"type": "string",
"enum": [
"id",
"statusId",
"createdAt",
"orderDocument"
]
},
"sort_order": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 25). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_get_order(order_id, with, add_order_items)
Get one order by id: status, amounts, dates, properties, order items, address relations. Add related data with `with` (addresses, comments, payments, documents, shippingPackages ...). GET /rest/orders/{orderId}.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The order id."
},
"with": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"addresses",
"relations",
"comments",
"location",
"payments",
"documents",
"contactSender",
"contactReceiver",
"warehouseSender",
"warehouseReceiver",
"orderItems.variation",
"orderItems.comments",
"orderItems.transactions",
"orderItems.serialNumbers",
"shippingPackages"
]
}
},
"add_order_items": {
"description": "Include the order items (default true).",
"type": "boolean"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_get_order_status_history(order_id)
The status changes of an order: which status, when, and by which user. GET /rest/orders/{orderId}/status-history.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_order_statuses(status_id_from, status_id_to, language, page, items_per_page)
The order statuses defined in the system (id and name per language), to translate a statusId. Optionally a range of status ids. GET /rest/orders/statuses.
Input Schema
{
"type": "object",
"properties": {
"status_id_from": {
"type": "number",
"minimum": 0,
"maximum": 1000
},
"status_id_to": {
"type": "number",
"minimum": 0,
"maximum": 1000
},
"language": {
"description": "Two-letter language code, for example en or de.",
"type": "string",
"pattern": "^[a-z]{2}$"
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 50). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_order_referrers
The order referrers (sales channels: shop, eBay, Amazon, ...) with their ids, for the referrer_id filter of plentymarkets_list_orders. GET /rest/orders/referrers.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_comments(reference_type, reference_id)
The comments (internal notes) on an order, an order item, a contact or a category. GET /rest/comments/{referenceType}/{referenceValue}.
Input Schema
{
"type": "object",
"properties": {
"reference_type": {
"type": "string",
"enum": [
"order",
"order_item",
"contact",
"category"
]
},
"reference_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The id of the order, order item, contact or category."
}
},
"required": [
"reference_type",
"reference_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_items(name, id, manufacturer_id, updated_from, updated_to, ...)
List items (the product containers) with filters. Prices, stock, barcodes and SKUs belong to the variations: use plentymarkets_list_variations for those. Returns {page, totalsCount, isLastPage, entries[]}. GET /rest/items.
Input Schema
{
"type": "object",
"properties": {
"name": {
"description": "Item name (matches the name of the item).",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"id": {
"description": "Item id(s), comma separated.",
"type": "string",
"maxLength": 400,
"pattern": "^\\d+(,\\d+)*$"
},
"manufacturer_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"updated_from": {
"description": "Only items updated from this day on (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_to": {
"description": "Only items updated up to this day (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"lang": {
"description": "Language of the texts, a two-letter code (default: the system's).",
"type": "string",
"pattern": "^[a-z]{2}$"
},
"with": {
"description": "Related data: itemProperties, itemCrossSelling, variations, itemImages, itemShippingProfiles.",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"itemProperties",
"itemCrossSelling",
"variations",
"itemImages",
"itemShippingProfiles"
]
}
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 25). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_get_item(item_id, lang)
Get one item by id: flags, manufacturer, texts, condition, age rating and the item-level settings. GET /rest/items/{itemId}.
Input Schema
{
"type": "object",
"properties": {
"item_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"lang": {
"description": "Language of the texts, a two-letter code.",
"type": "string",
"pattern": "^[a-z]{2}$"
}
},
"required": [
"item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_variations(item_id, id, item_name, number_exact, number_fuzzy, ...)
Search variations (the sellable products: number, SKU, barcodes, prices, stock, categories). Filter by item, number, barcode, SKU, active flag, category, warehouse. Use `with` for the related data (variationSalesPrices, variationBarcodes, stock, variationCategories, images ...). GET /rest/items/variations.
Input Schema
{
"type": "object",
"properties": {
"item_id": {
"description": "Only variations of this item.",
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"id": {
"description": "One variation id.",
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"item_name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"number_exact": {
"description": "The exact variation number.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"number_fuzzy": {
"description": "Variation numbers that contain this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sku": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"barcode": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"is_active": {
"type": "boolean"
},
"is_main": {
"description": "Only main variations.",
"type": "boolean"
},
"category_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"manufacturer_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"supplier_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"stock_warehouse_id": {
"description": "Only variations with physical stock in this warehouse.",
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"updated_from": {
"description": "Only variations updated from this day on (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_to": {
"description": "Only variations updated up to this day (yyyy-mm-dd).",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"with": {
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"properties",
"variationProperties",
"variationBarcodes",
"variationBundleComponents",
"variationSalesPrices",
"marketItemNumbers",
"variationCategories",
"variationClients",
"variationMarkets",
"variationDefaultCategory",
"variationSuppliers",
"variationWarehouses",
"images",
"itemImages",
"variationAttributeValues",
"variationSkus",
"unit",
"parent",
"item",
"stock"
]
}
},
"lang": {
"type": "string",
"pattern": "^[a-z]{2}$"
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 25). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_categories(type, parent_id, name, level, with, ...)
List item categories (the category tree: id, parent, level, type, names with `with` details). GET /rest/categories.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"item",
"container",
"content",
"blog"
]
},
"parent_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"level": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"with": {
"description": "details = names and texts, clients = the stores the category is active in, tags.",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"details",
"clients",
"tags"
]
}
},
"lang": {
"type": "string",
"pattern": "^[a-z]{2}$"
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 50). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_manufacturers(name, page, items_per_page)
List the manufacturers (brands) of the items: id, name, address data. GET /rest/items/manufacturers.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 50). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_sales_prices(page, items_per_page)
List the sales price configurations (price types such as retail or purchase price: id, type, names, which stores, countries and currencies they apply to). The prices of a variation: plentymarkets_list_variations with variationSalesPrices. GET /rest/items/sales_prices.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 50). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_stock(variation_id, updated_from, updated_to, sort_by, sort_order, ...)
List physical stock per variation and warehouse (physical stock, net stock, reserved, reorder level), optionally for one variation or changed since a date. Returns {page, totalsCount, isLastPage, entries[]}. GET /rest/stockmanagement/stock.
Input Schema
{
"type": "object",
"properties": {
"variation_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"updated_from": {
"description": "Only stock changed from this date on.",
"type": "string"
},
"updated_to": {
"type": "string",
"description": "A date (yyyy-mm-dd) or a date-time (2026-10-24T13:33:23+02:00). A bare date means the whole day."
},
"sort_by": {
"type": "string",
"enum": [
"stock",
"number",
"variationId",
"warehouseId"
]
},
"sort_order": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 200 (default 50). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_warehouses
List the warehouses (id, name, type, priority, address settings). GET /rest/stockmanagement/warehouses.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_list_contacts(full_text, email, name, number, type_id, ...)
List contacts (customers, suppliers, ...). Returns personal data of your customers (names, emails, addresses). Filter by email, name, number, type, postal code or town; `with` adds addresses, options (email, phone), accounts, orderSummary. GET /rest/accounts/contacts.
Input Schema
{
"type": "object",
"properties": {
"full_text": {
"description": "Full text search over the contact data.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"email": {
"description": "An email address.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"number": {
"description": "The contact number.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"type_id": {
"description": "Contact type: 1 customer, 2 interested party, 3 sales representative, 4 supplier, 5 manufacturer, 6 partner.",
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"postal_code": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"town": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"created_after": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "A date, yyyy-mm-dd."
},
"created_before": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "A date, yyyy-mm-dd."
},
"updated_after": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "A date, yyyy-mm-dd."
},
"updated_before": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "A date, yyyy-mm-dd."
},
"last_order_after": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "A date, yyyy-mm-dd."
},
"last_order_before": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "A date, yyyy-mm-dd."
},
"with": {
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"enum": [
"addresses",
"accounts",
"options",
"orderSummary",
"primaryBillingAddress",
"contactOrders"
]
}
},
"page": {
"description": "Page number, from 1 (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"items_per_page": {
"description": "Entries per page, 1 to 100 (default 25). When is_last_page is false, ask for the next page.",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢plentymarkets_get_contact(contact_id, with)
Get one contact by id (customer personal data). Add addresses or accounts with `with` (the relations documented for this single-contact route). GET /rest/accounts/contacts/{contactId}.
Input Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"with": {
"maxItems": 2,
"type": "array",
"items": {
"type": "string",
"enum": [
"addresses",
"accounts"
]
}
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡plentymarkets_add_comment(reference_type, reference_id, text, visible_for_contact)
WRITE: add an internal comment to an order, order item, contact, category or variation (an additive note, nothing is overwritten). By default the comment is NOT visible to the customer; only make it visible when the user explicitly asks. POST /rest/comments.
Input Schema
{
"type": "object",
"properties": {
"reference_type": {
"type": "string",
"enum": [
"order",
"order_item",
"contact",
"category",
"item_variation"
]
},
"reference_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000,
"description": "The id of the order, order item, contact, category or variation."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 5000,
"description": "The comment text."
},
"visible_for_contact": {
"description": "Show the comment to the customer (default false: internal only).",
"type": "boolean"
}
},
"required": [
"reference_type",
"reference_id",
"text"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴plentymarkets_update_order_status(order_id, status_id)
WRITE: move an order to another status. This can trigger the event procedures configured in the system (customer emails, stock bookings, documents, shipping), so confirm the target status with the user first (plentymarkets_list_order_statuses has the ids). Only the status is sent. PUT /rest/orders/{orderId}.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"minimum": 1,
"maximum": 2000000000
},
"status_id": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000,
"description": "The target status id, for example 5 or 7.2."
}
},
"required": [
"order_id",
"status_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence