# com.b2bware/mcp-server (remote · mcp.b2bware.com)

B2Bware MCP server — access products, orders and customers from Cursor, Claude, Windsurf and more.

- Trust score: 74/100 (medium)
- Change this week: +8
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.b2bware.com`: 74/100 (this document), [markdown](https://verifymcp.io/servers/com-b2bware-mcp-server/mcp.md), [page](https://verifymcp.io/servers/com-b2bware-mcp-server/mcp)
- remote · `mcp.b2bware.com`: 23/100, [markdown](https://verifymcp.io/servers/com-b2bware-mcp-server/mcp-2.md), [page](https://verifymcp.io/servers/com-b2bware-mcp-server/mcp-2)

## Channel facts

- Endpoint: `https://mcp.b2bware.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.13.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 83/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 70/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 12078 tokens (~74/item across 163 items; 163 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 79/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 37% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-b2bware-mcp-server https://mcp.b2bware.com/mcp
```

### Codex

```toml
[mcp_servers.com-b2bware-mcp-server]
url = "https://mcp.b2bware.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-b2bware-mcp-server": {
      "type": "remote",
      "url": "https://mcp.b2bware.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-b2bware-mcp-server --url https://mcp.b2bware.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-b2bware-mcp-server:
    url: "https://mcp.b2bware.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-b2bware-mcp-server": {
      "type": "http",
      "url": "https://mcp.b2bware.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 73, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 68, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 66, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 65)

First indexed and scored.

## MCP tools (163)

### `search_products` (~217 tokens)

Search B2Bware products by name, SKU, EAN/GTIN, or category name. Returns a merged, deduplicated list (max ~100 results). For full catalogue browsing or large result sets use list_products instead. Products of type 'configurable' are parent containers without prices and cannot be added to cart. Only 'simple' products are orderable. Use exclude_configurable=true to filter out non-orderable parent products.

Input parameters:

- `brand_id` (number)
- `brand_ids` (array)
- `exclude_configurable` (boolean): If true, exclude configurable parent products (default false)
- `include` (string): Comma-separated includes; add brand for brand block on each product
- `language` (string): Content language code, e.g. "de" (optional)
- `page` (number): Page number (default 1)
- `per_page` (number): Results per page (default 12, max 50)
- `query` (string, required): Search term (partial match supported)

### `list_products` (~350 tokens)

List B2Bware products with optional filters and pagination. Use this for full catalogue browsing — supports 23.000+ products via pagination. To browse products of a specific category, use search_products with the category name as query. Products of type 'configurable' are parent containers without prices and cannot be added to cart. Only 'simple' products are orderable. Use exclude_configurable=true to filter out non-orderable parent products.

Input parameters:

- `anchor_category_id` (number): Filter by category and all its descendant categories (category tree). Use category ID.
- `attribute_filters` (array): Advanced attribute filters (maps to filter[attribute] on ProductHub)
- `brand_id` (number): Filter by brand (attribute_value id from list_brands)
- `brand_ids` (array): Filter by multiple brand ids
- `category_id` (number): Filter by exact category ID only (no descendants).
- `exclude_child_products` (boolean): If true, exclude child variation products (show only standalone and parent products).
- `exclude_configurable` (boolean): If true, exclude configurable parent products (default false)
- `include` (string): Comma-separated includes: mainMedia, price, finalPrice, specialPrice, translation, categories, brand
- `language` (string): Content language, e.g. "de"
- `page` (number): Page number (default 1)
- `per_page` (number): Results per page (default 12)
- `product_type` (string): Filter by product type, e.g. "simple" or "configurable"
- `sort` (string): Sort field. Prefix with - for descending, e.g. "-_created_at"

### `get_product` (~70 tokens)

Get full details of a single B2Bware product by ID.

Input parameters:

- `id` (string, required): Product ID
- `include` (string): Comma-separated includes; use brand for { id, name, slug, logo_url }
- `language` (string): Content language, e.g. "de"

### `list_categories` (~39 tokens)

List all B2Bware product categories.

Input parameters:

- `language` (string)
- `page` (number)
- `per_page` (number)

### `get_category` (~35 tokens)

Get a single B2Bware category by ID.

Input parameters:

- `id` (string, required): Category ID
- `language` (string)

### `list_orders` (~281 tokens)

List B2Bware orders with optional filters, sorting, and pagination. Valid statuses: draft, pending, processing, completed, canceled, invoiced, shipped, paid, refunded, partially_refunded, pending_payment. Valid sort fields: id, -id, _created_at, -_created_at, total_price, -total_price, status, customer_id. Use sort='-id' or sort='-_created_at' to get the NEWEST order first. Date format: YYYY-MM-DD.

Input parameters:

- `customer_id` (number): Filter by customer ID
- `date_from` (string): Filter orders created on or after this date (YYYY-MM-DD)
- `date_to` (string): Filter orders created on or before this date (YYYY-MM-DD)
- `max_price` (number): Filter orders with total_price <= this value
- `min_price` (number): Filter orders with total_price >= this value
- `page` (number): Page number (default: 1)
- `per_page` (number): Results per page (default: 25)
- `sort` (string): Sort field, e.g. "-_created_at" for newest first
- `status` (string): Filter by status: draft, pending, processing, completed, canceled, invoiced, shipped, paid, refunded, partially_refunded, pending_payment

### `update_order_status` (~90 tokens)

Update the status of an existing order. Valid statuses: draft, pending, processing, completed, canceled, invoiced, shipped, paid, refunded, partially_refunded, pending_payment.

Input parameters:

- `id` (string, required): Order ID
- `status` (string, required): New status: draft, pending, processing, completed, canceled, invoiced, shipped, paid, refunded, partially_refunded, pending_payment

### `get_order` (~28 tokens)

Get full details of a single order including line items.

Input parameters:

- `id` (string, required): Order ID

### `list_shipping_methods` (~30 tokens)

List all available shipping methods. Call this before checkout to retrieve valid method IDs required for the checkout call.

### `list_billing_methods` (~33 tokens)

List all available payment / billing methods. Call this before checkout to retrieve valid method IDs required for the checkout call.

### `preview_checkout` (~57 tokens)

Preview checkout for a cart: returns calculated totals, shipping, and tax without completing the order. Use before calling checkout to show the customer the final amounts.

Input parameters:

- `cart_id` (string, required): Cart ID (from upsert_cart or get_cart)

### `upsert_cart` (~123 tokens)

Create or replace cart contents via PATCH /carts. Prefer add_cart_item for adding single lines (PATCH may accumulate quantities). Pass a stable session_uuid to update an existing cart. Returns the cart with its ID for checkout or admin review. Optionally pass 'price' per line item to override the catalogue price.

Input parameters:

- `cart_items` (array, required): Line items to add to the cart
- `customer_id` (number): B2Bware customer ID (optional for guest carts)
- `session_uuid` (string, required): Stable session identifier (e.g. a UUID)

### `get_cart` (~53 tokens)

Retrieve the current cart contents for a session by session_uuid. Uses API filter when supported; otherwise may require multiple list calls when many carts exist.

Input parameters:

- `session_uuid` (string, required): Session UUID used when the cart was created

### `add_cart_item` (~104 tokens)

Add one product line to a cart via POST /cart-items (preferred for admin/test carts). Provide cart_id OR session_uuid (and optional customer_id). Returns the cart item.

Input parameters:

- `cart_id` (number): Existing cart ID
- `customer_id` (number)
- `price` (number): Optional unit price override
- `product_id` (number, required)
- `quantity` (number, required)
- `session_uuid` (string): Session UUID if cart_id unknown

### `update_cart_item` (~51 tokens)

Update quantity or price on an existing cart line via PATCH /cart-items/{id}.

Input parameters:

- `item_id` (string, required): Cart item ID
- `price` (number)
- `quantity` (number)

### `list_carts` (~84 tokens)

List carts (open/abandoned carts for operator queries). Filter by customer_id. Use with list_orders (sort=-id) for recent purchases vs open carts.

Input parameters:

- `customer_id` (number): Filter by customer ID (optional)
- `page` (number): Page number (default 1)
- `per_page` (number): Results per page (default 50)

### `remove_cart_item` (~37 tokens)

Remove a single item from a cart by cart-item ID.

Input parameters:

- `item_id` (string, required): Cart item ID (from cart_items array)

### `checkout` (~198 tokens)

Execute checkout on an existing cart and create an order. Requires a cart_id, shipping and billing address IDs, and method IDs. IMPORTANT: Before calling checkout, always fetch available shipping methods via list_shipping_methods and billing methods via list_billing_methods if the IDs are not already known. Both shipping_method_id AND billing_method_id are required for a successful checkout. Use list_customer_addresses to fetch existing addresses for a customer.

Input parameters:

- `billing_address_id` (number, required): Required billing address ID. Use list_customer_addresses to fetch valid IDs.
- `billing_method_id` (number|string, required): Required billing method ID. Use list_billing_methods first.
- `cart_id` (string, required): Cart ID returned by upsert_cart
- `comment` (string)
- `shipping_address_id` (number, required): Required shipping address ID. Use list_customer_addresses to fetch valid IDs.
- `shipping_method_id` (number|string, required): Required shipping method ID. Use list_shipping_methods first.

### `calculate_tax` (~85 tokens)

Calculate tax for line items given customer context (country, region, customer_group, vat_number). Uses TaxHub rule engine. Returns tax amounts per line and total. Useful before checkout or for quotes.

Input parameters:

- `customer` (object, required): Customer context for tax rules (country, region, vat_number, etc.)
- `line_items` (array, required): Line items with subtotal and tax_class_id

### `list_customers` (~123 tokens)

List all B2Bware customers with pagination, sorting and filtering. Valid sort fields: id, -id, _created_at, -_created_at, email, first_name.

Input parameters:

- `customer_number` (string): Filter by customer number (partial match)
- `email` (string): Filter by email (partial match)
- `page` (number): Page number (default 1)
- `per_page` (number): Results per page (default 20)
- `sort` (string): Sort field, e.g. "-_created_at" for newest first

### `search_customers` (~81 tokens)

Search customers by name, email or customer number (partial match). Searches across email, first_name, last_name and customer_number simultaneously. For listing all customers use list_customers.

Input parameters:

- `per_page` (number): Max results per field (default 20)
- `query` (string, required): Search term (min 2 characters recommended; empty string lists all)

### `get_customer` (~34 tokens)

Get full details of a single customer by ID, including their shipping and billing addresses.

Input parameters:

- `id` (string, required): Customer ID

### `create_customer` (~85 tokens)

Create a new customer account in B2Bware.

Input parameters:

- `company_id` (number): Link to B2B company (use list_companies)
- `customer_group_id` (number)
- `email` (string, required)
- `first_name` (string)
- `last_name` (string)
- `phone` (string)
- `role_id` (number)

### `update_customer` (~112 tokens)

Update an existing customer account (name, phone, status, company_id, role_id, etc.).

Input parameters:

- `company_id` (number)
- `customer_group_id` (number)
- `email_verified` (boolean)
- `first_name` (string)
- `id` (string, required): Customer ID
- `last_name` (string)
- `phone` (string)
- `role_id` (number)
- `status` (string): Customer status, e.g. "active" or "inactive"

### `list_customer_addresses` (~29 tokens)

List all shipping and billing addresses for a customer.

Input parameters:

- `customer_id` (string, required): Customer ID

### `list_companies` (~98 tokens)

[customer] List B2B companies from CustomerHub (/companies). No separate CompanyHub. Use search_companies for multi-field lookup. Custom fields via set_company_attributes (AttributesHub company group).

Input parameters:

- `email` (string): Filter by email (partial match)
- `page` (number)
- `per_page` (number)
- `sort` (string)
- `vat_number` (string): Filter by VAT (partial match)

### `search_companies` (~62 tokens)

[customer] Search companies by name, email, VAT number, or company_number (partial match, deduplicated). CustomerHub /companies endpoint.

Input parameters:

- `per_page` (number): Max results per field (default 20)
- `query` (string, required)

### `get_company` (~74 tokens)

[customer] Get a company by ID from CustomerHub. Default includes: customers, shippingAddresses, billingAddresses. Add attributeValues,attributeValues.value for custom company attributes.

Input parameters:

- `id` (string, required)
- `include` (string): e.g. customers,shippingAddresses,billingAddresses,attributeValues,attributeValues.value

### `create_company` (~174 tokens)

[customer] Create a B2B company in CustomerHub. Optional address fields map to the company record. Requires admin/write scope.

Input parameters:

- `address_line_1` (string)
- `city` (string)
- `company_number` (string)
- `country` (string)
- `credit_limit` (number)
- `customer_group_id` (number)
- `email` (string)
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `name` (string, required)
- `notes` (string)
- `payment_terms` (string)
- `phone` (string)
- `registration_number` (string)
- `vat_number` (string)
- `website` (string)
- `zip` (string)

### `update_company` (~150 tokens)

[customer] Update a company by ID (partial fields). CustomerHub PUT /companies/{id}.

Input parameters:

- `address_line_1` (string)
- `city` (string)
- `company_number` (string)
- `country` (string)
- `credit_limit` (number)
- `customer_group_id` (number)
- `email` (string)
- `id` (string, required)
- `name` (string)
- `notes` (string)
- `payment_terms` (string)
- `phone` (string)
- `registration_number` (string)
- `vat_number` (string)
- `website` (string)
- `zip` (string)

### `delete_company` (~32 tokens)

[customer] Delete a company by ID. CustomerHub DELETE /companies/{id}.

Input parameters:

- `id` (string, required)

### `bulk_create_companies` (~38 tokens)

[customer] Create up to 100 companies (partial success). Same fields as create_company per item.

Input parameters:

- `companies` (array, required)

### `create_company_address` (~131 tokens)

[customer] Create shipping and/or billing address for a company (type: billing | shipping | both).

Input parameters:

- `address_line_1` (string, required)
- `address_line_2` (string)
- `city` (string, required)
- `company` (string)
- `company_id` (number, required)
- `country` (string, required): ISO-2 or full country name
- `first_name` (string)
- `is_default` (boolean)
- `last_name` (string)
- `name` (string)
- `type` (string, required)
- `zip` (string, required)

### `list_company_customers` (~34 tokens)

[customer] List customers linked to a company (company_id on customer records).

Input parameters:

- `company_id` (string, required)

### `create_shipping_address` (~158 tokens)

Create a shipping address for a customer. Country accepts ISO-2 (e.g. "AT") or full name (e.g. "Austria") — both are normalised automatically.

Input parameters:

- `address_line_1` (string, required)
- `city` (string, required)
- `company` (string)
- `country` (string, required): Country as ISO-2 code ("AT") or full name ("Austria")
- `customer_id` (number, required)
- `first_name` (string)
- `last_name` (string)
- `name` (string): Display name for the address, e.g. "John Doe" or company name. Auto-generated from first_name + last_name if omitted.
- `zip` (string, required)

### `create_billing_address` (~147 tokens)

Create a billing address for a customer. Country accepts ISO-2 (e.g. "DE") or full name (e.g. "Germany") — both are normalised automatically.

Input parameters:

- `address_line_1` (string, required)
- `city` (string, required)
- `company` (string)
- `country` (string, required): Country as ISO-2 code ("AT") or full name ("Austria")
- `customer_id` (number, required)
- `first_name` (string)
- `last_name` (string)
- `name` (string): Display name for the address. Auto-generated from first_name + last_name if omitted.
- `zip` (string, required)

### `login` (~41 tokens)

Authenticate a customer with email and password. Returns a bearer token that can be used for subsequent requests.

Input parameters:

- `email` (string, required)
- `password` (string, required)

### `register` (~50 tokens)

Register a new customer account.

Input parameters:

- `email` (string, required)
- `first_name` (string, required)
- `last_name` (string, required)
- `password` (string, required)
- `phone` (string)

### `create_category` (~197 tokens)

[catalog] Create a B2Bware product category. Call list_categories first to obtain parent_id values for subcategories. Use for demo catalog provisioning.

Input parameters:

- `description` (string)
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `image_fetch_url` (string): Remote URL for CDN ingest
- `image_file` (string): Base64 for CDN upload
- `image_file_name` (string)
- `image_url` (string): Remote image URL (URL-only mode)
- `is_active` (boolean): Default true
- `language` (string): Translation locale, e.g. "de"
- `name` (string, required): Category display name (required)
- `parent_id` (number): Parent category ID; omit for top-level
- `position` (number): Sort order
- `slug` (string): URL slug; auto-generated if omitted

### `update_category` (~81 tokens)

[catalog] Update a category by ID (partial fields).

Input parameters:

- `description` (string)
- `id` (string, required): Category ID
- `image_url` (string)
- `is_active` (boolean)
- `name` (string)
- `parent_id` (number)
- `position` (number)
- `slug` (string)

### `delete_category` (~34 tokens)

[catalog] Delete a category by ID. May fail if products are still assigned.

Input parameters:

- `id` (string, required): Category ID

### `bulk_create_categories` (~59 tokens)

[catalog] Create up to 100 categories in one call (partial success). Items should list parents before children or include parent_id; order is normalized top-down.

Input parameters:

- `categories` (array, required): Array of category objects (same fields as create_category)

### `create_product` (~372 tokens)

[catalog] Create a new simple product with price, stock, categories, optional images and tier prices. Call list_categories first for valid category_ids. SKU must be unique.

Input parameters:

- `additional_image_urls` (array): Gallery URLs (same passthrough semantics as main_image_url)
- `attributes` (object): Custom attributes map (attribute_id or key → value)
- `brand` (string): Legacy text brand; prefer brand_id from create_brand
- `brand_id` (number): Brand id (attribute_value id from create_brand / list_brands)
- `category_ids` (array)
- `description` (string)
- `ean` (string): EAN-13 / GTIN (check digit validated)
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `language` (string)
- `license_configuration` (object): For product_type license
- `main_image_fetch_url` (string): Remote URL for server-side CDN ingest (maps to media[].file)
- `main_image_file` (string): Base64 file content for CDN upload (ProductHub media[].file)
- `main_image_file_name` (string): Original filename for CDN path
- `main_image_url` (string): External image URL — URL-only mode (no CDN ingest)
- `name` (string, required)
- `price` (number, required): Net regular price
- `product_type` (string)
- `short_description` (string)
- `sku` (string, required)
- `stock` (number): Default 0
- `tax_class_id` (number)
- `tier_prices` (array)
- `warehouse_id` (number): Default warehouse ID (default 1)
- `weight` (number): Product weight (unit per portal config)

### `update_product` (~204 tokens)

[catalog] Update a product by ID (partial fields). Supports price, stock, categories, media URLs.

Input parameters:

- `additional_image_urls` (array): Gallery URLs (same passthrough semantics as main_image_url)
- `brand` (string)
- `brand_id` (number): Set to null to remove brand link
- `category_ids` (array)
- `id` (string, required)
- `main_image_fetch_url` (string): Remote URL for server-side CDN ingest (maps to media[].file)
- `main_image_file` (string): Base64 file content for CDN upload (ProductHub media[].file)
- `main_image_file_name` (string): Original filename for CDN path
- `main_image_url` (string)
- `name` (string)
- `price` (number)
- `sku` (string)
- `status` (string): draft | private | public
- `stock` (number)
- `weight` (number)

### `delete_product` (~24 tokens)

[catalog] Delete a product by ID.

Input parameters:

- `id` (string, required)

### `upsert_product` (~150 tokens)

[catalog] Create or update a product by SKU (idempotent). Prefer for imports and MCP retries. Same fields as create_product.

Input parameters:

- `action` (string)
- `brand` (string)
- `brand_id` (number)
- `category_ids` (array)
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `language` (string)
- `main_image_url` (string)
- `name` (string, required)
- `price` (number, required)
- `sku` (string, required)
- `stock` (number)
- `tier_prices` (array)
- `weight` (number)

### `bulk_create_products` (~71 tokens)

[catalog] Create or upsert up to 100 products (partial success). Uses SKU upsert per item for idempotency.

Input parameters:

- `products` (array, required)
- `use_upsert` (boolean): If true (default), PUT upsert/single per SKU; if false, POST create only

### `create_product_tier_price` (~69 tokens)

[catalog] Add a quantity tier price to an existing product. Fetches current tiers and appends one row.

Input parameters:

- `customer_group_id` (number)
- `price` (number, required): Net tier price
- `product_id` (number, required)
- `quantity_min` (number, required)

### `attach_variation_attributes` (~53 tokens)

[catalog] Attach variation attributes to a configurable parent product. Required before generate_product_variations.

Input parameters:

- `attributes` (array, required): Variation attributes with values
- `product_id` (string, required): Configurable parent product ID

### `generate_product_variations` (~54 tokens)

[catalog] Generate child variation products from a configurable parent (PUT /createVariations).

Input parameters:

- `body` (object): Optional API body passthrough
- `product_id` (string, required): Configurable parent product ID

### `list_product_variations` (~40 tokens)

[catalog] List child variations and variation attributes for a configurable parent product.

Input parameters:

- `language` (string)
- `product_id` (string, required)

### `bulk_update_stock` (~38 tokens)

[catalog] Bulk upsert stock records (POST /stock/upsert/bulk, max ~1000).

Input parameters:

- `stock` (array, required)

### `bulk_upsert_prices` (~38 tokens)

[catalog] Bulk upsert prices (POST /prices/upsert/bulk, max ~1000).

Input parameters:

- `prices` (array, required)

### `create_brand` (~171 tokens)

[catalog] Create a product brand/manufacturer. Brands are stored as attribute values on the Brand/Manufacturer attribute (AttributesHub). Names should be unique. Call list_brands first to avoid duplicates. Returns { id, name, slug, ... } where id is the attribute_value id for use as brand_id on create_product.

Input parameters:

- `description` (string)
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `is_active` (boolean): Default true
- `logo_url` (string): Remote logo URL (stored as swatch_value when supported)
- `name` (string, required)
- `position` (number)
- `slug` (string): URL slug; auto-generated from name if omitted
- `website` (string)

### `update_brand` (~93 tokens)

[catalog] Update a brand by attribute_value id (brand id from create_brand / list_brands).

Input parameters:

- `description` (string)
- `id` (string, required): Brand id (attribute_value id)
- `is_active` (boolean)
- `logo_url` (string)
- `name` (string)
- `position` (number)
- `slug` (string)
- `website` (string)

### `delete_brand` (~53 tokens)

[catalog] Delete a brand (attribute value). Fails with 409 if products still use it unless force=true.

Input parameters:

- `force` (boolean): Delete even when products reference this brand
- `id` (string, required)

### `get_brand` (~28 tokens)

[catalog] Get a brand by id (attribute_value id).

Input parameters:

- `id` (string, required)

### `list_brands` (~82 tokens)

[catalog] List brands with pagination. Optional search matches brand name (partial). Filter is_active is applied client-side when stored in meta_data.

Input parameters:

- `is_active` (boolean)
- `page` (number)
- `per_page` (number)
- `search` (string)
- `sort` (string): e.g. value or -value

### `bulk_create_brands` (~38 tokens)

[catalog] Create up to 100 brands (partial success). Same fields as create_brand per item.

Input parameters:

- `brands` (array, required)

### `create_attribute` (~389 tokens)

[attributes] Create an attribute definition in AttributesHub. Set entity_scope (product, customer, order, company, category) or group_id. Brands use a product-scoped attribute (e.g. Brand/Manufacturer) with values via create_attribute_value / create_brand.

Input parameters:

- `code` (string, required): Snake_case preferred; pH → ph, spaces → underscores (auto-normalised)
- `default_value`: Default value when entity has no assignment
- `display_options` (object): AttributesHub display_options JSON
- `entity_scope` (string): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).
- `group_id` (number): Overrides entity_scope when set
- `is_filterable` (boolean): Storefront layered navigation — maps to used_for_filtering
- `is_required` (boolean): Maps to API required
- `is_searchable` (boolean): Filterable with results — maps to filterable_with_results
- `label` (string, required)
- `position` (number)
- `show_in_cart` (boolean): Display under line items in storefront cart (product group)
- `type` (string, required)
- `use_for_admin_filtering` (boolean): Admin grid filter by attribute_code — shares backfill with use_for_sorting
- `use_for_sorting` (boolean): Admin/list sort by attribute_code — triggers background backfill
- `use_in_checkout` (boolean): Expose on storefront checkout (order group only)
- `use_in_notifications` (boolean): Expose as NotificationHub email template variable
- `use_in_search` (boolean): Include in product keyword search (product group, searchable types only)
- `validation_rules` (object): Stored in meta_data.validation on the attribute
- `visible_on_product_page` (boolean): Show on product detail page (product group)

### `update_attribute` (~282 tokens)

[attributes] Update an attribute definition by id. All storefront/admin flags from create are supported.

Input parameters:

- `default_value`: Default value when entity has no assignment
- `display_options` (object): AttributesHub display_options JSON
- `id` (string, required)
- `is_filterable` (boolean): Storefront layered navigation — maps to used_for_filtering
- `is_required` (boolean): Maps to API required
- `is_searchable` (boolean): Filterable with results — maps to filterable_with_results
- `label` (string)
- `position` (number)
- `show_in_cart` (boolean): Display under line items in storefront cart (product group)
- `use_for_admin_filtering` (boolean): Admin grid filter by attribute_code — shares backfill with use_for_sorting
- `use_for_sorting` (boolean): Admin/list sort by attribute_code — triggers background backfill
- `use_in_checkout` (boolean): Expose on storefront checkout (order group only)
- `use_in_notifications` (boolean): Expose as NotificationHub email template variable
- `use_in_search` (boolean): Include in product keyword search (product group, searchable types only)
- `validation_rules` (object): Stored in meta_data.validation on the attribute
- `visible_on_product_page` (boolean): Show on product detail page (product group)

### `delete_attribute` (~25 tokens)

[attributes] Delete an attribute definition by id.

Input parameters:

- `id` (string, required)

### `get_attribute` (~47 tokens)

[attributes] Get an attribute by id. Include values,group for full context.

Input parameters:

- `id` (string, required)
- `include` (string): e.g. values,group,translation

### `list_attributes` (~117 tokens)

[attributes] List attribute definitions. Filter by entity_scope or group_id. Product group includes Brand/Manufacturer and all catalog facets.

Input parameters:

- `entity_scope` (string): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).
- `group_id` (number)
- `include` (string)
- `page` (number)
- `per_page` (number)
- `type` (string): Attribute type filter, e.g. select, text

### `bulk_create_attributes` (~72 tokens)

[attributes] Bulk create/update attribute definitions (AttributesHub insert/bulk). Max 100 items.

Input parameters:

- `attributes` (array, required)
- `entity_scope` (string): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).

### `create_attribute_value` (~127 tokens)

[attributes] Create a predefined option (select/multiselect/swatch). swatch_value is forwarded to DataHub but may return null until backend persists it (verify with list_attribute_values). For colors without hex support, use value labels (e.g. "blue") and assign via auto_create_value on products.

Input parameters:

- `attribute_id` (number, required)
- `label` (string)
- `position` (number)
- `swatch_value` (string): Hex (#RRGGBB) or image URL — sent to API; persistence varies
- `value` (string, required)

### `bulk_create_attribute_values` (~72 tokens)

[attributes] Create up to 100 attribute values in one call (partial success, parallel). Same fields as create_attribute_value per item. No DataHub bulk route — MCP orchestrates POSTs.

Input parameters:

- `attribute_id` (number): Default attribute_id when omitted per item
- `values` (array, required)

### `update_attribute_value` (~56 tokens)

[attributes] Update an attribute value by id.

Input parameters:

- `id` (string, required)
- `label` (string)
- `position` (number)
- `swatch_value` (string)
- `value` (string)

### `delete_attribute_value` (~26 tokens)

[attributes] Delete an attribute value by id.

Input parameters:

- `id` (string, required)

### `get_attribute_value` (~40 tokens)

[attributes] Get a single attribute value by id.

Input parameters:

- `id` (string, required)
- `include` (string): e.g. attribute,translation

### `list_attribute_values` (~59 tokens)

[attributes] List values for an attribute_id (all options for that field).

Input parameters:

- `attribute_id` (number, required)
- `page` (number)
- `per_page` (number)
- `search` (string): Partial match on value

### `create_attribute_group` (~79 tokens)

[attributes] Create an attribute group for a scope (usually pre-seeded per tenant).

Input parameters:

- `entity_scope` (string, required): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).
- `name` (string, required)
- `position` (number): display_order

### `update_attribute_group` (~38 tokens)

[attributes] Update an attribute group.

Input parameters:

- `id` (string, required)
- `name` (string)
- `position` (number)

### `delete_attribute_group` (~26 tokens)

[attributes] Delete an attribute group by id.

Input parameters:

- `id` (string, required)

### `get_attribute_group` (~26 tokens)

[attributes] Get an attribute group by id.

Input parameters:

- `id` (string, required)

### `list_attribute_groups` (~83 tokens)

[attributes] List attribute groups (Product, Category, Order, Customer, Company). Use entity_scope to filter.

Input parameters:

- `entity_scope` (string): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).
- `page` (number)
- `per_page` (number)

### `list_attribute_group_types` (~23 tokens)

[attributes] List valid attribute group type strings from the API.

### `list_attribute_types` (~33 tokens)

[attributes] List valid attribute definition types from AttributesHub (e.g. select, text, datetime, swatch).

### `resync_sortable_attributes` (~38 tokens)

[attributes] Queue background resync for all attributes with use_for_sorting or use_for_admin_filtering. Returns 202 Accepted.

### `resync_sortable_attribute` (~45 tokens)

[attributes] Queue background resync for one sortable/admin-filterable attribute. Returns 202 or 422 if flags not enabled.

Input parameters:

- `attribute_id` (number, required)

### `set_entity_attributes` (~123 tokens)

[attributes] Assign attributes on any entity: product, category, order, customer, or company. For select/swatch use attribute_value_id (value is resolved automatically) or attribute_id + value. merge=true keeps other attributes on the entity.

Input parameters:

- `attributes` (array, required)
- `entity_id` (string, required)
- `entity_scope` (string, required): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).
- `merge` (boolean): Default false (replace listed attributes only)

### `get_entity_attributes` (~64 tokens)

[attributes] Read attribute assignments for any entity scope.

Input parameters:

- `entity_id` (string, required)
- `entity_scope` (string, required): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).

### `remove_entity_attribute` (~74 tokens)

[attributes] Remove one attribute from an entity by attribute_id.

Input parameters:

- `attribute_id` (number, required)
- `entity_id` (string, required)
- `entity_scope` (string, required): Attribute group scope: product, category, order, customer, company. Maps to AttributesHub group types (e.g. brands = product group).

### `set_product_attributes` (~45 tokens)

[attributes] Alias: set_entity_attributes with entity_scope=product.

Input parameters:

- `attributes` (array, required)
- `merge` (boolean)
- `product_id` (number, required)

### `get_product_attributes` (~32 tokens)

[attributes] Alias: get_entity_attributes for products (includes brand summary).

Input parameters:

- `product_id` (string, required)

### `remove_product_attribute` (~36 tokens)

[attributes] Alias: remove_entity_attribute for products.

Input parameters:

- `attribute_id` (number, required)
- `product_id` (string, required)

### `set_company_attributes` (~54 tokens)

[attributes] Assign AttributesHub fields on a CustomerHub company (entity_scope=company, group id 5).

Input parameters:

- `attributes` (array, required)
- `company_id` (string, required)
- `merge` (boolean)

### `get_company_attributes` (~27 tokens)

[attributes] Read custom attributes on a company.

Input parameters:

- `company_id` (string, required)

### `remove_company_attribute` (~35 tokens)

[attributes] Remove one attribute from a company.

Input parameters:

- `attribute_id` (number, required)
- `company_id` (string, required)

### `set_customer_attributes` (~44 tokens)

[attributes] Assign attributes on a customer (Customer Attributes group).

Input parameters:

- `attributes` (array, required)
- `customer_id` (string, required)
- `merge` (boolean)

### `get_customer_attributes` (~26 tokens)

[attributes] Read attributes on a customer.

Input parameters:

- `customer_id` (string, required)

### `remove_customer_attribute` (~35 tokens)

[attributes] Remove one attribute from a customer.

Input parameters:

- `attribute_id` (number, required)
- `customer_id` (string, required)

### `set_order_attributes` (~44 tokens)

[attributes] Assign attributes on an order (Order Attributes group).

Input parameters:

- `attributes` (array, required)
- `merge` (boolean)
- `order_id` (string, required)

### `get_order_attributes` (~26 tokens)

[attributes] Read attributes on an order.

Input parameters:

- `order_id` (string, required)

### `remove_order_attribute` (~35 tokens)

[attributes] Remove one attribute from an order.

Input parameters:

- `attribute_id` (number, required)
- `order_id` (string, required)

### `link_customer_to_company` (~92 tokens)

[b2b] Assign a customer to a company. Use list_roles for valid role_id values. Sets company_id (and optional role_id) on the customer record.

Input parameters:

- `company_id` (number, required)
- `customer_id` (number, required)
- `is_primary_contact` (boolean): Stored as customer note when true
- `role_code` (string)
- `role_id` (number)

### `attach_customer_to_company` (~78 tokens)

[b2b] Alias for link_customer_to_company (spec-compatible name).

Input parameters:

- `company_id` (number, required)
- `customer_id` (number, required)
- `is_primary_contact` (boolean)
- `role` (string): Maps to role_code
- `role_code` (string)
- `role_id` (number)

### `unlink_customer_from_company` (~35 tokens)

[b2b] Remove a customer from their company (clears company_id).

Input parameters:

- `customer_id` (number, required)

### `detach_customer_from_company` (~41 tokens)

[b2b] Alias for unlink_customer_from_company.

Input parameters:

- `company_id` (number): Optional verification only
- `customer_id` (number, required)

### `list_roles` (~33 tokens)

[b2b] List customer roles (for link_customer_to_company role_id).

Input parameters:

- `per_page` (number)

### `create_customer_full` (~142 tokens)

[b2b] Create a customer with optional company link and billing/shipping addresses in one call. Use list_companies or search_companies first if you need an existing company_id.

Input parameters:

- `billing_address` (object)
- `company_id` (number)
- `customer_group_id` (number)
- `email` (string, required)
- `first_name` (string)
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `last_name` (string)
- `phone` (string)
- `role_id` (number)
- `shipping_address` (object)

### `delete_customer` (~26 tokens)

[b2b] Delete a customer by ID.

Input parameters:

- `id` (string, required)

### `update_shipping_address` (~115 tokens)

[b2b] Update a customer shipping address by ID.

Input parameters:

- `address_line_1` (string)
- `address_line_2` (string)
- `city` (string)
- `company` (string)
- `country` (string): ISO-2 or full country name
- `first_name` (string)
- `id` (string, required)
- `is_default` (boolean)
- `last_name` (string)
- `name` (string)
- `zip` (string)

### `update_billing_address` (~116 tokens)

[b2b] Update a customer billing address by ID.

Input parameters:

- `address_line_1` (string)
- `address_line_2` (string)
- `city` (string)
- `company` (string)
- `country` (string): ISO-2 or full country name
- `first_name` (string)
- `id` (string, required)
- `is_default` (boolean)
- `last_name` (string)
- `name` (string)
- `zip` (string)

### `delete_shipping_address` (~28 tokens)

[b2b] Delete a shipping address by ID.

Input parameters:

- `id` (string, required)

### `delete_billing_address` (~29 tokens)

[b2b] Delete a billing address by ID.

Input parameters:

- `id` (string, required)

### `bulk_create_customers` (~41 tokens)

[b2b] Create up to 100 customers (partial success). Same shape as create_customer_full per item.

Input parameters:

- `customers` (array, required)

### `create_order` (~257 tokens)

[orders-admin] Create an order directly in OrderHub (demo/backfill). Does NOT run cart checkout — use for historical or manual orders. Call list_shipping_methods, list_billing_methods, and list_customer_addresses first. Valid status: draft, pending, processing, completed, canceled, invoiced, shipped, paid, etc.

Input parameters:

- `billing_address_id` (number, required)
- `billing_method_id` (number, required)
- `customer_comment` (string): Added as order comment after create
- `customer_id` (number, required)
- `external_reference` (string): Stored as external_id
- `idempotency_key` (string): Optional. Replays the same result within 24h without creating duplicates.
- `internal_notes` (string): Added as internal order comment after create
- `line_items` (array, required)
- `order_date` (string): ISO-8601 backfill date (_created_at)
- `order_number` (string)
- `shipping_address_id` (number, required)
- `shipping_method_id` (number, required)
- `source` (string): Order source tag: manual, pdf, edi, storefront, api (stored as attribute)
- `status` (string): Default pending. Use completed for demo history.

### `bulk_create_orders` (~40 tokens)

[orders-admin] Create up to 100 orders (partial success). Each item uses the same fields as create_order.

Input parameters:

- `orders` (array, required)

### `update_order` (~125 tokens)

[orders-admin] Update order fields (status, addresses, methods, order_date, external_reference). Does not replace line items — use update_order_line_items for that.

Input parameters:

- `billing_address_id` (number)
- `billing_method_id` (number)
- `external_reference` (string)
- `order_date` (string): ISO-8601 → _created_at
- `order_id` (string, required)
- `order_number` (string)
- `shipping_address_id` (number)
- `shipping_method_id` (number)
- `status` (string)

### `update_order_line_items` (~54 tokens)

[orders-admin] Replace or update line items on an existing order via PUT /orders/{id}. Same line_items shape as create_order.

Input parameters:

- `line_items` (array, required)
- `order_id` (string, required)

### `cancel_order` (~42 tokens)

[orders-admin] Cancel an order (status → canceled). Optional reason stored as order comment.

Input parameters:

- `order_id` (string, required)
- `reason` (string)

### `delete_order` (~28 tokens)

[orders-admin] Permanently delete an order by ID.

Input parameters:

- `order_id` (string, required)

### `create_order_comment` (~50 tokens)

[orders-admin] Add a comment to an existing order (POST /order-comments). Use for customer notes or internal support annotations.

Input parameters:

- `comment` (string, required)
- `order_id` (string, required)

### `deploy_demo_catalog` (~41 tokens)

[orders-admin] Deploy the built-in ProductHub demo catalog (categories + sample products). Use on empty demo instances only — may duplicate data if run twice.

### `list_available_events` (~34 tokens)

[eventhub] List event slugs available for webhook subscriptions. EventHub GET /event-subscriptions/available-events/list.

### `list_event_subscriptions` (~50 tokens)

[eventhub] List webhook subscriptions with pagination. EventHub GET /event-subscriptions.

Input parameters:

- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_event_subscription` (~37 tokens)

[eventhub] Get a webhook subscription by ID. EventHub GET /event-subscriptions/{id}.

Input parameters:

- `id` (string, required)

### `create_event_subscription` (~61 tokens)

[eventhub] Create a webhook subscription. EventHub POST /event-subscriptions. Pass the full API body (name, event_slug, target_url, payload_includes, conditions, …).

Input parameters:

- `body` (object, required): Event subscription payload passthrough

### `update_event_subscription` (~50 tokens)

[eventhub] Update a webhook subscription by ID. EventHub PUT /event-subscriptions/{id}.

Input parameters:

- `body` (object, required): Partial subscription payload passthrough
- `id` (string, required)

### `pause_event_subscription` (~40 tokens)

[eventhub] Pause a subscription (stop dispatching). EventHub POST /event-subscriptions/{id}/pause.

Input parameters:

- `id` (string, required)

### `resume_event_subscription` (~37 tokens)

[eventhub] Resume a paused subscription. EventHub POST /event-subscriptions/{id}/resume.

Input parameters:

- `id` (string, required)

### `test_event_subscription` (~38 tokens)

[eventhub] Send a synthetic test delivery. EventHub POST /event-subscriptions/{id}/test.

Input parameters:

- `id` (string, required)

### `list_event_delivery_logs` (~54 tokens)

[eventhub] List webhook delivery attempts (audit log). EventHub GET /event-delivery-logs.

Input parameters:

- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_event_delivery_log` (~44 tokens)

[eventhub] Get a single delivery attempt with request/response details. EventHub GET /event-delivery-logs/{id}.

Input parameters:

- `id` (string, required)

### `list_coupons` (~47 tokens)

[rulehub] List promotion coupons. RuleHub GET /coupons.

Input parameters:

- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_coupon` (~34 tokens)

[rulehub] Get a coupon by ID. RuleHub GET /coupons/{id}.

Input parameters:

- `id` (string, required)

### `create_coupon` (~50 tokens)

[rulehub] Create a coupon. RuleHub POST /coupons. Pass the full API body (code, cart_price_rule_ids, …).

Input parameters:

- `body` (object, required): Coupon payload passthrough

### `update_coupon` (~47 tokens)

[rulehub] Update a coupon by ID. RuleHub PUT /coupons/{id}.

Input parameters:

- `body` (object, required): Partial coupon payload passthrough
- `id` (string, required)

### `list_cart_price_rules` (~51 tokens)

[rulehub] List cart-level price rules. RuleHub GET /cart-price-rules.

Input parameters:

- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_cart_price_rule` (~40 tokens)

[rulehub] Get a cart price rule by ID. RuleHub GET /cart-price-rules/{id}.

Input parameters:

- `id` (string, required)

### `list_cart_validation_rules` (~53 tokens)

[rulehub] List cart validation rules (checkout constraints). RuleHub GET /cart-validation-rules.

Input parameters:

- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_rule_condition_schema` (~69 tokens)

[rulehub] Get condition-builder schema for rule targets. RuleHub GET /conditions/schema or /conditions/schema/{target}. Targets: cart, catalog, shipping, validation.

Input parameters:

- `target` (string): Optional target slug (cart, catalog, shipping, validation). Omit for all targets.

### `list_locales` (~41 tokens)

[settings] List all available locales from SettingsHub (e.g. en_US, de_DE). GET /api/v1/apps/settings-hub/locales.

### `list_countries` (~38 tokens)

[settings] List all countries with name, iso2, and iso3 codes. GET /api/v1/apps/settings-hub/countries.

### `list_currencies` (~39 tokens)

[settings] List all currencies (live rates from openexchangerates.org with fallback). GET /api/v1/apps/settings-hub/currencies.

### `list_settings_config` (~76 tokens)

[settings] List platform configuration entries (paginated). GET /api/v1/apps/settings-hub/config. Filter by config_code (partial match).

Input parameters:

- `config_code` (string): Filter by config key (partial match)
- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_settings_config` (~33 tokens)

[settings] Get a single configuration entry by ID. GET /config/{id}.

Input parameters:

- `id` (string, required)

### `clear_app_cache` (~53 tokens)

[settings] Clear application cache for a specific installation. DELETE /clearAppCache/{installation_key}. Requires admin/write scope.

Input parameters:

- `installation_key` (string, required): Installation key (URL path segment only, not a header)

### `list_automation_flows` (~89 tokens)

[automation] List automation flows (paginated). GET /api/v1/apps/automation-hub/flows. Filter by name or status when supported.

Input parameters:

- `name` (string): Filter by flow name (partial match)
- `page` (number)
- `per_page` (number)
- `sort` (string)
- `status` (string): Filter by flow status

### `get_automation_flow` (~34 tokens)

[automation] Get a single automation flow by ID. GET /flows/{id}.

Input parameters:

- `id` (string, required)

### `list_available_automation_triggers` (~36 tokens)

[automation] List triggers available for new flows (discovered at runtime). GET /flows/available-triggers/list.

### `list_available_automation_actions` (~38 tokens)

[automation] List actions available for flow steps. GET /flows/available-actions/list (falls back to /available-actions/grouped).

### `list_flow_runs` (~82 tokens)

[automation] List flow execution runs (paginated). GET /flow-runs. Filter by flow_id or status when needed.

Input parameters:

- `flow_id` (string): Filter runs for a specific flow
- `page` (number)
- `per_page` (number)
- `sort` (string)
- `status` (string): Filter by run status

### `get_flow_run` (~35 tokens)

[automation] Get a single flow run by ID. GET /flow-runs/{id}.

Input parameters:

- `id` (string, required)

### `create_automation_flow` (~73 tokens)

[automation] Create a new automation flow. POST /flows. Pass the full flow payload as body (trigger, actions, conditions, name, etc.). Call list_available_automation_triggers and list_available_automation_actions first.

Input parameters:

- `body` (object, required): Flow payload sent as JSON body to POST /flows

### `list_dashboard_widgets` (~41 tokens)

[dashboard] List all widgets the current installation may render on the dashboard. GET /api/v1/apps/dashboard-hub/available-widgets. Read-only.

### `get_dashboard_layout` (~36 tokens)

[dashboard] Get the current saved dashboard layout for the installation. GET /api/v1/apps/dashboard-hub/layout. Read-only.

### `list_notifications` (~129 tokens)

[notification] List notifications from NotificationHub (paginated, filterable). Filter by status, priority, notifiable_type/id. Include notificationType,attempts,creator.

Input parameters:

- `include` (string): e.g. notificationType,attempts,creator
- `notifiable_id` (number)
- `notifiable_type` (string): e.g. Customers, Users
- `page` (number)
- `per_page` (number)
- `sort` (string): e.g. -_created_at
- `status` (string): pending | sent | failed | partial | read

### `get_notification` (~45 tokens)

[notification] Get a single notification by ID from NotificationHub.

Input parameters:

- `id` (string, required)
- `include` (string): e.g. notificationType,attempts,creator

### `create_notification` (~119 tokens)

[notification] Create a notification in NotificationHub. Requires notification_type_id (from list_notification_types), notifiable target, title, message. Channels: email, database, broadcast, sms, push, slack.

Input parameters:

- `channels` (array)
- `message` (string, required)
- `notifiable_id` (number, required)
- `notifiable_type` (string, required): Polymorphic type e.g. Customers
- `notification_type_id` (number, required)
- `priority` (number): 1–10 (optional)
- `title` (string, required)

### `send_notification` (~31 tokens)

[notification] Dispatch a created notification via POST /notifications/{id}/send.

Input parameters:

- `id` (string, required)

### `list_notification_types` (~50 tokens)

[notification] List notification types (templates, channels, slugs) from GET /types.

Input parameters:

- `page` (number)
- `per_page` (number)
- `sort` (string)

### `get_notification_stats` (~22 tokens)

[notification] Aggregate notification statistics from GET /notifications/stats.

### `list_license_keys` (~120 tokens)

[license] List license keys from LicenseHub (paginated, filterable). Statuses: available, assigned, activated, expired, revoked. Include usageLogs,pool,product,order.

Input parameters:

- `include` (string): e.g. usageLogs,pool,product,order
- `license_key` (string): Partial match filter
- `page` (number)
- `per_page` (number)
- `product_id` (number)
- `sort` (string): e.g. -expiration_date
- `status` (string)

### `get_license_key` (~48 tokens)

[license] Get a single license key by ID from LicenseHub.

Input parameters:

- `id` (string, required)
- `include` (string): e.g. usageLogs,pool,product,order

### `generate_license_keys` (~108 tokens)

[license] Generate license keys via POST /license-keys/generate. Template uses X as random placeholder (e.g. XXXX-XXXX-XXXX-XXXX). Max quantity 1000.

Input parameters:

- `allowed_chars` (string): Restrict generated character set
- `mode` (string): Default quantity_per_licence
- `product_id` (number, required)
- `quantity` (number, required): 1–1000
- `template` (string, required): Key format, X = random char

### `validate_license_key` (~49 tokens)

[license] Validate a license key via POST /license-keys/{id}/validate.

Input parameters:

- `domain` (string)
- `id` (string, required)
- `ip_address` (string)

### `activate_license_key` (~57 tokens)

[license] Activate a license key via POST /license-keys/{id}/activate.

Input parameters:

- `assigned_to` (string)
- `domain` (string)
- `id` (string, required)
- `ip_address` (string)

### `upload_media` (~152 tokens)

[media] Upload or attach media via POST /media. Provide file (base64) for CDN ingest or media_url for URL reference. mediable_type examples: Products, Companies.

Input parameters:

- `alt_text` (string)
- `file` (string): Base64 file content for CDN upload
- `file_name` (string): Original filename when using file (base64)
- `is_primary` (boolean)
- `media_type` (string, required)
- `media_url` (string): External URL (stored as-is if not ingested)
- `mediable_id` (number, required)
- `mediable_type` (string, required): Polymorphic parent type e.g. Products
- `sort_order` (number)

### `list_media` (~107 tokens)

[media] List media records from MediaHub. Filter by mediable_type, mediable_id, media_type, is_primary.

Input parameters:

- `include` (string): e.g. mediable
- `is_primary` (boolean)
- `media_type` (string)
- `mediable_id` (number)
- `mediable_type` (string)
- `page` (number)
- `per_page` (number)
- `sort` (string): e.g. sort_order

### `get_media` (~41 tokens)

[media] Get a single media record by ID from MediaHub.

Input parameters:

- `id` (string, required)
- `include` (string): e.g. mediable

### `set_primary_media` (~37 tokens)

[media] Set a media record as primary for its parent via POST /media/{id}/primary.

Input parameters:

- `id` (string, required)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-b2bware-mcp-server/mcp#diagnostics

## Score history

- 2026-08-03: 74
- 2026-08-02: 74
- 2026-08-01: 73
- 2026-07-31: 73
- 2026-07-30: 68
- 2026-07-29: 67
- 2026-07-28: 67
- 2026-07-27: 66
- 2026-07-26: 65

## Links

- Remote endpoint: https://mcp.b2bware.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-b2bware-mcp-server/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-b2bware-mcp-server/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-b2bware-mcp-server/mcp
