addrbookFor publishers
← The evidence ledger

Evidence row 228038

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 4b566e29-65cc-4977-b194-bf77f627311b
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
ea4c9b4945396feb979e02d54f6a983e3c091b0becd5734db383ba5250e98467
Leaf
0xf56288e3b9d6f02556935ccc082ea3f33118dbdb07555a72961e0a160efdd914

What was observed

{
  "count": 11,
  "tools": [
    {
      "description": "Calculate six balance contribution totals and meters for unique published ingredient IDs. Not nutrition or ingredient weights. No persistence.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "ingredientIds": {
            "items": {
              "maxLength": 36,
              "minLength": 1,
              "pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$",
              "type": "string"
            },
            "maxItems": 40,
            "type": "array",
            "uniqueItems": true
          }
        },
        "required": [
          "ingredientIds"
        ],
        "type": "object"
      },
      "name": "calculate_balance"
    },
    {
      "description": "Calculate a dough formula from explicit gram sizing, percentages and published or custom flours. Returns quantities, warnings, source information and a Dough continuation link. No persistence.",
      "inputSchema": {
        "additionalProperties": false,
        "description": "Percentages refer to total flour, except bigaHydration and starterHydrationPct. Flour rows are ratios, including empty/zero blends. Unique row IDs required. Named starter source must be a supplied row. Preferment leavening requires positive pff. No temperature inputs; preparation fixes DDT at 72 F and friction at 15 F. Buffer defaults off and non-off buffer requires balls sizing. Flour mode has no ball target: prepared ballCount/ballWeight are zero, ballsTotal is zero, bufferG is the whole batch and pizzaSize is unavailable. The 100000 g flour bound applies to direct flour inputs, not the balls solver result. Custom ingredients count by weight only and never in hydration.",
        "properties": {
          "ascorbicAcid": {
            "default": 0,
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          },
          "bigaHydration": {
            "default": 50,
            "description": "Preferment water as a percentage of preferment flour.",
            "maximum": 200,
            "minimum": 0,
            "type": "number"
          },
          "buffer": {
            "default": {
              "mode": "off"
            },
            "oneOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "mode": {
                    "enum": [
                      "off",
                      "recommended"
                    ]
                  }
                },
                "required": [
                  "mode"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "grams": {
                    "maximum": 10000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "mode": {
                    "const": "custom"
                  }
                },
                "required": [
                  "mode",
                  "grams"
                ],
                "type": "object"
              }
            ]
          },
          "customAdjustments": {
            "description": "Optional baker-named final-mix ingredients, up to 8, each a percentage of total flour. They count by weight only: they add to batch weight and ball sizing, never to hydration or flour absorption. Row IDs are c followed by five lowercase letters or digits, unique within the formula. Names are sent trimmed, 1 to 40 characters, unique ignoring case, and may not repeat one of Dough's own ingredient names such as Water, Salt, Oil or Sugar, or contain control, hidden or bidirectional characters or a web address. Any refused row fails the whole request.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "id": {
                  "maxLength": 6,
                  "minLength": 1,
                  "pattern": "^c[0-9a-z]{5}$",
                  "type": "string"
                },
                "name": {
                  "maxLength": 40,
                  "minLength": 1,
                  "pattern": "^\\S(?:[\\s\\S]*\\S)?$",
                  "type": "string"
                },
                "pct": {
                  "maximum": 100,
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "id",
                "name",
                "pct"
              ],
              "type": "object"
            },
            "maxItems": 8,
            "type": "array"
          },
          "dmp": {
            "default": 0,
            "maximum": 30,
            "minimum": 0,
            "type": "number"
          },
          "finalIdy": {
            "default": 0,
            "description": "Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required.",
            "maximum": 20,
            "minimum": 0,
            "type": "number"
          },
          "finalIsd": {
            "default": 0,
            "description": "Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required.",
            "maximum": 20,
            "minimum": 0,
            "type": "number"
          },
          "flours": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "bigaPct": {
                  "maximum": 100,
                  "minimum": 0,
                  "type": "number"
                },
                "id": {
                  "maxLength": 64,
                  "minLength": 1,
                  "pattern": "^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$",
                  "type": "string"
                },
                "pct": {
                  "maximum": 100,
                  "minimum": 0,
                  "type": "number"
                },
                "source": {
                  "oneOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "ref": {
                          "maxLength": 100,
                          "minLength": 1,
                          "pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
                          "type": "string"
                        },
                        "type": {
                          "const": "catalog"
                        }
                      },
                      "required": [
                        "type",
                        "ref"
                      ],
                      "type": "object"
                    },
                    {
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "maxLength": 100,
                          "minLength": 1,
                          "pattern": "\\S",
                          "type": "string"
                        },
                        "type": {
                          "const": "custom"
                        }
                      },
                      "required": [
                        "type",
                        "name"
                      ],
                      "type": "object"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "pct",
                "bigaPct",
                "source"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "type": "array"
          },
          "honey": {
            "default": 0,
            "maximum": 30,
            "minimum": 0,
            "type": "number"
          },
          "hydration": {
            "maximum": 200,
            "minimum": 0,
            "type": "number"
          },
          "ndmp": {
            "default": 0,
            "maximum": 30,
            "minimum": 0,
            "type": "number"
          },
          "nonfatDryMilk": {
            "default": 0,
            "maximum": 30,
            "minimum": 0,
            "type": "number"
          },
          "oil": {
            "default": 0,
            "maximum": 30,
            "minimum": 0,
            "type": "number"
          },
          "pff": {
            "default": 0,
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "prefIdy": {
            "default": 0,
            "description": "Instant dry yeast mass as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour.",
            "maximum": 20,
            "minimum": 0,
            "type": "number"
          },
          "prefIsd": {
            "default": 0,
            "description": "Instant sourdough mass as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour.",
            "maximum": 20,
            "minimum": 0,
            "type": "number"
          },
          "reserveWaterPct": {
            "default": 5,
            "maximum": 100,
            "minimum": 0,
            "type": "number"
          },
          "salt": {
            "default": 0,
            "maximum": 10,
            "minimum": 0,
            "type": "number"
          },
          "sizing": {
            "oneOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "flourGrams": {
                    "maximum": 100000,
                    "minimum": 1,
                    "type": "number"
                  },
                  "mode": {
                    "const": "flour"
                  }
                },
                "required": [
                  "mode",
                  "flourGrams"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "ballCount": {
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "ballGrams": {
                    "maximum": 2000,
                    "minimum": 50,
                    "type": "number"
                  },
                  "mode": {
                    "const": "balls"
                  }
                },
                "required": [
                  "mode",
                  "ballCount",
                  "ballGrams"
                ],
                "type": "object"
              }
            ]
          },
          "starterFinalPct": {
            "default": 0,
            "description": "Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required.",
            "maximum": 200,
            "minimum": 0,
            "type": "number"
          },
          "starterFlourSource": {
            "default": "blend",
            "description": "blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration.",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "starterHydrationPct": {
            "default": 100,
            "description": "Starter water as a percentage of starter flour, not total flour or starter mass.",
            "maximum": 200,
            "minimum": 40,
            "type": "number"
          },
          "starterPrefPct": {
            "default": 0,
            "description": "Preferment sourdough starter mass (including its flour and water) as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour.",
            "maximum": 200,
            "minimum": 0,
            "type": "number"
          },
          "sugar": {
            "default": 0,
            "maximum": 30,
            "minimum": 0,
            "type": "number"
          },
          "units": {
            "const": "g",
            "type": "string"
          }
        },
        "required": [
          "units",
          "sizing",
          "hydration",
          "flours"
        ],
        "type": "object"
      },
      "name": "calculate_dough"
    },
    {
      "description": "Read a published flour by UUID or slug. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs.",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_flour"
    },
    {
      "description": "Read a published ingredient by UUID. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Canonical ingredient UUID only, case-insensitive. Ingredient slugs are not globally unique.",
            "pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_ingredient"
    },
    {
      "description": "Read a published house pizza by UUID or slug. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs.",
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_pizza"
    },
    {
      "description": "Caller-provided sequential, contiguous stages ending when the first pizza enters the oven. Offset-bearing whole-minute instants must match the IANA zone. No fermentation prediction. Unique stage IDs, positive total duration, minimum <= maximum, available horizon and summed maxima <= 30 days. Windows are marginal, not independently selectable. No persistence.",
      "inputSchema": {
        "additionalProperties": false,
        "description": "Caller-provided sequential, contiguous stages ending when the first pizza enters the oven. Offset-bearing whole-minute instants must match the IANA zone. No fermentation prediction. Unique stage IDs, positive total duration, minimum <= maximum, available horizon and summed maxima <= 30 days. Windows are marginal, not independently selectable.",
        "properties": {
          "availableFrom": {
            "maxLength": 25,
            "minLength": 1,
            "pattern": "^[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::00)?(?:Z|[+-][0-9]{2}:[0-9]{2})$",
            "type": "string"
          },
          "bakeStartAt": {
            "maxLength": 25,
            "minLength": 1,
            "pattern": "^[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::00)?(?:Z|[+-][0-9]{2}:[0-9]{2})$",
            "type": "string"
          },
          "method": {
            "maxLength": 100,
            "minLength": 1,
            "pattern": "\\S",
            "type": "string"
          },
          "stages": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "id": {
                  "maxLength": 64,
                  "minLength": 1,
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
                  "type": "string"
                },
                "label": {
                  "maxLength": 100,
                  "minLength": 1,
                  "pattern": "\\S",
                  "type": "string"
                },
                "maxMinutes": {
                  "maximum": 43200,
                  "minimum": 0,
                  "type": "integer"
                },
                "minMinutes": {
                  "maximum": 43200,
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "id",
                "label",
                "minMinutes",
                "maxMinutes"
              ],
              "type": "object"
            },
            "maxItems": 16,
            "minItems": 1,
            "type": "array"
          },
          "timeZone": {
            "maxLength": 100,
            "minLength": 1,
            "pattern": "^[A-Za-z_]+(?:/[A-Za-z0-9_+.-]+)*$",
            "type": "string"
          }
        },
        "required": [
          "timeZone",
          "availableFrom",
          "bakeStartAt",
          "method",
          "stages"
        ],
        "type": "object"
      },
      "name": "plan_bake"
    },
    {
      "description": "Read published menu sections and their pizza IDs. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "read_menu"
    },
    {
      "description": "Search published flour facts. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 20,
            "description": "Decimal integer page size. Leading zeros, signs and fractions are rejected.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected.",
            "maximum": 500,
            "minimum": 0,
            "type": "integer"
          },
          "q": {
            "default": "",
            "description": "Literal, case-insensitive name or brand substring. Surrounding whitespace is trimmed.",
            "maxLength": 120,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "search_flours"
    },
    {
      "description": "Search published ingredient facts. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "course": {
            "description": "One exact normalized course. No legacy-station fallback.",
            "enum": [
              "Sauce",
              "Cheese",
              "Toppings",
              "Finishes"
            ],
            "type": "string"
          },
          "limit": {
            "default": 20,
            "description": "Decimal integer page size. Leading zeros, signs and fractions are rejected.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "description": "Decimal integer ingredient result offset. Leading zeros, signs and fractions are rejected.",
            "maximum": 2000,
            "minimum": 0,
            "type": "integer"
          },
          "q": {
            "default": "",
            "description": "Literal, case-insensitive name substring. Surrounding whitespace is trimmed.",
            "maxLength": 120,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "search_ingredients"
    },
    {
      "description": "Search published house pizzas. Returns public catalog data with source links and credits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 20,
            "description": "Decimal integer page size. Leading zeros, signs and fractions are rejected.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected.",
            "maximum": 500,
            "minimum": 0,
            "type": "integer"
          },
          "q": {
            "default": "",
            "description": "Literal, case-insensitive substring of published names, descriptions or resolved ingredient names. Surrounding whitespace is trimmed.",
            "maxLength": 120,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "search_pizzas"
    },
    {
      "description": "One to eight uniquely identified, already-sized Dough requests. Optional unique published house pizza references and counts annotate topping needs only; they do not multiply dough. Custom flours and custom ingredients retain batch/row identity and are never merged across batches; a custom ingredient item's id is custom:<batchId>:<rowId>. Ready starter is separate from fresh ingredients. Topping quantities are unknown. No persistence.",
      "inputSchema": {
        "additionalProperties": false,
        "description": "One to eight uniquely identified, already-sized Dough requests. Optional unique published house pizza references and counts annotate topping needs only; they do not multiply dough. Custom flours and custom ingredients retain batch/row identity and are never merged across batches; a custom ingredient item's id is custom:<batchId>:<rowId>. Ready starter is separate from fresh ingredients. Topping quantities are unknown.",
        "properties": {
          "batches": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "dough": {
                  "additionalProperties": false,
                  "description": "Percentages refer to total flour, except bigaHydration and starterHydrationPct. Flour rows are ratios, including empty/zero blends. Unique row IDs required. Named starter source must be a supplied row. Preferment leavening requires positive pff. No temperature inputs; preparation fixes DDT at 72 F and friction at 15 F. Buffer defaults off and non-off buffer requires balls sizing. Flour mode has no ball target: prepared ballCount/ballWeight are zero, ballsTotal is zero, bufferG is the whole batch and pizzaSize is unavailable. The 100000 g flour bound applies to direct flour inputs, not the balls solver result. Custom ingredients count by weight only and never in hydration.",
                  "properties": {
                    "ascorbicAcid": {
                      "default": 0,
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "bigaHydration": {
                      "default": 50,
                      "description": "Preferment water as a percentage of preferment flour.",
                      "maximum": 200,
                      "minimum": 0,
                      "type": "number"
                    },
                    "buffer": {
                      "default": {
                        "mode": "off"
                      },
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "mode": {
                              "enum": [
                                "off",
                                "recommended"
                              ]
                            }
                          },
                          "required": [
                            "mode"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "grams": {
                              "maximum": 10000,
                              "minimum": 0,
                              "type": "number"
                            },
                            "mode": {
                              "const": "custom"
                            }
                          },
                          "required": [
                            "mode",
                            "grams"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "customAdjustments": {
                      "description": "Optional baker-named final-mix ingredients, up to 8, each a percentage of total flour. They count by weight only: they add to batch weight and ball sizing, never to hydration or flour absorption. Row IDs are c followed by five lowercase letters or digits, unique within the formula. Names are sent trimmed, 1 to 40 characters, unique ignoring case, and may not repeat one of Dough's own ingredient names such as Water, Salt, Oil or Sugar, or contain control, hidden or bidirectional characters or a web address. Any refused row fails the whole request.",
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "id": {
                            "maxLength": 6,
                            "minLength": 1,
                            "pattern": "^c[0-9a-z]{5}$",
                            "type": "string"
                          },
                          "name": {
                            "maxLength": 40,
                            "minLength": 1,
                            "pattern": "^\\S(?:[\\s\\S]*\\S)?$",
                            "type": "string"
                          },
                          "pct": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "pct"
                        ],
                        "type": "object"
                      },
                      "maxItems": 8,
                      "type": "array"
                    },
                    "dmp": {
                      "default": 0,
                      "maximum": 30,
                      "minimum": 0,
                      "type": "number"
                    },
                    "finalIdy": {
                      "default": 0,
                      "description": "Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required.",
                      "maximum": 20,
                      "minimum": 0,
                      "type": "number"
                    },
                    "finalIsd": {
                      "default": 0,
                      "description": "Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required.",
                      "maximum": 20,
                      "minimum": 0,
                      "type": "number"
                    },
                    "flours": {
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "bigaPct": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "id": {
                            "maxLength": 64,
                            "minLength": 1,
                            "pattern": "^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$",
                            "type": "string"
                          },
                          "pct": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "source": {
                            "oneOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "ref": {
                                    "maxLength": 100,
                                    "minLength": 1,
                                    "pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
                                    "type": "string"
                                  },
                                  "type": {
                                    "const": "catalog"
                                  }
                                },
                                "required": [
                                  "type",
                                  "ref"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "name": {
                                    "maxLength": 100,
                                    "minLength": 1,
                                    "pattern": "\\S",
                                    "type": "string"
                                  },
                                  "type": {
                                    "const": "custom"
                                  }
                                },
                                "required": [
                                  "type",
                                  "name"
                                ],
                                "type": "object"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "pct",
                          "bigaPct",
                          "source"
                        ],
                        "type": "object"
                      },
                      "maxItems": 12,
                      "type": "array"
                    },
                    "honey": {
                      "default": 0,
                      "maximum": 30,
                      "minimum": 0,
                      "type": "number"
                    },
                    "hydration": {
                      "maximum": 200,
                      "minimum": 0,
                      "type": "number"
                    },
                    "ndmp": {
                      "default": 0,
                      "maximum": 30,
                      "minimum": 0,
                      "type": "number"
                    },
                    "nonfatDryMilk": {
                      "default": 0,
                      "maximum": 30,
                      "minimum": 0,
                      "type": "number"
                    },
                    "oil": {
                      "default": 0,
                      "maximum": 30,
                      "minimum": 0,
                      "type": "number"
                    },
                    "pff": {
                      "default": 0,
                      "maximum": 100,
                      "minimum": 0,
                      "type": "number"
                    },
                    "prefIdy": {
                      "default": 0,
                      "description": "Instant dry yeast mass as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour.",
                      "maximum": 20,
                      "minimum": 0,
                      "type": "number"
                    },
                    "prefIsd": {
                      "default": 0,
                      "description": "Instant sourdough mass as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour.",
                      "maximum": 20,
                      "minimum": 0,
                      "type": "number"
                    },
                    "reserveWaterPct": {
                      "default": 5,
                      "maximum": 100,
                      "minimum": 0,
                      "type": "number"
                    },
                    "salt": {
                      "default": 0,
                      "maximum": 10,
                      "minimum": 0,
                      "type": "number"
                    },
                    "sizing": {
                      "oneOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "flourGrams": {
                              "maximum": 100000,
                              "minimum": 1,
                              "type": "number"
                            },
                            "mode": {
                              "const": "flour"
                            }
                          },
                          "required": [
                            "mode",
                            "flourGrams"
                          ],
                          "type": "object"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "ballCount": {
                              "maximum": 100,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "ballGrams": {
                              "maximum": 2000,
                              "minimum": 50,
                              "type": "number"
                            },
                            "mode": {
                              "const": "balls"
                            }
                          },
                          "required": [
                            "mode",
                            "ballCount",
                            "ballGrams"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "starterFinalPct": {
                      "default": 0,
                      "description": "Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required.",
                      "maximum": 200,
                      "minimum": 0,
                      "type": "number"
                    },
                    "starterFlourSource": {
                      "default": "blend",
                      "description": "blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration.",
                      "maxLength": 64,
                      "minLength": 1,
                      "type": "string"
                    },
                    "starterHydrationPct": {
                      "default": 100,
                      "description": "Starter water as a percentage of starter flour, not total flour or starter mass.",
                      "maximum": 200,
                      "minimum": 40,
                      "type": "number"
                    },
                    "starterPrefPct": {
                      "default": 0,
                      "description": "Preferment sourdough starter mass (including its flour and water) as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour.",
                      "maximum": 200,
                      "minimum": 0,
                      "type": "number"
                    },
                    "sugar": {
                      "default": 0,
                      "maximum": 30,
                      "minimum": 0,
                      "type": "number"
                    },
                    "units": {
                      "const": "g",
                      "type": "string"
                    }
                  },
                  "required": [
                    "units",
                    "sizing",
                    "hydration",
                    "flours"
                  ],
                  "type": "object"
                },
                "id": {
                  "maxLength": 64,
                  "minLength": 1,
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "dough"
              ],
              "type": "object"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "pizzas": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "count": {
                  "maximum": 100,
                  "minimum": 1,
                  "type": "integer"
                },
                "ref": {
                  "maxLength": 100,
                  "minLength": 1,
                  "pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
                  "type": "string"
                }
              },
              "required": [
                "ref",
                "count"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          }
        },
        "required": [
          "batches"
        ],
        "type": "object"
      },
      "name": "shopping_list"
    }
  ]
}

What the leaf hashes

{"body":"ea4c9b4945396feb979e02d54f6a983e3c091b0becd5734db383ba5250e98467","id":228038,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793028663399635,"prev":null,"subject":"4b566e29-65cc-4977-b194-bf77f627311b","subject_kind":"endpoint"}

Proof

Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.

How to check it · This row as JSON