{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T16:57:49.000Z","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.md","server":{"slug":"io-usefulapi-skuvault","name":"SkuVault MCP by usefulapi","registryName":"io.usefulapi/skuvault","description":"MCP server for SkuVault — products, inventory, sales, purchase orders and stock adjustments.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"skuvault","type":"remote","identifier":"https://skuvault.usefulapi.io/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault","version":"1.6.3","transport":null,"scoredAt":"2026-11-05T15:01:50.166Z"},"score":{"total":18,"tier":"low","status":"scored","weekDelta":null,"history":[{"date":"2026-11-05","total":18},{"date":"2026-11-04","total":18},{"date":"2026-11-03","total":18},{"date":"2026-11-02","total":18},{"date":"2026-11-01","total":18},{"date":"2026-10-31","total":64}]},"categories":[{"name":"Endpoint Security","score":46,"verdict":"fail","reasons":["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."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.unreachable","args":{}},{"code":"https.inconclusive","args":{"reason":"redirect_not_https"}},{"code":"headers.hsts_absent","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":0,"verdict":"fail","reasons":["Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly."],"codes":[{"code":"transport.redirected","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":0,"verdict":"unverified","reasons":["Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list."],"codes":[{"code":"schema.unreachable","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":0,"verdict":"unverified","reasons":["Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolquality.unreachable","args":{}}]},{"name":"Tool Safety","score":0,"verdict":"unverified","reasons":["Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolsafety.unreachable","args":{}}]},{"name":"Capabilities","score":0,"verdict":"unverified","reasons":["Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"codes":[{"code":"cap.unreachable","args":{}}]}],"inconclusive":["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.","Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.","Stability not yet verified: not enough scan history yet (needs a 30-day window).","Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"malware":[],"components":[{"slug":"skuvault","type":"remote","identifier":"https://skuvault.usefulapi.io/mcp","withdrawn":false,"score":18,"current":true,"url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.md"}],"facts":[{"label":"Endpoint","value":"https://skuvault.usefulapi.io/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"1.6.3"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"skuvault_list_warehouses","title":"List warehouses","description":"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.","inputs":[{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":87},{"name":"skuvault_list_locations","title":"List locations","description":"List the locations in enabled warehouses with warehouse, location code, parent location/container and total quantity. Heavy throttling (5/min). POST /inventory/getLocations.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":117},{"name":"skuvault_list_products","title":"List products","description":"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.","inputs":[{"name":"codes","type":"array","required":false,"description":"Only these product codes."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"modified_after","type":"string","required":false,"description":"Only products modified at or after this time."},{"name":"modified_before","type":"string","required":false,"description":"Only products modified before this time."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"skus","type":"array","required":false,"description":"Only these SKUs."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":266},{"name":"skuvault_get_product","title":"Get product","description":"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.","inputs":[{"name":"code","type":"string","required":false,"description":"Product code."},{"name":"sku","type":"string","required":false,"description":"Product SKU."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":82},{"name":"skuvault_list_kits","title":"List kits","description":"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.","inputs":[{"name":"include_available_quantity","type":"boolean","required":false,"description":"Also compute the available quantity of each kit (default false: it is 0)."},{"name":"include_cost","type":"boolean","required":false,"description":"Also return the kit cost (default false)."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"modified_after","type":"string","required":false,"description":"Only kits modified at or after this time (default: all time)."},{"name":"modified_before","type":"string","required":false,"description":"Only kits modified before this time (default: now)."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"skus","type":"array","required":false,"description":"Only these kit SKUs."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":265},{"name":"skuvault_list_brands","title":"List brands","description":"List the brands created in SkuVault (Name, IsEnabled), 1,000 per page. Heavy throttling (5/min). POST /products/getBrands.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":149},{"name":"skuvault_list_suppliers","title":"List suppliers","description":"List the suppliers in the account (Name, IsEnabled), 10,000 per page. Heavy throttling (5/min). POST /products/getSuppliers.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":148},{"name":"skuvault_list_classifications","title":"List classifications","description":"List product classifications and their named attributes, 1,000 per page. Heavy throttling (5/min). POST /products/getClassifications.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":144},{"name":"skuvault_get_inventory_by_location","title":"Get inventory by location","description":"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.","inputs":[{"name":"codes","type":"array","required":false,"description":"Only these product codes (the reply is then keyed by code)."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"skus","type":"array","required":false,"description":"Only these SKUs."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":224},{"name":"skuvault_get_available_quantities","title":"Get available quantities","description":"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.","inputs":[{"name":"expand_alternate_skus","type":"boolean","required":false,"description":"List alternate SKUs inside their primary row instead of as separate rows."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"modified_after","type":"string","required":false,"description":"Only quantities modified at or after this time."},{"name":"modified_before","type":"string","required":false,"description":"Only quantities modified before this time."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-5000 (default 1000)."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":235},{"name":"skuvault_get_item_quantities","title":"Get item quantities","description":"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.","inputs":[{"name":"codes","type":"array","required":false,"description":"Only these product codes."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"modified_after","type":"string","required":false,"description":"Only inventory modified at or after this time."},{"name":"modified_before","type":"string","required":false,"description":"Only inventory modified before this time."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":220},{"name":"skuvault_get_warehouse_quantities","title":"Get warehouse quantities","description":"SKUs and quantities held in one warehouse. Get the warehouse id from skuvault_list_warehouses. Heavy throttling (5/min). POST /inventory/getWarehouseItemQuantities.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"modified_after","type":"string","required":false,"description":"Only quantities modified at or after this time."},{"name":"modified_before","type":"string","required":false,"description":"Only quantities modified before this time."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"warehouse_id","type":"integer","required":true,"description":"SkuVault warehouse id (an integer; see skuvault_list_warehouses)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":233},{"name":"skuvault_list_transactions","title":"List inventory transactions","description":"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.","inputs":[{"name":"exclude_reasons","type":"array","required":false,"description":"Leave out these transaction reasons."},{"name":"from","type":"string","required":true,"description":"Start of the range."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"reasons","type":"array","required":false,"description":"Only these transaction reasons."},{"name":"sale_id","type":"string","required":false,"description":"Only transactions against this sale id."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"to","type":"string","required":false,"description":"End of the range (default now). At most 7 days after `from`."},{"name":"type","type":"string","required":false,"description":"Transaction type (default All)."},{"name":"user_email","type":"string","required":false,"description":"Only this user's transactions (case-sensitive email)."},{"name":"warehouse_id","type":"string","required":false,"description":"Only this warehouse (the Id from skuvault_list_warehouses)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":333},{"name":"skuvault_list_sales","title":"List sales by status","description":"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.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"order_ids","type":"array","required":false,"description":"Specific order ids; overrides status."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"status","type":"string","required":false,"description":"Sale status (default ReadyToShip)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":174},{"name":"skuvault_list_sales_by_date","title":"List sales by date","description":"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.","inputs":[{"name":"date_field","type":"string","required":false,"description":"Filter on the sale date (Sale) or on the last-modified date (Modified)."},{"name":"from","type":"string","required":true,"description":"Start of the interval (inclusive)."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"to","type":"string","required":true,"description":"End of the interval (inclusive); at most 7 days after `from`."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":265},{"name":"skuvault_list_sold_items","title":"List sold items","description":"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.","inputs":[{"name":"break_down_kits","type":"boolean","required":false,"description":"Show kit components instead of the kit (SkuVault default true)."},{"name":"from","type":"string","required":true,"description":"Start date/time (UTC)."},{"name":"include_transfer_sales","type":"boolean","required":false,"description":"Include transfer sales (SkuVault default true)."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"to","type":"string","required":true,"description":"End date/time (UTC); at most 14 days after `from`."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":241},{"name":"skuvault_list_purchase_orders","title":"List purchase orders","description":"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.","inputs":[{"name":"include_products","type":"boolean","required":false,"description":"Also return incoming product details in a separate array."},{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"modified_after","type":"string","required":false,"description":"Only POs modified at or after this time."},{"name":"modified_before","type":"string","required":false,"description":"Only POs modified before this time."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"po_numbers","type":"array","required":false,"description":"Only these PO numbers; ignores dates and status."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"status","type":"string","required":false,"description":"PO status (default: everything except Completed)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":269},{"name":"skuvault_list_po_receives","title":"List purchase order receives","description":"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.","inputs":[{"name":"limit","type":"integer","required":false,"description":"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."},{"name":"page","type":"integer","required":false,"description":"Vendor page number, starting at 0 (default 0). Pass `next.page` from the previous reply."},{"name":"page_size","type":"integer","required":false,"description":"Vendor page size, 1000-10000 (default 1000)."},{"name":"po_numbers","type":"array","required":false,"description":"Only receives for these PO numbers."},{"name":"received_after","type":"string","required":false,"description":"Only receives after this time."},{"name":"received_before","type":"string","required":false,"description":"Only receives before this time."},{"name":"skip","type":"integer","required":false,"description":"Items to skip inside the vendor page (default 0). Pass `next.skip` from the previous reply."},{"name":"warehouse_codes","type":"array","required":false,"description":"Only receives into these warehouse codes."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":244},{"name":"skuvault_list_integrations","title":"List sales channel accounts","description":"List the enabled sales-channel accounts (Amazon, ChannelAdvisor, Shopify...): Id, LongId, Name and Type. Severe throttling (1/min). POST /integration/getIntegrations.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"skuvault_add_stock","title":"Add stock","description":"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.","inputs":[{"name":"code","type":"string","required":false,"description":"Product code (give sku or code)."},{"name":"location_code","type":"string","required":true,"description":"Location the quantity is added to."},{"name":"lot_code","type":"string","required":false,"description":"Lot number (ScannedCode); required when adding to a lotted product."},{"name":"note","type":"string","required":false,"description":"Transaction note."},{"name":"quantity","type":"integer","required":true,"description":"Quantity to add (a positive whole number)."},{"name":"reason","type":"string","required":true,"description":"Transaction reason; must already exist in SkuVault."},{"name":"serial_numbers","type":"array","required":false,"description":"Serial numbers, as many as the quantity; only for serialized products."},{"name":"sku","type":"string","required":false,"description":"Product SKU (give sku or code)."},{"name":"warehouse_id","type":"integer","required":true,"description":"SkuVault warehouse id (an integer; see skuvault_list_warehouses)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":233},{"name":"skuvault_remove_stock","title":"Remove stock","description":"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.","inputs":[{"name":"code","type":"string","required":false,"description":"Product code (give sku or code)."},{"name":"location_code","type":"string","required":true,"description":"Location the quantity is removed from."},{"name":"quantity","type":"integer","required":true,"description":"Quantity to remove (a positive whole number)."},{"name":"reason","type":"string","required":true,"description":"Transaction reason; must already exist in SkuVault."},{"name":"serial_numbers","type":"array","required":false,"description":"Serial numbers, as many as the quantity; only for serialized products."},{"name":"sku","type":"string","required":false,"description":"Product SKU (give sku or code)."},{"name":"warehouse_id","type":"integer","required":true,"description":"SkuVault warehouse id (an integer; see skuvault_list_warehouses)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":193},{"name":"skuvault_set_stock_quantity","title":"Set stock quantity","description":"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.","inputs":[{"name":"code","type":"string","required":false,"description":"Product code (give sku or code)."},{"name":"location_code","type":"string","required":true,"description":"Location whose quantity is set."},{"name":"quantity","type":"integer","required":true,"description":"The new quantity at that location (0 or more)."},{"name":"sku","type":"string","required":false,"description":"Product SKU (give sku or code)."},{"name":"warehouse_id","type":"integer","required":true,"description":"SkuVault warehouse id (an integer; see skuvault_list_warehouses)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":155}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T15:01:50.000Z","track":"remote","endpoint":"https://skuvault.usefulapi.io/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=usefulapi.io","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-09-13T08:55:39Z","notAfter":"2026-12-12T09:54:12Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"skuvault.usefulapi.io.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"io.","outcome":"verified","label":"Verified"},{"zone":"usefulapi.io.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"inconclusive","label":"Inconclusive","gate":null,"gateLabel":null,"status":302,"authorizationServers":[]},"httpsRedirect":{"outcome":"inconclusive","label":"Inconclusive","status":302},"transports":[{"transport":"streamable-http","outcome":"redirected","label":"Redirected","status":302,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-31","recent":[{"id":"chg_01a19626-e73d-708f-ba9a-736a9157c93c","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e73d-708f-ba9a-736a9157c93c"},{"id":"chg_01a19626-e73f-717f-a96f-9b0a52163cd3","kind":"check.unverifiable","summary":"Authorization (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e73f-717f-a96f-9b0a52163cd3"},{"id":"chg_01a19626-e73f-78bd-9d64-1854d4a44b73","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e73f-78bd-9d64-1854d4a44b73"},{"id":"chg_01a19626-e740-786d-a6de-dd8417efea17","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e740-786d-a6de-dd8417efea17"},{"id":"chg_01a19626-e740-7dd2-8d1c-6f992ba2389f","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e740-7dd2-8d1c-6f992ba2389f"},{"id":"chg_01a19626-e741-73cb-a759-e527b42a21ae","kind":"capture.status_changed","summary":"Endpoint reachability (reachable → not serving MCP)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e741-73cb-a759-e527b42a21ae"},{"id":"chg_01a19626-e741-7885-b17c-f1be092439d3","kind":"score.total_changed","summary":"Trust score (64 → 18)","materiality":"functional","direction":"regression","scoreDelta":-46,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a19626-e741-7885-b17c-f1be092439d3"},{"id":"chg_01a193fa-2fff-7223-8794-c4d9f2296948","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a193fa-2fff-7223-8794-c4d9f2296948"},{"id":"chg_01a18fe7-8602-78c0-9cde-02703065e385","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault#chg-chg_01a18fe7-8602-78c0-9cde-02703065e385"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault/changelog.json"},"links":{"html":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault","markdown":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.md","changelogJson":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault/changelog.json","changelogRss":"https://verifymcp.io/servers/io-usefulapi-skuvault/skuvault.xml","external":[{"label":"Remote endpoint","href":"https://skuvault.usefulapi.io/mcp"},{"label":"Repository","href":"https://github.com/m190/usefulapi-mcp"},{"label":"Website","href":"https://usefulapi.io/skuvault/"}]}}