← The evidence ledger
Evidence row 2539332
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 8a0cc4ed-9a1d-44ae-9590-61d7dd08001c
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 5ec9bbfeda624d0a5dfedb097226bdafc18835e948bdbd7bebb01a4c7950db83
- Leaf
- 0x2f19eedb1c486e9389c9b2b2b8b4467e4fb25fbba83ace4343b11df73970d7a9
What was observed
{
"count": 11,
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"average_daily_demand": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Average units sold per day, if no daily history.",
"title": "Average Daily Demand"
},
"case_pack": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Units per case; quantity is rounded up to whole cases.",
"title": "Case Pack"
},
"cover_days_target": {
"anyOf": [
{
"maximum": 3000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional explicit days of cover to buy instead of the default weeks-of-supply target.",
"title": "Cover Days Target"
},
"daily_demand": {
"anyOf": [
{
"items": {
"type": "number"
},
"maxItems": 365,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Daily units sold, oldest first, 14 to 365 values.",
"title": "Daily Demand"
},
"demand_std_daily": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Standard deviation of daily demand, if known.",
"title": "Demand Std Daily"
},
"lead_time_days": {
"description": "Supplier lead time in days.",
"maximum": 730,
"minimum": 1,
"title": "Lead Time Days",
"type": "integer"
},
"min_order_value": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Supplier minimum order value in currency; needs unit_cost.",
"title": "Min Order Value"
},
"moq": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Supplier minimum order quantity for this item.",
"title": "Moq"
},
"on_hand": {
"description": "Units available now.",
"title": "On Hand",
"type": "number"
},
"on_order": {
"default": 0,
"description": "Units already on open purchase orders.",
"minimum": 0,
"title": "On Order",
"type": "number"
},
"service_level": {
"default": 0.95,
"description": "Target in-stock probability, 0.50 to 0.99.",
"maximum": 99,
"minimum": 0.5,
"title": "Service Level",
"type": "number"
},
"unit_cost": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Purchase cost per unit.",
"title": "Unit Cost"
}
},
"required": [
"lead_time_days",
"on_hand"
],
"title": "calculate_order_quantityArguments",
"type": "object"
},
"name": "calculate_order_quantity"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"average_daily_demand": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Average units sold per day, if no daily history.",
"title": "Average Daily Demand"
},
"daily_demand": {
"anyOf": [
{
"items": {
"type": "number"
},
"maxItems": 365,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Daily units sold, oldest first, 14 to 365 values.",
"title": "Daily Demand"
},
"demand_std_daily": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Standard deviation of daily demand; assumed sqrt(average) when omitted.",
"title": "Demand Std Daily"
},
"lead_time_days": {
"description": "Supplier lead time in days.",
"maximum": 730,
"minimum": 1,
"title": "Lead Time Days",
"type": "integer"
},
"service_level": {
"default": 0.95,
"description": "Target in-stock probability, 0.50 to 0.99 (95 also accepted).",
"maximum": 99,
"minimum": 0.5,
"title": "Service Level",
"type": "number"
}
},
"required": [
"lead_time_days"
],
"title": "calculate_reorder_pointArguments",
"type": "object"
},
"name": "calculate_reorder_point"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"metric": {
"description": "Metric name, for example 'reorder point' or 'days of cover'.",
"maxLength": 64,
"minLength": 1,
"title": "Metric",
"type": "string"
}
},
"required": [
"metric"
],
"title": "explain_inventory_metricArguments",
"type": "object"
},
"name": "explain_inventory_metric"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"default": 15,
"description": "Maximum items to return.",
"maximum": 30,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"supplier": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional case-insensitive assigned supplier name.",
"title": "Supplier"
},
"urgency": {
"anyOf": [
{
"enum": [
"critical",
"warning",
"ok",
"excess",
"no-demand"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional Forthcast urgency bucket.",
"title": "Urgency"
},
"vendor": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional case-insensitive Shopify vendor or brand.",
"title": "Vendor"
}
},
"title": "find_inventory_itemsArguments",
"type": "object"
},
"name": "find_inventory_items"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"horizon": {
"default": 6,
"description": "Periods to forecast: up to 12 monthly, 26 weekly, 90 daily.",
"maximum": 90,
"minimum": 1,
"title": "Horizon",
"type": "integer"
},
"period": {
"default": "monthly",
"description": "Granularity of the sales list.",
"enum": [
"monthly",
"weekly",
"daily"
],
"title": "Period",
"type": "string"
},
"sales": {
"description": "Past sales totals per period, oldest first.",
"items": {
"type": "number"
},
"maxItems": 365,
"minItems": 3,
"title": "Sales",
"type": "array"
}
},
"required": [
"sales"
],
"title": "forecast_demand_seriesArguments",
"type": "object"
},
"name": "forecast_demand_series"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"sku": {
"description": "Exact merchant SKU code.",
"maxLength": 255,
"minLength": 1,
"title": "Sku",
"type": "string"
}
},
"required": [
"sku"
],
"title": "get_inventory_itemArguments",
"type": "object"
},
"name": "get_inventory_item"
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"title": "get_inventory_overviewArguments",
"type": "object"
},
"name": "get_inventory_overview"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"default": 15,
"description": "Maximum recommendations to return.",
"maximum": 30,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"priority": {
"default": "all",
"description": "Return order-now items, plan-ahead items, or both.",
"enum": [
"critical",
"warning",
"all"
],
"title": "Priority",
"type": "string"
},
"supplier": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional case-insensitive supplier name filter.",
"title": "Supplier"
}
},
"title": "get_reorder_recommendationsArguments",
"type": "object"
},
"name": "get_reorder_recommendations"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "Maximum suppliers to return.",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"supplier": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional case-insensitive supplier name filter.",
"title": "Supplier"
}
},
"title": "get_supplier_performanceArguments",
"type": "object"
},
"name": "get_supplier_performance"
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"description": "Maximum grouped purchase orders to return.",
"maximum": 40,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"status": {
"anyOf": [
{
"enum": [
"draft",
"open",
"partial",
"received",
"cancelled"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional exact purchase-order status.",
"title": "Status"
},
"supplier": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional case-insensitive supplier name filter.",
"title": "Supplier"
}
},
"title": "list_purchase_ordersArguments",
"type": "object"
},
"name": "list_purchase_orders"
},
{
"description": "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.",
"inputSchema": {
"$defs": {
"InventoryRowInput": {
"additionalProperties": false,
"properties": {
"demand_per_day": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Average units sold per day.",
"title": "Demand Per Day"
},
"demand_per_month": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Average units sold per month (if no daily figure).",
"title": "Demand Per Month"
},
"demand_std_daily": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Standard deviation of daily demand, if known.",
"title": "Demand Std Daily"
},
"lead_time_days": {
"anyOf": [
{
"maximum": 730,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Supplier lead time in days.",
"title": "Lead Time Days"
},
"on_hand": {
"description": "Units available now.",
"title": "On Hand",
"type": "number"
},
"on_order": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Units on open purchase orders.",
"title": "On Order"
},
"sku": {
"description": "SKU or product name.",
"maxLength": 64,
"minLength": 1,
"title": "Sku",
"type": "string"
},
"unit_cost": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Cost per unit, for valuation.",
"title": "Unit Cost"
}
},
"required": [
"sku",
"on_hand"
],
"title": "InventoryRowInput",
"type": "object"
}
},
"properties": {
"default_lead_time_days": {
"default": 14,
"description": "Lead time for rows that give none.",
"maximum": 730,
"minimum": 1,
"title": "Default Lead Time Days",
"type": "integer"
},
"items": {
"description": "Products to score.",
"items": {
"$ref": "#/$defs/InventoryRowInput"
},
"maxItems": 500,
"minItems": 1,
"title": "Items",
"type": "array"
},
"service_level": {
"default": 0.95,
"description": "Target in-stock probability, 0.50 to 0.99.",
"maximum": 99,
"minimum": 0.5,
"title": "Service Level",
"type": "number"
}
},
"required": [
"items"
],
"title": "score_inventory_healthArguments",
"type": "object"
},
"name": "score_inventory_health"
}
]
}What the leaf hashes
{"body":"5ec9bbfeda624d0a5dfedb097226bdafc18835e948bdbd7bebb01a4c7950db83","id":2539332,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793686715153040,"prev":null,"subject":"8a0cc4ed-9a1d-44ae-9590-61d7dd08001c","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (425475 rows).
- 0x2f19672078a5bdd77c78c3c8a24475a5b3d5229d2da4812373023d5b116fbb55
- 0x5c2b7f0e13faee2b49b33229d41b0866ddea7978a614d11ea7ea46f58f9c2902
- 0xdc9d0b9b81fe4f97918c87685ad9e5da282cab22b58f1ab12fd20dd0799acaa1
- 0x0ef991e814177758be542bba2f254684c4266c0d1b1dc03b0b0e9df647e24adf
- 0xd304d08a0a33f1c327aba23cb5b817a79f42005b835c6fac99c03d821faba552
- 0xc433d1a470a981f44d7b16e942544b79eb4e5f34446136eb9f85bdf244b91071
- 0xd3814cda8d98d1c17bf0f5acdec602ede0b48785280b35c8f700975232cbd55a
- 0xfe3d10fb836321de6800026583d713f3d71105f648830a2f50934ae047ecf597
- 0xe052b932b82dd43a0f0d2283a817871c5c82efb65ae93f43439ffe58a487ee5a
- 0x16fb5d7a23dbf9c0d99c0ee437f6756f5ee120441b144781cb828e5ed580d807
- 0x2fd3997140d7e146c0667023f3289fd6130a4e689e7090ebd3cfab6a604861ad
- 0x8455b4b7e5ecaa70aa53da04470fe41e0e0365e4edfd954320849b1c24ce31af
- 0x2f64dbba88ce60f5cad9ef597b99adbf687838c05ce885ed581fa95aaf9b1a3f
- 0x2498d172c194baddb2b78ac926b7c8da79833909dc2801e4c25af0c0eeca0f3d
- 0x3553ea75bcf78135f26289b22fcb05dd562af750aceb74fae97aaa66ea2adb8b
- 0xb1804d44f1a591de3b8b8db8fe72e8ab6695e6d154862ee8ea77b6ac2b43b67d
- 0x87df2ed9052c264d606c076742aa7e54b69fc8344b21e972ebcb19d020b7ecf3
- 0x012ad914f3f945da3b6b48eddc7a1388613e4afc04339deb76c609611864e9b9
- 0xe35032d4b064b015fe60638756eeb0bc24e7c7943586468d33349341ee0ed3d6
- Day root
- 0xb646ffa569e24bf8336b0a15a9d98d0a2f1239f58e10c2b18a9d22e43343566a
- Chained
- 0x35e926359fd19031c6b5e08fb3b44f2524386a57c8fdd353336c185603f53d43
- Published
- On Arc Testnet, block 70601990: 0xa5f9dadba13cde129126b950e64b815e6833cb8ff53b75026c9dbe769c3768c7