# SkuVault MCP by usefulapi (remote · skuvault.usefulapi.io)

MCP server for SkuVault — products, inventory, sales, purchase orders and stock adjustments.

- Trust score: 18/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `skuvault.usefulapi.io`: 18/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.md), [page](https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault)

## Channel facts

- Endpoint: `https://skuvault.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.6.3`

## 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-11-05.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the SkuVault MCP by usefulapi server?

SkuVault MCP by usefulapi is a hosted endpoint at https://skuvault.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-skuvault 'https://skuvault.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-skuvault": {
      "url": "https://skuvault.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-skuvault": {
      "type": "http",
      "url": "https://skuvault.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-skuvault]
url = "https://skuvault.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-skuvault": {
      "type": "remote",
      "url": "https://skuvault.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-skuvault --url 'https://skuvault.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-skuvault:
    url: "https://skuvault.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-skuvault": {
      "Transport": "http",
      "Url": "https://skuvault.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-skuvault -t streamable-http -u 'https://skuvault.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-skuvault": {
      "type": "http",
      "url": "https://skuvault.usefulapi.io/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-11-01 (score 18, −46)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-10-31 (score 64)

First indexed and scored.

## MCP tools (22)

### `skuvault_list_warehouses` (~87 tokens)

List warehouses

List the regular warehouses (Id and Code). The numeric Id is what the stock tools and skuvault_list_transactions need. SkuVault throttles this call to 1 per minute. POST /inventory/getWarehouses.

Input parameters:

- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.

### `skuvault_list_locations` (~117 tokens)

List locations

List the locations in enabled warehouses with warehouse, location code, parent location/container and total quantity. Heavy throttling (5/min). POST /inventory/getLocations.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.

### `skuvault_list_products` (~266 tokens)

List products

List products (not kits) with description, cost, prices, brand, supplier, classification, reorder point and quantities (on hand, available, pending, picked, incoming...). Filter by SKU or code, or by modification time. Alternate SKUs come back as separate rows (IsAlternateSKU) unless you filter. Heavy throttling (5/min). POST /products/getProducts.

Input parameters:

- `codes` (array): Only these product codes.
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `modified_after` (string): Only products modified at or after this time.
- `modified_before` (string): Only products modified before this time.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `skus` (array): Only these SKUs.

### `skuvault_get_product` (~82 tokens)

Get product

One product (not a kit) by SKU or by code: details plus all quantities (on hand, available, pending, picked, incoming, in stock). Give exactly one of sku or code. Light throttling (20/min). POST /products/getProduct.

Input parameters:

- `code` (string): Product code.
- `sku` (string): Product SKU.

### `skuvault_list_kits` (~265 tokens)

List kits

List kits with their component lines, optional available quantity and cost. Needs a modified-time window (defaults to all time). The page size is not documented: keep following `next` until a page comes back empty. Heavy throttling (5/min). POST /products/getKits.

Input parameters:

- `include_available_quantity` (boolean): Also compute the available quantity of each kit (default false: it is 0).
- `include_cost` (boolean): Also return the kit cost (default false).
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `modified_after` (string): Only kits modified at or after this time (default: all time).
- `modified_before` (string): Only kits modified before this time (default: now).
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `skus` (array): Only these kit SKUs.

### `skuvault_list_brands` (~149 tokens)

List brands

List the brands created in SkuVault (Name, IsEnabled), 1,000 per page. Heavy throttling (5/min). POST /products/getBrands.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.

### `skuvault_list_suppliers` (~148 tokens)

List suppliers

List the suppliers in the account (Name, IsEnabled), 10,000 per page. Heavy throttling (5/min). POST /products/getSuppliers.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.

### `skuvault_list_classifications` (~144 tokens)

List classifications

List product classifications and their named attributes, 1,000 per page. Heavy throttling (5/min). POST /products/getClassifications.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.

### `skuvault_get_inventory_by_location` (~224 tokens)

Get inventory by location

Where each product is stored: per SKU (or code) the locations with warehouse code, quantity and whether the location is a reserve location. Filter by SKUs or by codes (not both). Heavy throttling (5/min). POST /inventory/getInventoryByLocation.

Input parameters:

- `codes` (array): Only these product codes (the reply is then keyed by code).
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `skus` (array): Only these SKUs.

### `skuvault_get_available_quantities` (~235 tokens)

Get available quantities

Sellable (available) quantity per SKU across all warehouses, with last-modified time. Use modified_after to see only what changed. Heavy throttling (5/min). POST /inventory/getAvailableQuantities.

Input parameters:

- `expand_alternate_skus` (boolean): List alternate SKUs inside their primary row instead of as separate rows.
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `modified_after` (string): Only quantities modified at or after this time.
- `modified_before` (string): Only quantities modified before this time.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-5000 (default 1000).
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.

### `skuvault_get_item_quantities` (~220 tokens)

Get item quantities

Product quantities per SKU: total on hand, available, held, pending and picked. Filter by product codes or modification time. Heavy throttling (5/min). POST /inventory/getItemQuantities.

Input parameters:

- `codes` (array): Only these product codes.
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `modified_after` (string): Only inventory modified at or after this time.
- `modified_before` (string): Only inventory modified before this time.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.

### `skuvault_get_warehouse_quantities` (~233 tokens)

Get warehouse quantities

SKUs and quantities held in one warehouse. Get the warehouse id from skuvault_list_warehouses. Heavy throttling (5/min). POST /inventory/getWarehouseItemQuantities.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `modified_after` (string): Only quantities modified at or after this time.
- `modified_before` (string): Only quantities modified before this time.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `warehouse_id` (integer, required): SkuVault warehouse id (an integer; see skuvault_list_warehouses).

### `skuvault_list_transactions` (~333 tokens)

List inventory transactions

Inventory transaction history (adds, removes, picks, creates) with user, SKU, quantity before/after, location, reason, note and the sale it belongs to. The date range may span at most 7 days. Filter by user email, warehouse id, type, reasons or sale id. Heavy throttling (5/min). POST /inventory/getTransactions.

Input parameters:

- `exclude_reasons` (array): Leave out these transaction reasons.
- `from` (string, required): Start of the range.
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `reasons` (array): Only these transaction reasons.
- `sale_id` (string): Only transactions against this sale id.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `to` (string): End of the range (default now). At most 7 days after `from`.
- `type` (string): Transaction type (default All).
- `user_email` (string): Only this user's transactions (case-sensitive email).
- `warehouse_id` (string): Only this warehouse (the Id from skuvault_list_warehouses).

### `skuvault_list_sales` (~174 tokens)

List sales by status

List sales (orders) that are ReadyToShip (default) or Pending, or look up specific sales by order id (then status is ignored): items, kits, shipping and contact info, totals. Not paged by the vendor. Heavy throttling (5/min). POST /sales/getSales.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `order_ids` (array): Specific order ids; overrides status.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `status` (string): Sale status (default ReadyToShip).

### `skuvault_list_sales_by_date` (~265 tokens)

List sales by date

Sales within a date range, by sale date or by last-modified date: items, kits, fulfillment/processed quantities, shipping, contact info and totals. The date range may span at most 7 days. The most common way to pull orders. Heavy throttling (5/min). POST /sales/getSalesByDate.

Input parameters:

- `date_field` (string): Filter on the sale date (Sale) or on the last-modified date (Modified).
- `from` (string, required): Start of the interval (inclusive).
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `to` (string, required): End of the interval (inclusive); at most 7 days after `from`.

### `skuvault_list_sold_items` (~241 tokens)

List sold items

Items sold in a date range: date, SKU, quantity and total price per line, optionally breaking kits into components and including transfer sales. The date range may span at most 14 days. Heavy throttling (5/min). POST /sales/getSoldItems.

Input parameters:

- `break_down_kits` (boolean): Show kit components instead of the kit (SkuVault default true).
- `from` (string, required): Start date/time (UTC).
- `include_transfer_sales` (boolean): Include transfer sales (SkuVault default true).
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `to` (string, required): End date/time (UTC); at most 14 days after `from`.

### `skuvault_list_purchase_orders` (~269 tokens)

List purchase orders

List purchase orders with supplier, dates, status, payment status, costs and line items (SKU, quantity, received quantity). By default completed POs are left out: set status Completed to see them. Specific PO numbers override the date and status filters. 10,000 per page. Heavy throttling (5/min). POST /purchaseorders/getPOs.

Input parameters:

- `include_products` (boolean): Also return incoming product details in a separate array.
- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `modified_after` (string): Only POs modified at or after this time.
- `modified_before` (string): Only POs modified before this time.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `po_numbers` (array): Only these PO numbers; ignores dates and status.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `status` (string): PO status (default: everything except Completed).

### `skuvault_list_po_receives` (~244 tokens)

List purchase order receives

Purchase-order receiving history: what was received (SKU, quantity, location, user, dates) followed by quantity corrections. Filter by warehouse codes, PO numbers or received time. Heavy throttling (5/min). POST /purchaseorders/getReceivesHistory.

Input parameters:

- `limit` (integer): How many items to return from the vendor page, 1-500 (default 50). SkuVault pages hold 1,000-10,000 rows, so a window is shown.
- `page` (integer): Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply.
- `page_size` (integer): Vendor page size, 1000-10000 (default 1000).
- `po_numbers` (array): Only receives for these PO numbers.
- `received_after` (string): Only receives after this time.
- `received_before` (string): Only receives before this time.
- `skip` (integer): Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply.
- `warehouse_codes` (array): Only receives into these warehouse codes.

### `skuvault_list_integrations` (~50 tokens)

List sales channel accounts

List the enabled sales-channel accounts (Amazon, ChannelAdvisor, Shopify...): Id, LongId, Name and Type. Severe throttling (1/min). POST /integration/getIntegrations.

### `skuvault_add_stock` (~233 tokens)

Add stock

WRITE: add quantity of a product to a warehouse location (a transaction in SkuVault's history; every call adds again, so do not retry blindly). The transaction reason must already exist in SkuVault. Serialized or lotted products need serial numbers / a scanned lot code. Moderate throttling (10/min). POST /inventory/addItem.

Input parameters:

- `code` (string): Product code (give sku or code).
- `location_code` (string, required): Location the quantity is added to.
- `lot_code` (string): Lot number (ScannedCode); required when adding to a lotted product.
- `note` (string): Transaction note.
- `quantity` (integer, required): Quantity to add (a positive whole number).
- `reason` (string, required): Transaction reason; must already exist in SkuVault.
- `serial_numbers` (array): Serial numbers, as many as the quantity; only for serialized products.
- `sku` (string): Product SKU (give sku or code).
- `warehouse_id` (integer, required): SkuVault warehouse id (an integer; see skuvault_list_warehouses).

### `skuvault_remove_stock` (~193 tokens)

Remove stock

WRITE: remove quantity of a product from a warehouse location (a transaction in SkuVault's history; every call removes again, so do not retry blindly). The transaction reason must already exist in SkuVault. Serialized products need serial numbers. Moderate throttling (10/min). POST /inventory/removeItem.

Input parameters:

- `code` (string): Product code (give sku or code).
- `location_code` (string, required): Location the quantity is removed from.
- `quantity` (integer, required): Quantity to remove (a positive whole number).
- `reason` (string, required): Transaction reason; must already exist in SkuVault.
- `serial_numbers` (array): Serial numbers, as many as the quantity; only for serialized products.
- `sku` (string): Product SKU (give sku or code).
- `warehouse_id` (integer, required): SkuVault warehouse id (an integer; see skuvault_list_warehouses).

### `skuvault_set_stock_quantity` (~155 tokens)

Set stock quantity

WRITE: set the exact quantity of a product at one warehouse location, overwriting what is there (running it again with the same values changes nothing more). Use skuvault_get_inventory_by_location first to see the current quantity. Moderate throttling (10/min). POST /inventory/setItemQuantity.

Input parameters:

- `code` (string): Product code (give sku or code).
- `location_code` (string, required): Location whose quantity is set.
- `quantity` (integer, required): The new quantity at that location (0 or more).
- `sku` (string): Product SKU (give sku or code).
- `warehouse_id` (integer, required): SkuVault warehouse id (an integer; see skuvault_list_warehouses).

## Diagnostics

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

## Score history

- 2026-11-05: 18
- 2026-11-04: 18
- 2026-11-03: 18
- 2026-11-02: 18
- 2026-11-01: 18
- 2026-10-31: 64

## Common questions

### What is the SkuVault MCP by usefulapi server?

SkuVault MCP by usefulapi is listed in the public MCP registry as io.usefulapi/skuvault. MCP server for SkuVault, products, inventory, sales, purchase orders and stock adjustments. This page covers its hosted endpoint (https://skuvault.usefulapi.io/mcp).

### Is the SkuVault MCP by usefulapi server safe to use?

SkuVault MCP by usefulapi scores 18 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the SkuVault MCP by usefulapi server expose?

SkuVault MCP by usefulapi exposes 22 tools: skuvault_list_warehouses, skuvault_list_locations, skuvault_list_products, skuvault_get_product, skuvault_list_kits, and 17 more. Their descriptions and schemas cost roughly 4,327 tokens of context every time the server is loaded.

### Does the SkuVault MCP by usefulapi server require authentication?

Its publisher declares no required credentials for SkuVault MCP by usefulapi. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the SkuVault MCP by usefulapi server still maintained?

SkuVault MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the SkuVault MCP by usefulapi server?

VerifyMCP ran 4 checks on SkuVault MCP by usefulapi, covering TLS certificate, HSTS header, DNSSEC and Transport. 7 items could not be completed, a gap on our side rather than a finding about SkuVault MCP by usefulapi: Authorization, HTTPS, Schema quality, Stability and 3 more. 5 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://skuvault.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/skuvault/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault
