Forthcast MCP
An official read-only MCP server for Forthcast, a Shopify app providing demand forecasting, smart reorder alerts, safety-stock planning, and draft purchase orders. It allows agents to access store-wide forecasts and inventory health data via OAuth.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://app.forthcast.io/mcpWhat its tools do
11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to forthcast.io ·
- Passed Endpoint is on the registry namespace domain ·
- Uptime 100% over 90 days
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Retrieve store-wide demand forecasts
- Check smart reorder points and alerts
- View safety-stock planning data
- Access inventory health metrics
Source and maintenance
Protocol and capabilities
- Server
- forthcast-inventory 1.1.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 11 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"experimental": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
11 advertised
get_inventory_overview — Get inventory overview
Use this when the merchant asks for a broad inventory health check, an executive summary, their urgent/excess/no-demand counts, inventory valuation, or current PO workload. Requires a connected Forthcast store; the assistant will prompt to sign in.
{
"type": "object",
"title": "get_inventory_overviewArguments",
"properties": {}
}{
"type": "object",
"$defs": {
"InventoryItem": {
"type": "object",
"title": "InventoryItem",
"required": [
"sku",
"product",
"urgency",
"urgency_label",
"forthcast_url"
],
"properties": {
"sku": {
"type": "string",
"title": "Sku"
},
"product": {
"type": "string",
"title": "Product"
},
"urgency": {
"type": "string",
"title": "Urgency"
},
"supplier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null
},
"abc_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Abc Class",
"default": null
},
"forthcast_url": {
"type": "string",
"title": "Forthcast Url"
},
"order_by_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Order By Date",
"default": null
},
"reorder_point": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Reorder Point",
"default": null
},
"urgency_label": {
"type": "string",
"title": "Urgency Label"
},
"lead_time_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lead Time Days",
"default": null
},
"units_available": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Units Available",
"default": null
},
"revenue_forecast": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Revenue Forecast",
"default": null
},
"days_of_stock_left": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days Of Stock Left",
"default": null
},
"days_until_reorder": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days Until Reorder",
"default": null
},
"average_monthly_demand": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Average Monthly Demand",
"default": null
},
"suggested_reorder_quantity": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Suggested Reorder Quantity",
"default": null
},
"units_on_open_purchase_orders": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Units On Open Purchase Orders",
"default": 0
}
},
"additionalProperties": false
},
"UrgencyCounts": {
"type": "object",
"title": "UrgencyCounts",
"properties": {
"excess": {
"type": "integer",
"title": "Excess",
"default": 0
},
"warning": {
"type": "integer",
"title": "Warning",
"default": 0
},
"critical": {
"type": "integer",
"title": "Critical",
"default": 0
},
"on_track": {
"type": "integer",
"title": "On Track",
"default": 0
},
"no_demand": {
"type": "integer",
"title": "No Demand",
"default": 0
}
},
"additionalProperties": false
},
"InventoryValuation": {
"type": "object",
"title": "InventoryValuation",
"properties": {
"sku_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Sku Count",
"default": null
},
"total_units": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Total Units",
"default": null
},
"retail_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Retail Value",
"default": null
},
"cost_of_goods": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Cost Of Goods",
"default": null
},
"potential_profit": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Potential Profit",
"default": null
},
"annual_holding_cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Annual Holding Cost",
"default": null
},
"monthly_holding_cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Monthly Holding Cost",
"default": null
},
"profit_margin_percent": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Profit Margin Percent",
"default": null
},
"estimated_cost_sku_count": {
"type": "integer",
"title": "Estimated Cost Sku Count",
"default": 0
}
},
"additionalProperties": false
}
},
"title": "InventoryOverview",
"required": [
"total_skus",
"urgency_counts",
"active_purchase_orders",
"draft_purchase_orders",
"top_priorities",
"inventory_url"
],
"properties": {
"valuation": {
"anyOf": [
{
"$ref": "#/$defs/InventoryValuation"
},
{
"type": "null"
}
],
"default": null
},
"total_skus": {
"type": "integer",
"title": "Total Skus"
},
"inventory_url": {
"type": "string",
"title": "Inventory Url"
},
"top_priorities": {
"type": "array",
"items": {
"$ref": "#/$defs/InventoryItem"
},
"title": "Top Priorities"
},
"urgency_counts": {
"$ref": "#/$defs/UrgencyCounts"
},
"draft_purchase_orders": {
"type": "integer",
"title": "Draft Purchase Orders"
},
"active_purchase_orders": {
"type": "integer",
"title": "Active Purchase Orders"
}
},
"additionalProperties": false
}{
"title": "Get inventory overview",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_reorder_recommendations — Get reorder recommendations
Use this when the merchant asks what to reorder, how much to buy, or which critical/warning items need action. Quantities reuse Forthcast's live lead-time, MOQ, case-pack, open-PO, location, and supplier minimum-order-value logic; this tool does not create a PO. Requires a connected Forthcast store; the assistant will prompt to sign in.
{
"type": "object",
"title": "get_reorder_recommendationsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 15,
"maximum": 30,
"minimum": 1,
"description": "Maximum recommendations to return."
},
"priority": {
"enum": [
"critical",
"warning",
"all"
],
"type": "string",
"title": "Priority",
"default": "all",
"description": "Return order-now items, plan-ahead items, or both."
},
"supplier": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null,
"description": "Optional case-insensitive supplier name filter."
}
}
}{
"type": "object",
"$defs": {
"ReorderRecommendation": {
"type": "object",
"title": "ReorderRecommendation",
"required": [
"sku",
"urgency",
"recommended_quantity",
"reason_code",
"reason",
"forthcast_url"
],
"properties": {
"moq": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Moq",
"default": null
},
"sku": {
"type": "string",
"title": "Sku"
},
"reason": {
"type": "string",
"title": "Reason"
},
"product": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product",
"default": null
},
"urgency": {
"type": "string",
"title": "Urgency"
},
"supplier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null
},
"case_pack": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Case Pack",
"default": null
},
"unit_cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Unit Cost",
"default": null
},
"reason_code": {
"type": "string",
"title": "Reason Code"
},
"forthcast_url": {
"type": "string",
"title": "Forthcast Url"
},
"lead_time_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lead Time Days",
"default": null
},
"monthly_demand": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Monthly Demand",
"default": null
},
"units_available": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Units Available",
"default": null
},
"estimated_line_cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estimated Line Cost",
"default": null
},
"raw_reorder_quantity": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Raw Reorder Quantity",
"default": null
},
"recommended_quantity": {
"type": "integer",
"title": "Recommended Quantity"
},
"pending_purchase_order_quantity": {
"type": "integer",
"title": "Pending Purchase Order Quantity",
"default": 0
}
},
"additionalProperties": false
}
},
"title": "ReorderRecommendations",
"required": [
"items",
"count",
"priority",
"truncated",
"purchase_order_url"
],
"properties": {
"count": {
"type": "integer",
"title": "Count"
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/ReorderRecommendation"
},
"title": "Items"
},
"priority": {
"type": "string",
"title": "Priority"
},
"truncated": {
"type": "boolean",
"title": "Truncated"
},
"purchase_order_url": {
"type": "string",
"title": "Purchase Order Url"
},
"omitted_covered_items": {
"type": "integer",
"title": "Omitted Covered Items",
"default": 0
},
"omitted_non_orderable_items": {
"type": "integer",
"title": "Omitted Non Orderable Items",
"default": 0
}
},
"additionalProperties": false
}{
"title": "Get reorder recommendations",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_inventory_items — Find inventory items
Use this when the merchant wants a bounded list of their items filtered by urgency, assigned supplier, or Shopify vendor, such as all excess items or a supplier's critical SKUs. Requires a connected Forthcast store; the assistant will prompt to sign in.
{
"type": "object",
"title": "find_inventory_itemsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 15,
"maximum": 30,
"minimum": 1,
"description": "Maximum items to return."
},
"vendor": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"title": "Vendor",
"default": null,
"description": "Optional case-insensitive Shopify vendor or brand."
},
"urgency": {
"anyOf": [
{
"enum": [
"critical",
"warning",
"ok",
"excess",
"no-demand"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Urgency",
"default": null,
"description": "Optional Forthcast urgency bucket."
},
"supplier": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null,
"description": "Optional case-insensitive assigned supplier name."
}
}
}{
"type": "object",
"$defs": {
"InventoryItem": {
"type": "object",
"title": "InventoryItem",
"required": [
"sku",
"product",
"urgency",
"urgency_label",
"forthcast_url"
],
"properties": {
"sku": {
"type": "string",
"title": "Sku"
},
"product": {
"type": "string",
"title": "Product"
},
"urgency": {
"type": "string",
"title": "Urgency"
},
"supplier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null
},
"abc_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Abc Class",
"default": null
},
"forthcast_url": {
"type": "string",
"title": "Forthcast Url"
},
"order_by_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Order By Date",
"default": null
},
"reorder_point": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Reorder Point",
"default": null
},
"urgency_label": {
"type": "string",
"title": "Urgency Label"
},
"lead_time_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lead Time Days",
"default": null
},
"units_available": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Units Available",
"default": null
},
"revenue_forecast": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Revenue Forecast",
"default": null
},
"days_of_stock_left": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days Of Stock Left",
"default": null
},
"days_until_reorder": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days Until Reorder",
"default": null
},
"average_monthly_demand": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Average Monthly Demand",
"default": null
},
"suggested_reorder_quantity": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Suggested Reorder Quantity",
"default": null
},
"units_on_open_purchase_orders": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Units On Open Purchase Orders",
"default": 0
}
},
"additionalProperties": false
}
},
"title": "InventoryItemList",
"required": [
"items",
"count"
],
"properties": {
"count": {
"type": "integer",
"title": "Count"
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/InventoryItem"
},
"title": "Items"
},
"truncated": {
"type": "boolean",
"title": "Truncated",
"default": false
},
"applied_filters": {
"type": "object",
"title": "Applied Filters",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"title": "Find inventory items",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_inventory_item — Get inventory item
Use this when the merchant names an exact SKU and needs its live stock, forecast demand, days of supply, reorder point, suggested quantity, supplier, or open-PO coverage. Requires a connected Forthcast store; the assistant will prompt to sign in.
{
"type": "object",
"title": "get_inventory_itemArguments",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"title": "Sku",
"maxLength": 255,
"minLength": 1,
"description": "Exact merchant SKU code."
}
}
}{
"type": "object",
"$defs": {
"InventoryItem": {
"type": "object",
"title": "InventoryItem",
"required": [
"sku",
"product",
"urgency",
"urgency_label",
"forthcast_url"
],
"properties": {
"sku": {
"type": "string",
"title": "Sku"
},
"product": {
"type": "string",
"title": "Product"
},
"urgency": {
"type": "string",
"title": "Urgency"
},
"supplier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null
},
"abc_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Abc Class",
"default": null
},
"forthcast_url": {
"type": "string",
"title": "Forthcast Url"
},
"order_by_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Order By Date",
"default": null
},
"reorder_point": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Reorder Point",
"default": null
},
"urgency_label": {
"type": "string",
"title": "Urgency Label"
},
"lead_time_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lead Time Days",
"default": null
},
"units_available": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Units Available",
"default": null
},
"revenue_forecast": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Revenue Forecast",
"default": null
},
"days_of_stock_left": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days Of Stock Left",
"default": null
},
"days_until_reorder": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days Until Reorder",
"default": null
},
"average_monthly_demand": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Average Monthly Demand",
"default": null
},
"suggested_reorder_quantity": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Suggested Reorder Quantity",
"default": null
},
"units_on_open_purchase_orders": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Units On Open Purchase Orders",
"default": 0
}
},
"additionalProperties": false
}
},
"title": "InventoryItemResult",
"required": [
"found"
],
"properties": {
"item": {
"anyOf": [
{
"$ref": "#/$defs/InventoryItem"
},
{
"type": "null"
}
],
"default": null
},
"found": {
"type": "boolean",
"title": "Found"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Message",
"default": null
}
},
"additionalProperties": false
}{
"title": "Get inventory item",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_purchase_orders — List purchase orders
Use this when the merchant asks what is ordered, drafted, open, partially received, received, cancelled, overdue, expected, or associated with a named supplier. Results are grouped by PO; this tool does not approve, receive, cancel, or otherwise modify an order. Requires a connected Forthcast store; the assistant will prompt to sign in.
{
"type": "object",
"title": "list_purchase_ordersArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 10,
"maximum": 40,
"minimum": 1,
"description": "Maximum grouped purchase orders to return."
},
"status": {
"anyOf": [
{
"enum": [
"draft",
"open",
"partial",
"received",
"cancelled"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Status",
"default": null,
"description": "Optional exact purchase-order status."
},
"supplier": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null,
"description": "Optional case-insensitive supplier name filter."
}
}
}{
"type": "object",
"$defs": {
"PurchaseOrderSummary": {
"type": "object",
"title": "PurchaseOrderSummary",
"required": [
"po_number",
"status",
"line_count",
"units_ordered",
"units_received",
"forthcast_url"
],
"properties": {
"status": {
"type": "string",
"title": "Status"
},
"overdue": {
"type": "boolean",
"title": "Overdue",
"default": false
},
"supplier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null
},
"po_number": {
"type": "string",
"title": "Po Number"
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Created At",
"default": null
},
"line_count": {
"type": "integer",
"title": "Line Count"
},
"expected_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expected Date",
"default": null
},
"forthcast_url": {
"type": "string",
"title": "Forthcast Url"
},
"units_ordered": {
"type": "integer",
"title": "Units Ordered"
},
"estimated_cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estimated Cost",
"default": null
},
"units_received": {
"type": "integer",
"title": "Units Received"
}
},
"additionalProperties": false
}
},
"title": "PurchaseOrderList",
"required": [
"orders",
"count",
"total_matching",
"truncated",
"purchase_order_url"
],
"properties": {
"count": {
"type": "integer",
"title": "Count"
},
"orders": {
"type": "array",
"items": {
"$ref": "#/$defs/PurchaseOrderSummary"
},
"title": "Orders"
},
"truncated": {
"type": "boolean",
"title": "Truncated"
},
"total_matching": {
"type": "integer",
"title": "Total Matching"
},
"applied_filters": {
"type": "object",
"title": "Applied Filters",
"additionalProperties": {
"type": "string"
}
},
"purchase_order_url": {
"type": "string",
"title": "Purchase Order Url"
}
},
"additionalProperties": false
}{
"title": "List purchase orders",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_supplier_performance — Get supplier performance
Use this when the merchant asks how suppliers are performing or wants rolling 24-month on-time rate, fill rate, actual versus promised lead time, spend, or invoice price accuracy, plus current open and overdue purchase-order counts. Requires a connected Forthcast store; the assistant will prompt to sign in.
{
"type": "object",
"title": "get_supplier_performanceArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum suppliers to return."
},
"supplier": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"title": "Supplier",
"default": null,
"description": "Optional case-insensitive supplier name filter."
}
}
}{
"type": "object",
"$defs": {
"SupplierPerformance": {
"type": "object",
"title": "SupplierPerformance",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"fill_rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Fill Rate",
"default": null
},
"total_cost": {
"type": "number",
"title": "Total Cost",
"default": 0
},
"total_units": {
"type": "integer",
"title": "Total Units",
"default": 0
},
"on_time_rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "On Time Rate",
"default": null
},
"average_days_late": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Average Days Late",
"default": null
},
"price_accuracy_rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price Accuracy Rate",
"default": null
},
"open_purchase_orders": {
"type": "integer",
"title": "Open Purchase Orders",
"default": 0
},
"total_purchase_orders": {
"type": "integer",
"title": "Total Purchase Orders",
"default": 0
},
"overdue_purchase_orders": {
"type": "integer",
"title": "Overdue Purchase Orders",
"default": 0
},
"promised_lead_time_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Promised Lead Time Days",
"default": null
},
"received_purchase_orders": {
"type": "integer",
"title": "Received Purchase Orders",
"default": 0
},
"price_accuracy_sample_lines": {
"type": "integer",
"title": "Price Accuracy Sample Lines",
"default": 0
},
"average_actual_lead_time_days": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Average Actual Lead Time Days",
"default": null
}
},
"additionalProperties": false
}
},
"title": "SupplierPerformanceList",
"required": [
"suppliers",
"count",
"total_matching",
"truncated",
"supplier_performance_url"
],
"properties": {
"count": {
"type": "integer",
"title": "Count"
},
"suppliers": {
"type": "array",
"items": {
"$ref": "#/$defs/SupplierPerformance"
},
"title": "Suppliers"
},
"truncated": {
"type": "boolean",
"title": "Truncated"
},
"total_matching": {
"type": "integer",
"title": "Total Matching"
},
"analysis_period_months": {
"type": "integer",
"title": "Analysis Period Months",
"default": 24
},
"supplier_performance_url": {
"type": "string",
"title": "Supplier Performance Url"
}
},
"additionalProperties": false
}{
"title": "Get supplier performance",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}calculate_reorder_point — Calculate reorder point
Use this when someone asks how much safety stock to hold or at what stock level to reorder a product. Give a daily demand history (best) or an average daily demand with its variability, plus the supplier lead time and a service level. Returns safety stock, lead-time demand and the reorder point with Forthcast's formula and assumptions. Works without a connected store.
{
"type": "object",
"title": "calculate_reorder_pointArguments",
"required": [
"lead_time_days"
],
"properties": {
"daily_demand": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
},
"maxItems": 365
},
{
"type": "null"
}
],
"title": "Daily Demand",
"default": null,
"description": "Daily units sold, oldest first, 14 to 365 values."
},
"service_level": {
"type": "number",
"title": "Service Level",
"default": 0.95,
"maximum": 99,
"minimum": 0.5,
"description": "Target in-stock probability, 0.50 to 0.99 (95 also accepted)."
},
"lead_time_days": {
"type": "integer",
"title": "Lead Time Days",
"maximum": 730,
"minimum": 1,
"description": "Supplier lead time in days."
},
"demand_std_daily": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Demand Std Daily",
"default": null,
"description": "Standard deviation of daily demand; assumed sqrt(average) when omitted."
},
"average_daily_demand": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Average Daily Demand",
"default": null,
"description": "Average units sold per day, if no daily history."
}
}
}{
"type": "object",
"title": "ReorderPointCalculation",
"required": [
"average_daily_demand",
"demand_std_daily",
"lead_time_days",
"service_level",
"z_score",
"safety_stock",
"lead_time_demand",
"reorder_point",
"intermittent_demand",
"basis",
"assumptions"
],
"properties": {
"basis": {
"type": "string",
"title": "Basis"
},
"z_score": {
"type": "number",
"title": "Z Score"
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
},
"title": "Assumptions"
},
"connect_hint": {
"type": "string",
"title": "Connect Hint",
"default": "Forthcast does this automatically for Shopify stores: https://apps.shopify.com/forthcast",
"description": "How to get this done automatically on live store data."
},
"safety_stock": {
"type": "number",
"title": "Safety Stock"
},
"reorder_point": {
"type": "number",
"title": "Reorder Point"
},
"service_level": {
"type": "number",
"title": "Service Level"
},
"lead_time_days": {
"type": "integer",
"title": "Lead Time Days"
},
"demand_std_daily": {
"type": "number",
"title": "Demand Std Daily"
},
"lead_time_demand": {
"type": "number",
"title": "Lead Time Demand"
},
"intermittent_demand": {
"type": "boolean",
"title": "Intermittent Demand"
},
"average_daily_demand": {
"type": "number",
"title": "Average Daily Demand"
}
},
"additionalProperties": false
}{
"title": "Calculate reorder point",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}calculate_order_quantity — Calculate order quantity
Use this when someone asks how many units to order, given demand, lead time, stock on hand and on order, and supplier rules such as MOQ, case pack or a minimum order value. Sizes the line the way Forthcast sizes a purchase-order line and lists every rule that changed the quantity. Works without a connected store.
{
"type": "object",
"title": "calculate_order_quantityArguments",
"required": [
"lead_time_days",
"on_hand"
],
"properties": {
"moq": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Moq",
"default": null,
"description": "Supplier minimum order quantity for this item."
},
"on_hand": {
"type": "number",
"title": "On Hand",
"description": "Units available now."
},
"on_order": {
"type": "number",
"title": "On Order",
"default": 0,
"minimum": 0,
"description": "Units already on open purchase orders."
},
"case_pack": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Case Pack",
"default": null,
"description": "Units per case; quantity is rounded up to whole cases."
},
"unit_cost": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Unit Cost",
"default": null,
"description": "Purchase cost per unit."
},
"daily_demand": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
},
"maxItems": 365
},
{
"type": "null"
}
],
"title": "Daily Demand",
"default": null,
"description": "Daily units sold, oldest first, 14 to 365 values."
},
"service_level": {
"type": "number",
"title": "Service Level",
"default": 0.95,
"maximum": 99,
"minimum": 0.5,
"description": "Target in-stock probability, 0.50 to 0.99."
},
"lead_time_days": {
"type": "integer",
"title": "Lead Time Days",
"maximum": 730,
"minimum": 1,
"description": "Supplier lead time in days."
},
"min_order_value": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Min Order Value",
"default": null,
"description": "Supplier minimum order value in currency; needs unit_cost."
},
"demand_std_daily": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Demand Std Daily",
"default": null,
"description": "Standard deviation of daily demand, if known."
},
"cover_days_target": {
"anyOf": [
{
"type": "integer",
"maximum": 3000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Cover Days Target",
"default": null,
"description": "Optional explicit days of cover to buy instead of the default weeks-of-supply target."
},
"average_daily_demand": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Average Daily Demand",
"default": null,
"description": "Average units sold per day, if no daily history."
}
}
}{
"type": "object",
"title": "OrderQuantityCalculation",
"required": [
"suggested_quantity",
"raw_quantity",
"reorder_point",
"safety_stock",
"shortfall",
"weeks_of_supply_target",
"demand_category",
"lead_time_category",
"value_category",
"position",
"rules_applied",
"assumptions"
],
"properties": {
"position": {
"type": "number",
"title": "Position"
},
"shortfall": {
"type": "number",
"title": "Shortfall"
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
},
"title": "Assumptions"
},
"connect_hint": {
"type": "string",
"title": "Connect Hint",
"default": "Forthcast does this automatically for Shopify stores: https://apps.shopify.com/forthcast",
"description": "How to get this done automatically on live store data."
},
"raw_quantity": {
"type": "integer",
"title": "Raw Quantity"
},
"safety_stock": {
"type": "number",
"title": "Safety Stock"
},
"reorder_point": {
"type": "number",
"title": "Reorder Point"
},
"rules_applied": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Rules Applied"
},
"estimated_cost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Estimated Cost",
"default": null
},
"value_category": {
"type": "string",
"title": "Value Category"
},
"demand_category": {
"type": "string",
"title": "Demand Category"
},
"lead_time_category": {
"type": "string",
"title": "Lead Time Category"
},
"suggested_quantity": {
"type": "integer",
"title": "Suggested Quantity"
},
"weeks_of_supply_target": {
"type": "number",
"title": "Weeks Of Supply Target"
},
"days_of_cover_after_delivery": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Days Of Cover After Delivery",
"default": null
}
},
"additionalProperties": false
}{
"title": "Calculate order quantity",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}forecast_demand_series — Forecast demand series
Use this when someone pastes past sales numbers and asks what to expect next month, next quarter or next season. Takes 3 to 365 monthly, weekly or daily totals (oldest first) and returns the next periods with an 80 percent range, the model used (Holt-Winters seasonal, damped trend, Croston for intermittent demand, or moving average) and why. Works without a connected store.
{
"type": "object",
"title": "forecast_demand_seriesArguments",
"required": [
"sales"
],
"properties": {
"sales": {
"type": "array",
"items": {
"type": "number"
},
"title": "Sales",
"maxItems": 365,
"minItems": 3,
"description": "Past sales totals per period, oldest first."
},
"period": {
"enum": [
"monthly",
"weekly",
"daily"
],
"type": "string",
"title": "Period",
"default": "monthly",
"description": "Granularity of the sales list."
},
"horizon": {
"type": "integer",
"title": "Horizon",
"default": 6,
"maximum": 90,
"minimum": 1,
"description": "Periods to forecast: up to 12 monthly, 26 weekly, 90 daily."
}
}
}{
"type": "object",
"title": "DemandForecastCalculation",
"required": [
"period",
"method",
"method_label",
"confidence",
"forecast",
"lower",
"upper",
"history_points",
"history_average",
"trend",
"seasonality",
"notes"
],
"properties": {
"lower": {
"type": "array",
"items": {
"type": "number"
},
"title": "Lower"
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"title": "Notes"
},
"trend": {
"type": "string",
"title": "Trend"
},
"upper": {
"type": "array",
"items": {
"type": "number"
},
"title": "Upper"
},
"method": {
"type": "string",
"title": "Method"
},
"period": {
"type": "string",
"title": "Period"
},
"forecast": {
"type": "array",
"items": {
"type": "number"
},
"title": "Forecast"
},
"confidence": {
"type": "string",
"title": "Confidence"
},
"seasonality": {
"type": "string",
"title": "Seasonality"
},
"connect_hint": {
"type": "string",
"title": "Connect Hint",
"default": "Forthcast does this automatically for Shopify stores: https://apps.shopify.com/forthcast",
"description": "How to get this done automatically on live store data."
},
"method_label": {
"type": "string",
"title": "Method Label"
},
"history_points": {
"type": "integer",
"title": "History Points"
},
"history_average": {
"type": "number",
"title": "History Average"
}
},
"additionalProperties": false
}{
"title": "Forecast demand series",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}score_inventory_health — Score inventory health
Use this when someone shares a list or CSV of products with stock and sales rates and asks which need reordering, which are overstocked, or how healthy the inventory is. Up to 500 rows. Applies Forthcast's urgency bands (Order now, Plan ahead, On track, Excess, No demand), reorder points, suggested quantities and inventory value. Works without a connected store.
{
"type": "object",
"$defs": {
"InventoryRowInput": {
"type": "object",
"title": "InventoryRowInput",
"required": [
"sku",
"on_hand"
],
"properties": {
"sku": {
"type": "string",
"title": "Sku",
"maxLength": 64,
"minLength": 1,
"description": "SKU or product name."
},
"on_hand": {
"type": "number",
"title": "On Hand",
"description": "Units available now."
},
"on_order": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "On Order",
"default": null,
"description": "Units on open purchase orders."
},
"unit_cost": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Unit Cost",
"default": null,
"description": "Cost per unit, for valuation."
},
"demand_per_day": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Demand Per Day",
"default": null,
"description": "Average units sold per day."
},
"lead_time_days": {
"anyOf": [
{
"type": "integer",
"maximum": 730,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Lead Time Days",
"default": null,
"description": "Supplier lead time in days."
},
"demand_per_month": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Demand Per Month",
"default": null,
"description": "Average units sold per month (if no daily figure)."
},
"demand_std_daily": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Demand Std Daily",
"default": null,
"description": "Standard deviation of daily demand, if known."
}
},
"additionalProperties": false
}
},
"title": "score_inventory_healthArguments",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/InventoryRowInput"
},
"title": "Items",
"maxItems": 500,
"minItems": 1,
"description": "Products to score."
},
"service_level": {
"type": "number",
"title": "Service Level",
"default": 0.95,
"maximum": 99,
"minimum": 0.5,
"description": "Target in-stock probability, 0.50 to 0.99."
},
"default_lead_time_days": {
"type": "integer",
"title": "Default Lead Time Days",
"default": 14,
"maximum": 730,
"minimum": 1,
"description": "Lead time for rows that give none."
}
}
}{
"type": "object",
"$defs": {
"ScoredInventoryRow": {
"type": "object",
"title": "ScoredInventoryRow",
"required": [
"sku",
"urgency",
"urgency_label",
"on_hand",
"on_order",
"average_daily_demand",
"reorder_point",
"safety_stock",
"suggested_quantity",
"lead_time_days"
],
"properties": {
"sku": {
"type": "string",
"title": "Sku"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Note",
"default": null
},
"on_hand": {
"type": "number",
"title": "On Hand"
},
"urgency": {
"type": "string",
"title": "Urgency"
},
"on_order": {
"type": "number",
"title": "On Order"
},
"safety_stock": {
"type": "number",
"title": "Safety Stock"
},
"days_of_cover": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Days Of Cover",
"default": null
},
"reorder_point": {
"type": "number",
"title": "Reorder Point"
},
"urgency_label": {
"type": "string",
"title": "Urgency Label"
},
"lead_time_days": {
"type": "integer",
"title": "Lead Time Days"
},
"inventory_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Inventory Value",
"default": null
},
"suggested_quantity": {
"type": "integer",
"title": "Suggested Quantity"
},
"average_daily_demand": {
"type": "number",
"title": "Average Daily Demand"
}
},
"additionalProperties": false
}
},
"title": "InventoryHealthScore",
"required": [
"items",
"counts",
"rows_scored",
"rows_skipped",
"assumptions"
],
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/ScoredInventoryRow"
},
"title": "Items"
},
"counts": {
"type": "object",
"title": "Counts",
"additionalProperties": {
"type": "integer"
}
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
},
"title": "Assumptions"
},
"rows_scored": {
"type": "integer",
"title": "Rows Scored"
},
"connect_hint": {
"type": "string",
"title": "Connect Hint",
"default": "Forthcast does this automatically for Shopify stores: https://apps.shopify.com/forthcast",
"description": "How to get this done automatically on live store data."
},
"excess_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Excess Value",
"default": null
},
"rows_skipped": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Rows Skipped"
},
"value_at_risk": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Value At Risk",
"default": null
},
"total_inventory_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Total Inventory Value",
"default": null
}
},
"additionalProperties": false
}{
"title": "Score inventory health",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}explain_inventory_metric — Explain inventory metric
Use this when someone asks what an inventory planning term means or how Forthcast calculates it: safety stock, reorder point, days of cover, urgency bands, service level, ABC class, EOQ, order quantity, fill rate, on-time rate, lead time, intermittent demand. Works without a connected store.
{
"type": "object",
"title": "explain_inventory_metricArguments",
"required": [
"metric"
],
"properties": {
"metric": {
"type": "string",
"title": "Metric",
"maxLength": 64,
"minLength": 1,
"description": "Metric name, for example 'reorder point' or 'days of cover'."
}
}
}{
"type": "object",
"title": "MetricExplanation",
"required": [
"found"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null
},
"found": {
"type": "boolean",
"title": "Found"
},
"metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Metric",
"default": null
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Formula",
"default": null
},
"related": {
"type": "array",
"items": {
"type": "string"
},
"title": "Related"
},
"definition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Definition",
"default": null
},
"connect_hint": {
"type": "string",
"title": "Connect Hint",
"default": "Forthcast does this automatically for Shopify stores: https://apps.shopify.com/forthcast",
"description": "How to get this done automatically on live store data."
},
"typical_targets": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Typical Targets",
"default": null
},
"available_metrics": {
"type": "array",
"items": {
"type": "string"
},
"title": "Available Metrics"
},
"how_forthcast_computes_it": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "How Forthcast Computes It",
"default": null
}
},
"additionalProperties": false
}{
"title": "Explain inventory metric",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
0 advertised
Resources
0 advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-02: 3 of 3 checks answered
- 2026-11-03: 4 of 4 checks answered
- 2026-11-04: 4 of 4 checks answered
- 2026-11-05: 4 of 4 checks answered
- 2026-11-06: 4 of 4 checks answered
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1044 ms
- 95th percentile latency
- 1044 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1044 ms · metadata changed · 11 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http forthcast-mcp https://app.forthcast.io/mcpCodex
codex mcp add forthcast-mcp --url https://app.forthcast.io/mcpCursor
{
"mcpServers": {
"forthcast-mcp": {
"url": "https://app.forthcast.io/mcp"
}
}
}Cline
{
"mcpServers": {
"forthcast-mcp": {
"type": "streamableHttp",
"url": "https://app.forthcast.io/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"forthcast-mcp": {
"type": "http",
"url": "https://app.forthcast.io/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http forthcast-mcp https://app.forthcast.io/mcpClaude Desktop
https://app.forthcast.io/mcpWindsurf
{
"mcpServers": {
"forthcast-mcp": {
"serverUrl": "https://app.forthcast.io/mcp"
}
}
}Let your agent find its tools
Find servers like Forthcast MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other erp and supply chain servers
Do you run Forthcast MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.