Inventory MCP server
Let an assistant read and update your stock.
The MCP server uses the same API, the same workspace keys and the same limits, on every plan.
Works todayThe MCP server works today on every plan.
Inventory MCP tools
Nineteen tools read, twenty-two tools write.
A read-only key gets only the read tools. Every write is recorded in the integration activity log.
| Tool | What it does | Key needed |
|---|---|---|
search_products | Find variants by SKU, name or barcode. | Read |
list_locations | List locations with their ids. | Read |
get_stock_levels | Stock on hand for a SKU, at every location or one. | Read |
list_stock_levels | On hand, reserved and available for each SKU and location, a page at a time, by location, SKUs or change time. | Read |
list_stock_movements | Stock movements, newest first, by SKU, location, kind or source. | Read |
list_customers | List customers, or find them by name, code or email. | Read |
list_suppliers | List suppliers, or find them by name, code or email. | Read |
list_price_lists | List price lists with their prices. | Read |
get_price_list | One price list with its prices. | Read |
list_sales_orders | Sales orders by status, customer, customer reference or change time, a page at a time. | Read |
get_sales_order | One sales order with its lines. | Read |
list_invoices | Invoices by status or sales order. | Read |
get_invoice | One invoice with its lines. | Read |
list_purchase_orders | Purchase orders by status, supplier or change time, a page at a time. | Read |
get_purchase_order | One purchase order with its lines. | Read |
get_stock_value | Stock value by SKU and location, for today or an as-at date. Unit cost is a weighted average that includes landed freight and duty. | Read |
get_cost_of_goods | Cost of goods shipped from one date to another, at their cost when shipped. Unit cost is a weighted average that includes landed freight and duty. | Read |
adjust_stock | Adjust stock at a location, with a reason. | Read and write |
transfer_stock | Move stock between two locations. | Read and write |
count_stock | Set stock at a location to what was counted. Each difference posts as an adjustment with the reason count. | Read and write |
create_product | Add a product. | Read and write |
update_product | Change a product's name, category or other details. | Read and write |
create_variant | Add a variant to a product, with its SKU, price and barcode. | Read and write |
update_variant | Change a variant's price, barcode, cost or other details, found by id or SKU. | Read and write |
create_customer | Add a customer, with their currency, terms and addresses. | Read and write |
update_customer | Change a customer's details, terms, price list or addresses. | Read and write |
create_sales_order | Raise a sales order for a customer, with a ship-to address if needed. | Read and write |
update_sales_order | Change a sales order's lines, required date, reference, notes or addresses. Lines merge by line_id. | Read and write |
cancel_sales_order | Cancel a sales order and free its reserved stock. | Read and write |
pick_sales_order | Pick units on a sales order's lines. No stock moves until it ships. | Read and write |
unpick_sales_order | Return picked units on a sales order to unpicked. | Read and write |
ship_sales_order | Ship a sales order in full, or ship only what is picked. | Read and write |
close_sales_order | Close what is still open on a part-shipped sales order and free its reserved stock. | Read and write |
raise_invoice | Invoice what has shipped on a sales order. | Read and write |
mark_invoice_paid | Mark an invoice paid. | Read and write |
list_returns | Customer returns, by sales order. | Read |
list_credit_notes | Credit notes, by invoice. | Read |
record_return | Record units sent back on a shipped sales order: restock at a location, or write off with a reason. | Read and write |
raise_credit_note | Credit an invoice for a return's units at its prices and tax, or for an amount before tax. | Read and write |
create_purchase_order | Raise a purchase order with a supplier. | Read and write |
receive_purchase_order | Receive lines on a purchase order. Set allow_over_delivery to take more than ordered. | Read and write |
MCP tool input schemas
The arguments each tool takes.
Each schema is the one the server lists in tools/list. An argument a tool does not list is refused, with its name.
search_products No required arguments.
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"description": "An exact SKU."
},
"barcode": {
"type": "string",
"description": "An exact barcode."
},
"query": {
"type": "string",
"description": "Part of a SKU or name. Every page is searched, and every match comes back at once."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}list_locations No required arguments.
{
"type": "object",
"properties": {
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}get_stock_levels Required: sku.
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"description": "The SKU."
},
"location_id": {
"type": "string",
"description": "Only this location; every location when left out."
}
},
"required": [
"sku"
],
"additionalProperties": false
}list_stock_levels No required arguments.
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"description": "Only this location; every location when left out."
},
"sku": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 250,
"description": "Only these SKUs, up to 250; every SKU when left out or empty. A SKU not in the workspace matches nothing."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}list_stock_movements No required arguments.
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"description": "Only this SKU."
},
"location_id": {
"type": "string",
"description": "Only this location."
},
"kind": {
"type": "string",
"description": "One or more of opening, receipt, shipment, adjustment, transfer, return, separated by commas."
},
"source": {
"type": "string",
"description": "One or more of screen, scan, api, import, sync, separated by commas."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}list_customers No required arguments.
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Part of the customer's name, code or email. Every customer when left out; with it, every match comes back at once."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}list_suppliers No required arguments.
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Part of the supplier's name, code or email. Every supplier when left out; with it, every match comes back at once."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}list_price_lists No required arguments.
{
"type": "object",
"properties": {
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}get_price_list Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The price list's id."
}
},
"required": [
"id"
],
"additionalProperties": false
}list_sales_orders No required arguments.
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "One or more of draft, confirmed, part_picked, picked, part_shipped, backordered, shipped, invoiced, cancelled, separated by commas."
},
"customer_id": {
"type": "string",
"description": "Only this customer's orders."
},
"customer_reference": {
"type": "string",
"description": "Only orders with exactly this customer_reference, such as a Shopify order number."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}get_sales_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id."
}
},
"required": [
"id"
],
"additionalProperties": false
}list_invoices No required arguments.
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "One or more of open, paid, void, separated by commas."
},
"sales_order_id": {
"type": "string",
"description": "Only the invoices raised from this sales order."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}get_invoice Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The invoice's id."
}
},
"required": [
"id"
],
"additionalProperties": false
}list_purchase_orders No required arguments.
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "One or more of draft, sent, partly_received, received, closed, separated by commas."
},
"supplier_id": {
"type": "string",
"description": "Only this supplier's orders."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}get_purchase_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The purchase order's id."
}
},
"required": [
"id"
],
"additionalProperties": false
}get_stock_value No required arguments.
{
"type": "object",
"properties": {
"as_at": {
"type": "string",
"description": "A day, YYYY-MM-DD (UTC): stock and unit cost as at the end of that day. Today when left out. Unit cost is a weighted average that includes landed freight and duty."
}
},
"required": [],
"additionalProperties": false
}get_cost_of_goods No required arguments.
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "The first day, YYYY-MM-DD (UTC); the first of the to date's month when left out."
},
"to": {
"type": "string",
"description": "The last day, YYYY-MM-DD (UTC); today when left out. Units shipped against sales order lines, at their cost when shipped. Unit cost is a weighted average that includes landed freight and duty."
}
},
"required": [],
"additionalProperties": false
}adjust_stock Required: sku, location_id, quantity, reason.
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"description": "The SKU."
},
"location_id": {
"type": "string",
"description": "The location's id."
},
"quantity": {
"type": "integer",
"description": "Units to add (positive) or take out (negative), never 0."
},
"reason": {
"type": "string",
"description": "Why.",
"enum": [
"count",
"damage",
"found",
"correction",
"other"
]
},
"note": {
"type": "string",
"description": "A note; needed when the reason is other."
}
},
"required": [
"sku",
"location_id",
"quantity",
"reason"
],
"additionalProperties": false
}transfer_stock Required: sku, from_location_id, to_location_id, quantity.
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"description": "The SKU."
},
"from_location_id": {
"type": "string",
"description": "Where the stock is now."
},
"to_location_id": {
"type": "string",
"description": "Where it goes."
},
"quantity": {
"type": "integer",
"description": "Units to move, above 0.",
"minimum": 1
},
"note": {
"type": "string",
"description": "A note."
},
"allow_reserved": {
"type": "boolean",
"description": "Set true only when the person confirms moving units reserved for open sales orders. Without it, such a move is refused."
}
},
"required": [
"sku",
"from_location_id",
"to_location_id",
"quantity"
],
"additionalProperties": false
}count_stock Required: location_id, lines.
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"description": "The location counted."
},
"note": {
"type": "string",
"description": "A note on every adjustment the count posts."
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"variant_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"counted": {
"type": "integer",
"description": "Units counted on the shelf, 0 or more. On hand at the location is set to this."
}
},
"required": [
"counted"
],
"additionalProperties": false
}
}
},
"required": [
"location_id",
"lines"
],
"additionalProperties": false
}create_product Required: code, name.
{
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"category": {
"type": "string"
},
"brand": {
"type": "string"
},
"option_names": {
"type": "array",
"items": {
"type": "string"
}
},
"archived": {
"type": "boolean"
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
}update_product Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The product's id."
},
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"category": {
"type": "string"
},
"brand": {
"type": "string"
},
"option_names": {
"type": "array",
"items": {
"type": "string"
}
},
"archived": {
"type": "boolean"
}
},
"required": [
"id"
],
"additionalProperties": false
}create_variant Required: product_id, sku, name.
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"description": "The product's id."
},
"sku": {
"type": "string"
},
"name": {
"type": "string"
},
"barcode": {
"type": "string"
},
"option_values": {
"type": "array",
"items": {
"type": "string"
}
},
"unit": {
"type": "string"
},
"unit_cost": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"list_price": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"reorder_point": {
"type": "integer"
},
"reorder_quantity": {
"type": "integer"
},
"supplier_id": {
"type": "string"
},
"supplier_sku": {
"type": "string"
},
"supplier_cost": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"archived": {
"type": "boolean"
}
},
"required": [
"product_id",
"sku",
"name"
],
"additionalProperties": false
}update_variant No required arguments.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The variant's id. Give this or sku."
},
"sku": {
"type": "string",
"description": "The variant's SKU now, to find it when id is left out."
},
"name": {
"type": "string"
},
"barcode": {
"type": "string"
},
"option_values": {
"type": "array",
"items": {
"type": "string"
}
},
"unit": {
"type": "string"
},
"unit_cost": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"list_price": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"reorder_point": {
"type": "integer"
},
"reorder_quantity": {
"type": "integer"
},
"supplier_id": {
"type": "string"
},
"supplier_sku": {
"type": "string"
},
"supplier_cost": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"archived": {
"type": "boolean"
},
"new_sku": {
"type": "string",
"description": "A new SKU for the variant."
}
},
"required": [],
"additionalProperties": false
}create_customer Required: code, name, currency.
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"trade",
"online"
]
},
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"contact_name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"currency": {
"type": "string",
"enum": [
"USD",
"CAD",
"GBP",
"EUR"
]
},
"payment_terms_days": {
"type": "integer"
},
"price_list_id": {
"type": "string"
},
"default_location_id": {
"type": "string"
},
"tax_number": {
"type": "string"
},
"billing_address": {
"type": "object",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": [
"line1",
"line2",
"city",
"region",
"postal_code",
"country"
],
"additionalProperties": false
},
"shipping_address": {
"type": "object",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": [
"line1",
"line2",
"city",
"region",
"postal_code",
"country"
],
"additionalProperties": false
}
},
"required": [
"code",
"name",
"currency"
],
"additionalProperties": false
}update_customer Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The customer's id."
},
"kind": {
"type": "string",
"enum": [
"trade",
"online"
]
},
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"contact_name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"currency": {
"type": "string",
"enum": [
"USD",
"CAD",
"GBP",
"EUR"
]
},
"payment_terms_days": {
"type": "integer"
},
"price_list_id": {
"type": "string"
},
"default_location_id": {
"type": "string"
},
"tax_number": {
"type": "string"
},
"billing_address": {
"type": "object",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": [
"line1",
"line2",
"city",
"region",
"postal_code",
"country"
],
"additionalProperties": false
},
"shipping_address": {
"type": "object",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": [
"line1",
"line2",
"city",
"region",
"postal_code",
"country"
],
"additionalProperties": false
}
},
"required": [
"id"
],
"additionalProperties": false
}create_sales_order Required: customer_id, lines.
{
"type": "object",
"properties": {
"customer_id": {
"type": "string"
},
"location_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"draft",
"confirmed"
]
},
"channel": {
"type": "string",
"enum": [
"wholesale",
"online"
]
},
"tax_rate": {
"type": "number"
},
"required_date": {
"type": "string"
},
"customer_reference": {
"type": "string"
},
"reject_duplicate_reference": {
"type": "boolean",
"description": "True to refuse the order with a 409 when another sales order already has this customer_reference."
},
"notes": {
"type": "string"
},
"shipping_address": {
"type": "object",
"description": "Where this order ships, such as a web order's ship-to. Left out, the customer's shipping address. Its province sets the default tax_rate in Canada (GST or HST); elsewhere, send tax_rate.",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string",
"description": "State, province or county code, such as ON or NY."
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string",
"description": "Two letters, such as CA or US."
}
},
"required": [
"line1",
"city",
"country"
],
"additionalProperties": false
},
"billing_address": {
"type": "object",
"description": "Who this order is billed to. Left out, the customer's billing address.",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string",
"description": "State, province or county code, such as ON or NY."
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string",
"description": "Two letters, such as CA or US."
}
},
"required": [
"line1",
"city",
"country"
],
"additionalProperties": false
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"variant_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"unit_price": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"discount_percent": {
"type": "number"
}
},
"required": [
"quantity"
],
"additionalProperties": false
}
}
},
"required": [
"customer_id",
"lines"
],
"additionalProperties": false
}update_sales_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id."
},
"required_date": {
"type": "string"
},
"customer_reference": {
"type": "string"
},
"notes": {
"type": "string"
},
"shipping_address": {
"type": "object",
"description": "Where this order ships. The tax rate on lines already on the order stays as it is.",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string",
"description": "State, province or county code, such as ON or NY."
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string",
"description": "Two letters, such as CA or US."
}
},
"required": [
"line1",
"city",
"country"
],
"additionalProperties": false
},
"billing_address": {
"type": "object",
"description": "Who this order is billed to.",
"properties": {
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"region": {
"type": "string",
"description": "State, province or county code, such as ON or NY."
},
"postal_code": {
"type": "string"
},
"country": {
"type": "string",
"description": "Two letters, such as CA or US."
}
},
"required": [
"line1",
"city",
"country"
],
"additionalProperties": false
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"line_id": {
"type": "string",
"description": "A line already on the order, to change or remove. Leave it out to add a line."
},
"variant_id": {
"type": "string",
"description": "For a new line: the item, by id. Or send sku."
},
"sku": {
"type": "string",
"description": "For a new line: the item, by SKU."
},
"quantity": {
"type": "integer",
"description": "Units on the line. Required for a new line; left out, a line keeps its quantity. Not below what is picked and shipped on it."
},
"unit_price": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"discount_percent": {
"type": "number"
},
"remove": {
"type": "boolean",
"description": "True, with line_id, to take the line off the order. A line with units picked or shipped stays."
}
},
"required": [],
"additionalProperties": false
},
"description": "Changes to the order's lines, merged by line_id. A line with line_id is changed; one without is added; one with remove: true is taken off. Lines not sent stay as they are."
}
},
"required": [
"id"
],
"additionalProperties": false
}cancel_sales_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id. Its reserved stock is freed; an order with units shipped cannot be canceled."
}
},
"required": [
"id"
],
"additionalProperties": false
}pick_sales_order Required: id, lines.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id."
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"line_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"quantity": {
"type": "integer",
"description": "Units picked now. Not past what is still to pick on the line."
}
},
"required": [
"quantity"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"lines"
],
"additionalProperties": false
}unpick_sales_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id. With no lines, every picked unit is unpicked."
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"line_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"quantity": {
"type": "integer",
"description": "Units to return to unpicked. Not past what is picked on the line."
}
},
"required": [
"quantity"
],
"additionalProperties": false
}
}
},
"required": [
"id"
],
"additionalProperties": false
}ship_sales_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id. Without only_picked, the whole order ships."
},
"only_picked": {
"type": "boolean"
}
},
"required": [
"id"
],
"additionalProperties": false
}close_sales_order Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id. What is still open on it is closed and its reserved stock freed."
}
},
"required": [
"id"
],
"additionalProperties": false
}raise_invoice Required: sales_order_id.
{
"type": "object",
"properties": {
"sales_order_id": {
"type": "string",
"description": "The sales order's id. The invoice bills what has shipped and is not yet invoiced."
}
},
"required": [
"sales_order_id"
],
"additionalProperties": false
}mark_invoice_paid Required: id.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The invoice's id."
}
},
"required": [
"id"
],
"additionalProperties": false
}list_returns No required arguments.
{
"type": "object",
"properties": {
"sales_order_id": {
"type": "string",
"description": "Only the returns against this sales order."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}list_credit_notes No required arguments.
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"description": "Only the credit notes against this invoice."
},
"updated_since": {
"type": "string",
"description": "Only records changed at or after this date and time, such as 2026-10-28T00:00:00Z."
},
"limit": {
"type": "integer",
"description": "Up to 250.",
"minimum": 1,
"maximum": 250
},
"cursor": {
"type": "string",
"description": "The next_cursor from the page before."
}
},
"required": [],
"additionalProperties": false
}record_return Required: id, lines.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The sales order's id."
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"line_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"quantity": {
"type": "integer",
"description": "Units returned. Not past what shipped on the line, less what already came back."
},
"disposition": {
"type": "string",
"enum": [
"restock",
"write_off"
]
},
"location_id": {
"type": "string",
"description": "Where restocked units go; the order's ship-from location when left out."
},
"reason": {
"type": "string",
"description": "Why units are written off; required for write_off."
}
},
"required": [
"quantity",
"disposition"
],
"additionalProperties": false
}
},
"note": {
"type": "string"
}
},
"required": [
"id",
"lines"
],
"additionalProperties": false
}raise_credit_note Required: invoice_id.
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"description": "The invoice's id. Give return_id or amount, one of the two."
},
"return_id": {
"type": "string",
"description": "Credit the units on this return that the invoice billed, at its prices and tax."
},
"amount": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"reason": {
"type": "string"
}
},
"required": [
"invoice_id"
],
"additionalProperties": false
}create_purchase_order Required: supplier_id, location_id, lines.
{
"type": "object",
"properties": {
"supplier_id": {
"type": "string"
},
"location_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"draft",
"sent"
]
},
"expected_date": {
"type": "string"
},
"supplier_reference": {
"type": "string"
},
"notes": {
"type": "string"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"variant_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"unit_cost": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
}
},
"required": [
"quantity"
],
"additionalProperties": false
}
}
},
"required": [
"supplier_id",
"location_id",
"lines"
],
"additionalProperties": false
}receive_purchase_order Required: id, lines.
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The purchase order's id."
},
"location_id": {
"type": "string"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"line_id": {
"type": "string"
},
"sku": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"quantity"
],
"additionalProperties": false
}
},
"costs": {
"type": "object",
"properties": {
"freight": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"duty": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
},
"other": {
"type": "string",
"pattern": "^-?\\d+\\.\\d{2}$",
"description": "A decimal amount, two places."
}
},
"required": [],
"additionalProperties": false
},
"spread_by": {
"type": "string",
"enum": [
"value",
"quantity"
]
},
"allow_over_delivery": {
"type": "boolean",
"description": "True to receive more than a line still needs. Left out, an over-delivery is refused with 422."
}
},
"required": [
"id",
"lines"
],
"additionalProperties": false
}Connect an assistant to the MCP server
Add the server URL and a key.
Any assistant that supports remote MCP servers over HTTP, such as Claude, takes the same two settings.
- Create a key in workspace settings, read only or read and write.
- Add a remote MCP server with the URL below.
- Send the key as a Bearer token in the Authorization header.
- In the demo, use the key shown in Settings, under API keys.
https://slatestock.com/api/mcp{
"mcpServers": {
"slatestock": {
"type": "http",
"url": "https://slatestock.com/api/mcp",
"headers": {
"Authorization": "Bearer wsk_example_4f7c2a9d1e8b6035"
}
}
}
}MCP server example
Ask in your own words.
The assistant picks the tool for each question and calls the API with your key.
- How many LTT-SGE do we have at each location?
- Move 20 LTT-OAT from the Main warehouse to the Downtown shop.
- Which purchase orders from Example Linen Mill are still open?
- Set the price of LTT-SGE to 9.75 and give it a new barcode.
- Ship Fictional Design Studio's open order and raise the invoice.
- What was our stock worth at the end of September?
Inventory management API pricing
The API, webhooks and the MCP server come with every plan.