Barbaro

Read published house pizza facts and calculate dough and ingredient balance.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
84%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~5,578Tokens (tool definitions)
~4.7 KBTypical response size
Significant attention impact (4.36% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "barbaro": {
      "url": "https://barbaropizza.com/mcp"
    }
  }
}

Remote endpoints

https://barbaropizza.com/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_pizzas(q, limit, offset)

Search published house pizzas. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 120,
      "default": "",
      "description": "Literal, case-insensitive substring of published names, descriptions or resolved ingredient names. Surrounding whitespace is trimmed."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20,
      "description": "Decimal integer page size. Leading zeros, signs and fractions are rejected."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 500,
      "default": 0,
      "description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected."
    }
  },
  "additionalProperties": false
}
🟢get_pizza(id)

Read a published house pizza by UUID or slug. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "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})$",
      "description": "Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢read_menu

Read published menu sections and their pizza IDs. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢search_ingredients(q, course, limit, offset)

Search published ingredient facts. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 120,
      "default": "",
      "description": "Literal, case-insensitive name substring. Surrounding whitespace is trimmed."
    },
    "course": {
      "type": "string",
      "enum": [
        "Sauce",
        "Cheese",
        "Toppings",
        "Finishes"
      ],
      "description": "One exact normalized course. No legacy-station fallback."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20,
      "description": "Decimal integer page size. Leading zeros, signs and fractions are rejected."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 500,
      "default": 0,
      "description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected."
    }
  },
  "additionalProperties": false
}
🟢get_ingredient(id)

Read a published ingredient by UUID. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "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}$",
      "description": "Canonical ingredient UUID only, case-insensitive. Ingredient slugs are not globally unique."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢search_flours(q, limit, offset)

Search published flour facts. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 120,
      "default": "",
      "description": "Literal, case-insensitive name or brand substring. Surrounding whitespace is trimmed."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20,
      "description": "Decimal integer page size. Leading zeros, signs and fractions are rejected."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 500,
      "default": 0,
      "description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected."
    }
  },
  "additionalProperties": false
}
🟢get_flour(id)

Read a published flour by UUID or slug. Returns public catalog data with source links and credits.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "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})$",
      "description": "Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢calculate_dough(units, sizing, hydration, flours, salt, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "units": {
      "type": "string",
      "const": "g"
    },
    "sizing": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mode": {
              "const": "flour"
            },
            "flourGrams": {
              "type": "number",
              "minimum": 1,
              "maximum": 100000
            }
          },
          "required": [
            "mode",
            "flourGrams"
          ]
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mode": {
              "const": "balls"
            },
            "ballCount": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "ballGrams": {
              "type": "number",
              "minimum": 50,
              "maximum": 2000
            }
          },
          "required": [
            "mode",
            "ballCount",
            "ballGrams"
          ]
        }
      ]
    },
    "hydration": {
      "type": "number",
      "minimum": 0,
      "maximum": 200
    },
    "flours": {
      "type": "array",
      "maxItems": 12,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$"
          },
          "pct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "bigaPct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "source": {
            "oneOf": [
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "catalog"
                  },
                  "ref": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100,
                    "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})$"
                  }
                },
                "required": [
                  "type",
                  "ref"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "custom"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100,
                    "pattern": "\\S"
                  }
                },
                "required": [
                  "type",
                  "name"
                ]
              }
            ]
          }
        },
        "required": [
          "id",
          "pct",
          "bigaPct",
          "source"
        ]
      }
    },
    "salt": {
      "type": "number",
      "minimum": 0,
      "maximum": 10,
      "default": 0
    },
    "oil": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "default": 0
    },
    "sugar": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "default": 0
    },
    "honey": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "default": 0
    },
    "dmp": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "default": 0
    },
    "ndmp": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "default": 0
    },
    "nonfatDryMilk": {
      "type": "number",
      "minimum": 0,
      "maximum": 30,
      "default": 0
    },
    "ascorbicAcid": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "default": 0
    },
    "prefIsd": {
      "type": "number",
      "minimum": 0,
      "maximum": 20,
      "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."
    },
    "prefIdy": {
      "type": "number",
      "minimum": 0,
      "maximum": 20,
      "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."
    },
    "finalIsd": {
      "type": "number",
      "minimum": 0,
      "maximum": 20,
      "default": 0,
      "description": "Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required."
    },
    "finalIdy": {
      "type": "number",
      "minimum": 0,
      "maximum": 20,
      "default": 0,
      "description": "Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required."
    },
    "starterPrefPct": {
      "type": "number",
      "minimum": 0,
      "maximum": 200,
      "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."
    },
    "starterFinalPct": {
      "type": "number",
      "minimum": 0,
      "maximum": 200,
      "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."
    },
    "pff": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "default": 0
    },
    "bigaHydration": {
      "type": "number",
      "minimum": 0,
      "maximum": 200,
      "default": 50,
      "description": "Preferment water as a percentage of preferment flour."
    },
    "reserveWaterPct": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "default": 5
    },
    "starterHydrationPct": {
      "type": "number",
      "minimum": 40,
      "maximum": 200,
      "default": 100,
      "description": "Starter water as a percentage of starter flour, not total flour or starter mass."
    },
    "starterFlourSource": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "default": "blend",
      "description": "blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration."
    },
    "buffer": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mode": {
              "enum": [
                "off",
                "recommended"
              ]
            }
          },
          "required": [
            "mode"
          ]
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "mode": {
              "const": "custom"
            },
            "grams": {
              "type": "number",
              "minimum": 0,
              "maximum": 10000
            }
          },
          "required": [
            "mode",
            "grams"
          ]
        }
      ],
      "default": {
        "mode": "off"
      }
    }
  },
  "required": [
    "units",
    "sizing",
    "hydration",
    "flours"
  ],
  "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."
}
🟢calculate_balance(ingredientIds)

Calculate six balance contribution totals and meters for unique published ingredient IDs. Not nutrition or ingredient weights. No persistence.

Input Schema

{
  "type": "object",
  "properties": {
    "ingredientIds": {
      "type": "array",
      "maxItems": 40,
      "uniqueItems": true,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 36,
        "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}$"
      }
    }
  },
  "required": [
    "ingredientIds"
  ],
  "additionalProperties": false
}
🟢plan_bake(timeZone, availableFrom, bakeStartAt, method, stages)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "timeZone": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[A-Za-z_]+(?:/[A-Za-z0-9_+.-]+)*$"
    },
    "availableFrom": {
      "type": "string",
      "minLength": 1,
      "maxLength": 25,
      "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})$"
    },
    "bakeStartAt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 25,
      "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})$"
    },
    "method": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "\\S"
    },
    "stages": {
      "type": "array",
      "minItems": 1,
      "maxItems": 16,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "pattern": "\\S"
          },
          "minMinutes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 43200
          },
          "maxMinutes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 43200
          }
        },
        "required": [
          "id",
          "label",
          "minMinutes",
          "maxMinutes"
        ]
      }
    }
  },
  "required": [
    "timeZone",
    "availableFrom",
    "bakeStartAt",
    "method",
    "stages"
  ],
  "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."
}
🟢shopping_list(batches, pizzas)

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 retain batch/row identity. Ready starter is separate from fresh ingredients. Topping quantities are unknown. No persistence.

Input Schema

{
  "type": "object",
  "properties": {
    "batches": {
      "type": "array",
      "minItems": 1,
      "maxItems": 8,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
          },
          "dough": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "units": {
                "type": "string",
                "const": "g"
              },
              "sizing": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "flour"
                      },
                      "flourGrams": {
                        "type": "number",
                        "minimum": 1,
                        "maximum": 100000
                      }
                    },
                    "required": [
                      "mode",
                      "flourGrams"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "balls"
                      },
                      "ballCount": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 100
                      },
                      "ballGrams": {
                        "type": "number",
                        "minimum": 50,
                        "maximum": 2000
                      }
                    },
                    "required": [
                      "mode",
                      "ballCount",
                      "ballGrams"
                    ]
                  }
                ]
              },
              "hydration": {
                "type": "number",
                "minimum": 0,
                "maximum": 200
              },
              "flours": {
                "type": "array",
                "maxItems": 12,
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64,
                      "pattern": "^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$"
                    },
                    "pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "bigaPct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "source": {
                      "oneOf": [
                        {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "type": {
                              "const": "catalog"
                            },
                            "ref": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100,
                              "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})$"
                            }
                          },
                          "required": [
                            "type",
                            "ref"
                          ]
                        },
                        {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "type": {
                              "const": "custom"
                            },
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 100,
                              "pattern": "\\S"
                            }
                          },
                          "required": [
                            "type",
                            "name"
                          ]
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "pct",
                    "bigaPct",
                    "source"
                  ]
                }
              },
              "salt": {
                "type": "number",
                "minimum": 0,
                "maximum": 10,
                "default": 0
              },
              "oil": {
                "type": "number",
                "minimum": 0,
                "maximum": 30,
                "default": 0
              },
              "sugar": {
                "type": "number",
                "minimum": 0,
                "maximum": 30,
                "default": 0
              },
              "honey": {
                "type": "number",
                "minimum": 0,
                "maximum": 30,
                "default": 0
              },
              "dmp": {
                "type": "number",
                "minimum": 0,
                "maximum": 30,
                "default": 0
              },
              "ndmp": {
                "type": "number",
                "minimum": 0,
                "maximum": 30,
                "default": 0
              },
              "nonfatDryMilk": {
                "type": "number",
                "minimum": 0,
                "maximum": 30,
                "default": 0
              },
              "ascorbicAcid": {
                "type": "number",
                "minimum": 0,
                "maximum": 1,
                "default": 0
              },
              "prefIsd": {
                "type": "number",
                "minimum": 0,
                "maximum": 20,
                "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."
              },
              "prefIdy": {
                "type": "number",
                "minimum": 0,
                "maximum": 20,
                "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."
              },
              "finalIsd": {
                "type": "number",
                "minimum": 0,
                "maximum": 20,
                "default": 0,
                "description": "Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required."
              },
              "finalIdy": {
                "type": "number",
                "minimum": 0,
                "maximum": 20,
                "default": 0,
                "description": "Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required."
              },
              "starterPrefPct": {
                "type": "number",
                "minimum": 0,
                "maximum": 200,
                "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."
              },
              "starterFinalPct": {
                "type": "number",
                "minimum": 0,
                "maximum": 200,
                "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."
              },
              "pff": {
                "type": "number",
                "minimum": 0,
                "maximum": 100,
                "default": 0
              },
              "bigaHydration": {
                "type": "number",
                "minimum": 0,
                "maximum": 200,
                "default": 50,
                "description": "Preferment water as a percentage of preferment flour."
              },
              "reserveWaterPct": {
                "type": "number",
                "minimum": 0,
                "maximum": 100,
                "default": 5
              },
              "starterHydrationPct": {
                "type": "number",
                "minimum": 40,
                "maximum": 200,
                "default": 100,
                "description": "Starter water as a percentage of starter flour, not total flour or starter mass."
              },
              "starterFlourSource": {
                "type": "string",
                "minLength": 1,
                "maxLength": 64,
                "default": "blend",
                "description": "blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration."
              },
              "buffer": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "enum": [
                          "off",
                          "recommended"
                        ]
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "custom"
                      },
                      "grams": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 10000
                      }
                    },
                    "required": [
                      "mode",
                      "grams"
                    ]
                  }
                ],
                "default": {
                  "mode": "off"
                }
              }
            },
            "required": [
              "units",
              "sizing",
              "hydration",
              "flours"
            ],
            "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."
          }
        },
        "required": [
          "id",
          "dough"
        ]
      }
    },
    "pizzas": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ref": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "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})$"
          },
          "count": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          }
        },
        "required": [
          "ref",
          "count"
        ]
      }
    }
  },
  "required": [
    "batches"
  ],
  "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 retain batch/row identity. Ready starter is separate from fresh ingredients. Topping quantities are unknown."
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools