Nembol MCP by usefulapi
Read products, listings and orders; update stock, publish listings, mark orders shipped in Nembol.
使うべきか
品質と安全性
検出事項(1)
- LOWnembol_publish_product_to_channel 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"nembol": {
"url": "https://nembol.usefulapi.io/mcp"
}
}
}リモートエンドポイント
https://nembol.usefulapi.io/mcpstreamable-httpできること
ツール一覧
ツール(17)
🟢nembol_get_store
Return the store this API key belongs to: name, plan, base currency, mode (live or test) and the key's scopes. Good first call to check the connection. GET /store.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_list_channel_accounts
List the connected sales channel accounts (Shopify, eBay, Etsy, Amazon, TikTok Shop and more). Take the channel_account_id from here; a store can have several accounts on one channel. GET /channel_accounts.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_list_products(q, status, sku, barcode, category, ...)
Search products by text, SKU, barcode, status, price or stock range, channel account, listing status or update time. All filters combine. Use updated_after for incremental sync. GET /products.
入力スキーマ
{
"type": "object",
"properties": {
"q": {
"description": "Text search over the product title and other text fields.",
"type": "string"
},
"status": {
"description": "Product status.",
"type": "string",
"enum": [
"ready",
"listed",
"archived",
"sold_out",
"error",
"ongoing",
"to_verify"
]
},
"sku": {
"description": "Exact SKU.",
"type": "string"
},
"barcode": {
"description": "Exact barcode (EAN, UPC or similar).",
"type": "string"
},
"category": {
"description": "Category filter.",
"type": "string"
},
"channel_account_id": {
"description": "Only products listed on this channel account.",
"type": "string"
},
"listing_status": {
"description": "Filter on the listing status.",
"type": "string",
"enum": [
"listed",
"ongoing",
"error",
"delisted",
"imported",
"none"
]
},
"quantity_min": {
"description": "Minimum stock quantity.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"quantity_max": {
"description": "Maximum stock quantity.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"updated_after": {
"description": "Only products updated after this time (ISO 8601).",
"type": "string"
},
"sort": {
"description": "Sort field (newest first).",
"type": "string",
"enum": [
"updated_at",
"created_at"
]
},
"limit": {
"description": "Page size, 1 to 100 (default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor from next_cursor of the previous page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_get_product(product_id)
Return one product with its variants, images, stock, prices and listing summary. GET /products/{id}.
入力スキーマ
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"description": "The product id (prefixed, e.g. prod_..., acct_...)."
}
},
"required": [
"product_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_list_listings(product_id, channel_account_id, channel, status, error_contains, ...)
List listings (a product published on one channel account). Use status=error to find failing listings and error_contains to target one failure cause. GET /listings.
入力スキーマ
{
"type": "object",
"properties": {
"product_id": {
"description": "Only listings of this product.",
"type": "string"
},
"channel_account_id": {
"description": "Only listings on this channel account.",
"type": "string"
},
"channel": {
"description": "Only listings on this channel, e.g. shopify or etsy.",
"type": "string"
},
"status": {
"description": "Listing status.",
"type": "string",
"enum": [
"listed",
"imported",
"ongoing",
"error",
"delisted"
]
},
"error_contains": {
"description": "Only listings whose error contains this text.",
"type": "string"
},
"updated_after": {
"description": "Only listings updated after this time (ISO 8601).",
"type": "string"
},
"limit": {
"description": "Page size, 1 to 100 (default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor from next_cursor of the previous page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_get_listing(listing_id)
Return one listing: channel, status, URL on the channel, overrides, issues and the last operation id. GET /listings/{id}.
入力スキーマ
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"minLength": 1,
"description": "The listing id (prefixed, e.g. prod_..., acct_...)."
}
},
"required": [
"listing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_list_orders(channel_account_id, channel, status, created_after, updated_after, ...)
List orders from all channels, newest first by the time they were placed. Each order carries its lines and fulfillment status. Needs the orders:read scope. GET /orders.
入力スキーマ
{
"type": "object",
"properties": {
"channel_account_id": {
"description": "Only orders from this channel account.",
"type": "string"
},
"channel": {
"description": "Only orders from this channel, e.g. shopify.",
"type": "string"
},
"status": {
"description": "Order status.",
"type": "string",
"enum": [
"awaiting_payment",
"awaiting_shipment",
"shipped",
"canceled",
"refunded",
"partially_refunded"
]
},
"created_after": {
"description": "Only orders placed after this time (ISO 8601).",
"type": "string"
},
"updated_after": {
"description": "Only orders updated after this time (ISO 8601).",
"type": "string"
},
"limit": {
"description": "Page size, 1 to 100 (default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor from next_cursor of the previous page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_get_order(order_id)
Return one order with its lines, totals, tracking and buyer data the key may read. GET /orders/{id}.
入力スキーマ
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"minLength": 1,
"description": "The order id (prefixed, e.g. prod_..., acct_...)."
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_get_operation(operation_id)
Return a background operation (for example a stock update or a publish): status, one result per SKU and channel, and failures. GET /operations/{id}.
入力スキーマ
{
"type": "object",
"properties": {
"operation_id": {
"type": "string",
"minLength": 1,
"description": "The operation id (prefixed, e.g. prod_..., acct_...)."
}
},
"required": [
"operation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_list_events(account, type, created_after, limit, cursor)
List the store's event log (orders, product and inventory changes, listing status, channel connections). Events are kept 30 days. Use it to catch up after downtime. GET /events.
入力スキーマ
{
"type": "object",
"properties": {
"account": {
"description": "Only events for this channel account id.",
"type": "string"
},
"type": {
"description": "Event type.",
"type": "string",
"enum": [
"order.created",
"order.status_changed",
"product.updated",
"product.deleted",
"inventory.updated",
"listing.status_changed",
"operation.completed",
"channel_account.updated",
"channel_account.connected",
"channel_account.disconnected"
]
},
"created_after": {
"description": "Only events created after this time (ISO 8601).",
"type": "string"
},
"limit": {
"description": "Page size, 1 to 100 (default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor from next_cursor of the previous page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nembol_list_actions(product_id, type, resource_id, created_after, limit, ...)
List the changes made through the API and in the dashboard, with the before and after values. Kept 90 days. Use it to see what changed and to find an action id for an undo. GET /actions.
入力スキーマ
{
"type": "object",
"properties": {
"product_id": {
"description": "Only actions on this product.",
"type": "string"
},
"type": {
"description": "Only actions of this type.",
"type": "string"
},
"resource_id": {
"description": "Only actions on this resource id.",
"type": "string"
},
"created_after": {
"description": "Only actions after this time (ISO 8601).",
"type": "string"
},
"limit": {
"description": "Page size, 1 to 100 (default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor from next_cursor of the previous page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nembol_create_product(title, description, short_description, brand, category, ...)
Create a product in the store. It stays a local draft and is not shown on any channel until nembol_publish_product_to_channel publishes it. POST /products.
入力スキーマ
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Product title."
},
"description": {
"description": "Full description (may contain HTML as the channel accepts it).",
"type": "string"
},
"short_description": {
"description": "Short description.",
"type": "string"
},
"brand": {
"description": "Brand name.",
"type": "string"
},
"category": {
"description": "Product category.",
"type": "string"
},
"sku": {
"description": "SKU. Must be unique in the store.",
"type": "string"
},
"price": {
"type": "string",
"pattern": "^\\d+\\.\\d{2}$",
"description": "Price as a decimal string with 2 decimals, e.g. \"19.90\", in the store currency."
},
"msrp": {
"type": "string",
"pattern": "^\\d+\\.\\d{2}$",
"description": "Price as a decimal string with 2 decimals, e.g. \"19.90\", in the store currency."
},
"quantity": {
"description": "Stock quantity.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"grams": {
"description": "Weight in grams.",
"type": "number",
"minimum": 0
},
"vat_rate": {
"description": "VAT rate in percent.",
"type": "number",
"minimum": 0,
"maximum": 100
},
"mpn": {
"description": "Manufacturer part number.",
"type": "string"
},
"tags": {
"description": "Tags.",
"type": "array",
"items": {
"type": "string"
}
},
"image_urls": {
"description": "Public http(s) image URLs (JPEG, PNG, WebP or GIF, max 10 MB each). Nembol copies them.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
}
},
"required": [
"title"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡nembol_update_product(product_id, title, description, short_description, brand, ...)
Change a product's texts, brand, category, tags, identifiers or VAT rate. Changes reach every live channel listing that follows the product text. This tool does not change images. PATCH /products/{id}.
入力スキーマ
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"description": "The product id (prefixed, e.g. prod_..., acct_...)."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"description": {
"type": "string"
},
"short_description": {
"type": "string"
},
"brand": {
"type": "string"
},
"category": {
"type": "string"
},
"mpn": {
"type": "string"
},
"vat_rate": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"expected_updated_at": {
"description": "Only update if the product still has this updated_at (ISO 8601); avoids overwriting a newer change.",
"type": "string"
}
},
"required": [
"product_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nembol_update_stock_and_prices(items)
Set the stock quantity and/or the price for up to 100 SKUs in one call. The change is saved in Nembol at once and then sent to every channel the product is live on. Returns an operation to follow with nembol_get_operation. POST /inventory/batch.
入力スキーマ
{
"type": "object",
"properties": {
"items": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"sku": {
"type": "string",
"minLength": 1,
"description": "The SKU to update."
},
"quantity": {
"description": "New stock quantity.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"price": {
"type": "string",
"pattern": "^\\d+\\.\\d{2}$",
"description": "Price as a decimal string with 2 decimals, e.g. \"19.90\", in the store currency."
}
},
"required": [
"sku"
]
},
"description": "The SKU updates."
}
},
"required": [
"items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nembol_publish_product_to_channel(product_id, channel_account_id, site, category_id, overrides, ...)
Create a listing: publish a product on one channel account. Publication is queued and runs in the background; follow it with nembol_get_listing or nembol_get_operation. Publishing the same product to the same account twice returns the existing listing. POST /listings.
入力スキーマ
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"description": "The product id (prefixed, e.g. prod_..., acct_...)."
},
"channel_account_id": {
"type": "string",
"minLength": 1,
"description": "The channel account id (prefixed, e.g. prod_..., acct_...)."
},
"site": {
"description": "Channel site or marketplace code, if the channel has several.",
"type": "string"
},
"category_id": {
"description": "Channel category id, when the channel needs one (see nembol_list_channel_accounts for the account).",
"type": "string"
},
"overrides": {
"description": "Listing-specific text or fields.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"attributes": {
"description": "Channel-specific attributes.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"product_id",
"channel_account_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nembol_delist_listing(listing_id, confirmation_token)
Remove a listing from its channel. Irreversible: the channel creates a new listing if the product is published again, and reviews and watchers do not return. First call without confirmation_token: Nembol answers with a summary and a token. Show the summary to the user; only if they agree, call again with the same listing_id and the token. DELETE /listings/{id}.
入力スキーマ
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"minLength": 1,
"description": "The listing id (prefixed, e.g. prod_..., acct_...)."
},
"confirmation_token": {
"description": "Only after the user agreed to the summary of a confirmation_required answer: the token from that answer.",
"type": "string"
}
},
"required": [
"listing_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nembol_mark_order_shipped(order_id, mark_shipped, tracking_number, carrier, tracking_url, ...)
Mark a channel order as shipped and/or attach tracking. Applies to the whole order. This is not undoable, and with tracking the source marketplace is notified (once per order) unless notify_channel is false. POST /orders/{id}/fulfillment.
入力スキーマ
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"minLength": 1,
"description": "The order id (prefixed, e.g. prod_..., acct_...)."
},
"mark_shipped": {
"description": "Set the order to shipped (default true).",
"type": "boolean"
},
"tracking_number": {
"description": "Tracking number.",
"type": "string",
"minLength": 1,
"maxLength": 64
},
"carrier": {
"description": "Carrier name.",
"type": "string",
"maxLength": 64
},
"tracking_url": {
"description": "Tracking page URL (http or https).",
"type": "string",
"maxLength": 512,
"format": "uri"
},
"notify_channel": {
"description": "Notify the marketplace of the tracking (default true).",
"type": "boolean"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}コミュニティ
エビデンス