Freshly Inventory MCP by usefulapi

Read batches and assignments; create, update and assign batches in Freshly Inventory.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
78%
Naming quality
75%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'freshly_assign_batch_to_line_item' name length outside 3-30 rangein freshly_assign_batch_to_line_item
  • LOWTool 'freshly_remove_batch_assignment' name length outside 3-30 rangein freshly_remove_batch_assignment

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,976Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (1.54% of 128k context)

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-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools