Koskamo

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.

Forthcast MCP logo, by ForthcastVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-02Operated by Forthcast
You need:Access is read-only and uses OAuth
MCP endpoint (Streamable HTTP)
https://app.forthcast.io/mcp
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 11 of 11 declare behavior hints · 10 of 10 with parameters document them all

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

Vendor evidenceRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Two kinds of tools. The calculate_, forecast_, score_ and explain_ tools work for anyone with no sign-in: use them when the user supplies numbers (demand, lead time, stock, sales history, a CSV). The get_, find_ and list_ tools read one connected Forthcast store and need the user to sign in; use them only when the user asks about their own live inventory, orders or suppliers. Prefer the overview for broad health questions, reorder recommendations for buying decisions, and the narrower item, purchase-order, or supplier tools when the user names those entities. All tools are read-only; never claim that a purchase order or inventory change was made. Public results include the assumptions used; state them when they matter.

Tools

11 advertised

get_inventory_overview — Get inventory overview
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_inventory_overview input schema
{
  "type": "object",
  "title": "get_inventory_overviewArguments",
  "properties": {}
}
get_inventory_overview output schema
{
  "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
}
get_inventory_overview annotations
{
  "title": "Get inventory overview",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_reorder_recommendations — Get reorder recommendations
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_reorder_recommendations input schema
{
  "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."
    }
  }
}
get_reorder_recommendations output schema
{
  "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
}
get_reorder_recommendations annotations
{
  "title": "Get reorder recommendations",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_inventory_items — Find inventory items
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_inventory_items input schema
{
  "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."
    }
  }
}
find_inventory_items output schema
{
  "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
}
find_inventory_items annotations
{
  "title": "Find inventory items",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_inventory_item — Get inventory item
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_inventory_item input schema
{
  "type": "object",
  "title": "get_inventory_itemArguments",
  "required": [
    "sku"
  ],
  "properties": {
    "sku": {
      "type": "string",
      "title": "Sku",
      "maxLength": 255,
      "minLength": 1,
      "description": "Exact merchant SKU code."
    }
  }
}
get_inventory_item output schema
{
  "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
}
get_inventory_item annotations
{
  "title": "Get inventory item",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_purchase_orders — List purchase orders
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_purchase_orders input schema
{
  "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."
    }
  }
}
list_purchase_orders output schema
{
  "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
}
list_purchase_orders annotations
{
  "title": "List purchase orders",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_supplier_performance — Get supplier performance
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_supplier_performance input schema
{
  "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."
    }
  }
}
get_supplier_performance output schema
{
  "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
}
get_supplier_performance annotations
{
  "title": "Get supplier performance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate_reorder_point — Calculate reorder point
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

calculate_reorder_point input schema
{
  "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."
    }
  }
}
calculate_reorder_point output schema
{
  "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
}
calculate_reorder_point annotations
{
  "title": "Calculate reorder point",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate_order_quantity — Calculate order quantity
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

calculate_order_quantity input schema
{
  "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."
    }
  }
}
calculate_order_quantity output schema
{
  "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
}
calculate_order_quantity annotations
{
  "title": "Calculate order quantity",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
forecast_demand_series — Forecast demand series
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

forecast_demand_series input schema
{
  "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."
    }
  }
}
forecast_demand_series output schema
{
  "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
}
forecast_demand_series annotations
{
  "title": "Forecast demand series",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
score_inventory_health — Score inventory health
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

score_inventory_health input schema
{
  "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."
    }
  }
}
score_inventory_health output schema
{
  "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
}
score_inventory_health annotations
{
  "title": "Score inventory health",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
explain_inventory_metric — Explain inventory metric
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

explain_inventory_metric input schema
{
  "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'."
    }
  }
}
explain_inventory_metric output schema
{
  "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
}
explain_inventory_metric annotations
{
  "title": "Explain inventory metric",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

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.

100% (20 of 20 checks answered)

  1. 2026-11-02: 3 of 3 checks answered
  2. 2026-11-03: 4 of 4 checks answered
  3. 2026-11-04: 4 of 4 checks answered
  4. 2026-11-05: 4 of 4 checks answered
  5. 2026-11-06: 4 of 4 checks answered
  6. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http forthcast-mcp https://app.forthcast.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add forthcast-mcp --url https://app.forthcast.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable forthcast-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "forthcast-mcp": {
      "url": "https://app.forthcast.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "forthcast-mcp": {
      "type": "streamableHttp",
      "url": "https://app.forthcast.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start forthcast-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "forthcast-mcp": {
      "type": "http",
      "url": "https://app.forthcast.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http forthcast-mcp https://app.forthcast.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://app.forthcast.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing