Freshly Inventory MCP by usefulapi
Read batches and assignments; create, update and assign batches in Freshly Inventory.
Should I use this
Quality & Safety
Findings (2)
- LOWin freshly_assign_batch_to_line_item
- LOWin freshly_remove_batch_assignment
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"freshly-inventory": {
"url": "https://freshly-inventory.usefulapi.io/mcp"
}
}
}Remote endpoints
https://freshly-inventory.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
🟢freshly_get_shop
Return the Shopify store this API key belongs to (store name and shopify_domain). Good first call to confirm the key works. Freshly API: GET /api/shopify/shop.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢freshly_list_inventory_batches(location_id, variant_id, search, page)
List inventory batches (lot tracking) with quantity, received and expiry dates and metadata. Filter by Shopify location or variant, or search by batch name, number, barcode or invoice. Freshly API: GET /api/shopify/inventory_batches.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify location id to filter by."
},
"variant_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify product variant id to filter by."
},
"search": {
"description": "Search batch name, batch number, barcode, invoice number, description or product.",
"type": "string"
},
"page": {
"description": "Page number (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢freshly_get_inventory_batch(batch_id)
Return one inventory batch by its Freshly id. Freshly API: GET /api/shopify/inventory_batches/:id.
Input Schema
{
"type": "object",
"properties": {
"batch_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Freshly inventory batch id."
}
},
"required": [
"batch_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢freshly_list_batch_assignments(order_id, line_item_id)
List the inventory batches assigned to one Shopify order line item (batch, quantity, assignment id). Freshly API: GET /api/shopify/inventory_batch_order_items.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify order id."
},
"line_item_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify line item id on that order."
}
},
"required": [
"order_id",
"line_item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴freshly_create_inventory_batch(location_id, variant_id, quantity, batch_name, batch_number, ...)
Create a new inventory batch of one product variant at one Shopify location. Set enable_shopify_sync true only when the Shopify stock level must change too. Freshly API: POST /api/shopify/inventory_batches.
Input Schema
{
"type": "object",
"properties": {
"location_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify location id."
},
"variant_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify product variant id."
},
"quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Units in the batch."
},
"batch_name": {
"description": "Batch name shown in Freshly.",
"type": "string"
},
"batch_number": {
"description": "Supplier or internal batch number.",
"type": "string"
},
"barcode": {
"description": "Batch barcode.",
"type": "string"
},
"invoice_number": {
"description": "Purchase invoice number.",
"type": "string"
},
"description": {
"description": "Free-text note.",
"type": "string"
},
"received_date": {
"description": "Date the batch was received, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"expiry_date": {
"description": "Expiry date, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"enable_shopify_sync": {
"description": "true also applies a Shopify inventory adjustment for this batch. Leave unset to record in Freshly only.",
"type": "boolean"
}
},
"required": [
"location_id",
"variant_id",
"quantity"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴freshly_update_inventory_batch(batch_id, location_id, variant_id, quantity, batch_name, ...)
Change fields of one inventory batch (quantity, location, variant, dates or text). Only the fields you pass change. Set enable_shopify_sync true only when the Shopify stock level must change too. Freshly API: PUT /api/shopify/inventory_batches/:id.
Input Schema
{
"type": "object",
"properties": {
"batch_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Freshly inventory batch id."
},
"location_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "New Shopify location id."
},
"variant_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "New Shopify product variant id."
},
"quantity": {
"description": "New quantity for the batch.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"batch_name": {
"description": "Batch name shown in Freshly.",
"type": "string"
},
"batch_number": {
"description": "Supplier or internal batch number.",
"type": "string"
},
"barcode": {
"description": "Batch barcode.",
"type": "string"
},
"invoice_number": {
"description": "Purchase invoice number.",
"type": "string"
},
"description": {
"description": "Free-text note.",
"type": "string"
},
"received_date": {
"description": "Date the batch was received, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"expiry_date": {
"description": "Expiry date, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"enable_shopify_sync": {
"description": "true also applies a Shopify inventory adjustment for this change. Leave unset to record in Freshly only.",
"type": "boolean"
}
},
"required": [
"batch_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴freshly_assign_batch_to_line_item(order_id, line_item_id, inventory_batch_id, quantity)
Assign a quantity of one inventory batch to one Shopify order line item, so Freshly tracks which lot shipped. Freshly API: POST /api/shopify/inventory_batch_order_items.
Input Schema
{
"type": "object",
"properties": {
"order_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify order id."
},
"line_item_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Shopify line item id on that order."
},
"inventory_batch_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Freshly inventory batch id to draw from."
},
"quantity": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Units of the batch to assign to this line item."
}
},
"required": [
"order_id",
"line_item_id",
"inventory_batch_id",
"quantity"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴freshly_remove_batch_assignment(assignment_id)
Remove one batch assignment from an order line item (the assignment id comes from freshly_list_batch_assignments). Freshly API: DELETE /api/shopify/inventory_batch_order_items/:id.
Input Schema
{
"type": "object",
"properties": {
"assignment_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"pattern": "^\\d+$"
}
],
"description": "Freshly batch assignment id (inventory_batch_order_items id)."
}
},
"required": [
"assignment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence