MCP 服务器

Barbaro

io.github.jeffforderer/barbaro
其他 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Provides published pizza, flour, and ingredient lookup, dough and ingredient-balance calculations, bake planning, and shopping-list generation.

calculate_balance
Calculate ingredient balance
Calculate six balance contribution totals and meters for unique published ingredient IDs. Not nutrition or ingredient weights. No persistence.
只读 幂等
输入模式
{'type': 'object', 'required': ['ingredientIds'], 'properties': {'ingredientIds': {'type': 'array', 'items': {'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}$', 'maxLength': 36, 'minLength': 1}, 'maxItems': 40, 'uniqueItems': True}}, 'additionalProperties': False}
calculate_dough
Calculate dough
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.
只读 幂等
输入模式
{'type': 'object', 'required': ['units', 'sizing', 'hydration', 'flours'], 'properties': {'dmp': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'oil': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'pff': {'type': 'number', 'default': 0, 'maximum': 100, 'minimum': 0}, 'ndmp': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'salt': {'type': 'number', 'default': 0, 'maximum': 10, 'minimum': 0}, 'honey': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'sugar': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'units': {'type': 'string', 'const': 'g'}, 'buffer': {'oneOf': [{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['off', 'recommended']}}, 'additionalProperties': False}, {'type': 'object', 'required': ['mode', 'grams'], 'properties': {'mode': {'const': 'custom'}, 'grams': {'type': 'number', 'maximum': 10000, 'minimum': 0}}, 'additionalProperties': False}], 'default': {'mode': 'off'}}, 'flours': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'pct', 'bigaPct', 'source'], 'properties': {'id': {'type': 'string', 'pattern': '^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$', 'maxLength': 64, 'minLength': 1}, 'pct': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'source': {'oneOf': [{'type': 'object', 'required': ['type', 'ref'], 'properties': {'ref': {'type': 'string', '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})$', 'maxLength': 100, 'minLength': 1}, 'type': {'const': 'catalog'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'name'], 'properties': {'name': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1}, 'type': {'const': 'custom'}}, 'additionalProperties': False}]}, 'bigaPct': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 12}, 'sizing': {'oneOf': [{'type': 'object', 'required': ['mode', 'flourGrams'], 'properties': {'mode': {'const': 'flour'}, 'flourGrams': {'type': 'number', 'maximum': 100000, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['mode', 'ballCount', 'ballGrams'], 'properties': {'mode': {'const': 'balls'}, 'ballCount': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'ballGrams': {'type': 'number', 'maximum': 2000, 'minimum': 50}}, 'additionalProperties': False}]}, 'prefIdy': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 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.'}, 'prefIsd': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 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.'}, 'finalIdy': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required.'}, 'finalIsd': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required.'}, 'hydration': {'type': 'number', 'maximum': 200, 'minimum': 0}, 'ascorbicAcid': {'type': 'number', 'default': 0, 'maximum': 1, 'minimum': 0}, 'bigaHydration': {'type': 'number', 'default': 50, 'maximum': 200, 'minimum': 0, 'description': 'Preferment water as a percentage of preferment flour.'}, 'nonfatDryMilk': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'starterPrefPct': {'type': 'number', 'default': 0, 'maximum': 200, 'minimum': 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.'}, 'reserveWaterPct': {'type': 'number', 'default': 5, 'maximum': 100, 'minimum': 0}, 'starterFinalPct': {'type': 'number', 'default': 0, 'maximum': 200, 'minimum': 0, 'description': 'Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required.'}, 'customAdjustments': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'pct'], 'properties': {'id': {'type': 'string', 'pattern': '^c[0-9a-z]{5}$', 'maxLength': 6, 'minLength': 1}, 'pct': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'name': {'type': 'string', 'pattern': '^\\S(?:[\\s\\S]*\\S)?$', 'maxLength': 40, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 8, '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."}, 'starterFlourSource': {'type': 'string', 'default': 'blend', 'maxLength': 64, 'minLength': 1, 'description': 'blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration.'}, 'starterHydrationPct': {'type': 'number', 'default': 100, 'maximum': 200, 'minimum': 40, 'description': 'Starter water as a percentage of starter flour, not total flour or starter mass.'}}, '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.', 'additionalProperties': False}
get_flour
Read a published flour by UUID or slug
Read a published flour by UUID or slug. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', '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})$', 'maxLength': 100, 'minLength': 1, 'description': 'Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs.'}}, 'additionalProperties': False}
get_ingredient
Read a published ingredient by UUID
Read a published ingredient by UUID. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], '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.'}}, 'additionalProperties': False}
get_pizza
Read a published house pizza by UUID or slug
Read a published house pizza by UUID or slug. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', '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})$', 'maxLength': 100, 'minLength': 1, 'description': 'Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs.'}}, 'additionalProperties': False}
plan_bake
Plan a bake
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.
只读 幂等
输入模式
{'type': 'object', 'required': ['timeZone', 'availableFrom', 'bakeStartAt', 'method', 'stages'], 'properties': {'method': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1}, 'stages': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'minMinutes', 'maxMinutes'], 'properties': {'id': {'type': 'string', 'pattern': '^[A-Za-z0-9][A-Za-z0-9_-]*$', 'maxLength': 64, 'minLength': 1}, 'label': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1}, 'maxMinutes': {'type': 'integer', 'maximum': 43200, 'minimum': 0}, 'minMinutes': {'type': 'integer', 'maximum': 43200, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 16, 'minItems': 1}, 'timeZone': {'type': 'string', 'pattern': '^[A-Za-z_]+(?:/[A-Za-z0-9_+.-]+)*$', 'maxLength': 100, 'minLength': 1}, 'bakeStartAt': {'type': 'string', '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})$', 'maxLength': 25, 'minLength': 1}, 'availableFrom': {'type': 'string', '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})$', 'maxLength': 25, 'minLength': 1}}, '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.', 'additionalProperties': False}
read_menu
Read published menu sections and their pizza IDs
Read published menu sections and their pizza IDs. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
search_flours
Search published flour facts
Search published flour facts. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'properties': {'q': {'type': 'string', 'default': '', 'maxLength': 120, 'description': 'Literal, case-insensitive name or brand substring. Surrounding whitespace is trimmed.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Decimal integer page size. Leading zeros, signs and fractions are rejected.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 500, 'minimum': 0, 'description': 'Decimal integer result offset. Leading zeros, signs and fractions are rejected.'}}, 'additionalProperties': False}
search_ingredients
Search published ingredient facts
Search published ingredient facts. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'properties': {'q': {'type': 'string', 'default': '', 'maxLength': 120, 'description': 'Literal, case-insensitive name substring. Surrounding whitespace is trimmed.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Decimal integer page size. Leading zeros, signs and fractions are rejected.'}, 'course': {'enum': ['Sauce', 'Cheese', 'Toppings', 'Finishes'], 'type': 'string', 'description': 'One exact normalized course. No legacy-station fallback.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 500, 'minimum': 0, 'description': 'Decimal integer result offset. Leading zeros, signs and fractions are rejected.'}}, 'additionalProperties': False}
search_pizzas
Search published house pizzas
Search published house pizzas. Returns public catalog data with source links and credits.
只读 幂等
输入模式
{'type': 'object', 'properties': {'q': {'type': 'string', 'default': '', 'maxLength': 120, 'description': 'Literal, case-insensitive substring of published names, descriptions or resolved ingredient names. Surrounding whitespace is trimmed.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Decimal integer page size. Leading zeros, signs and fractions are rejected.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 500, 'minimum': 0, 'description': 'Decimal integer result offset. Leading zeros, signs and fractions are rejected.'}}, 'additionalProperties': False}
shopping_list
Make a shopping list
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.
只读 幂等
输入模式
{'type': 'object', 'required': ['batches'], 'properties': {'pizzas': {'type': 'array', 'items': {'type': 'object', 'required': ['ref', 'count'], 'properties': {'ref': {'type': 'string', '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})$', 'maxLength': 100, 'minLength': 1}, 'count': {'type': 'integer', 'maximum': 100, 'minimum': 1}}, 'additionalProperties': False}, 'maxItems': 20}, 'batches': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'dough'], 'properties': {'id': {'type': 'string', 'pattern': '^[A-Za-z0-9][A-Za-z0-9_-]*$', 'maxLength': 64, 'minLength': 1}, 'dough': {'type': 'object', 'required': ['units', 'sizing', 'hydration', 'flours'], 'properties': {'dmp': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'oil': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'pff': {'type': 'number', 'default': 0, 'maximum': 100, 'minimum': 0}, 'ndmp': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'salt': {'type': 'number', 'default': 0, 'maximum': 10, 'minimum': 0}, 'honey': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'sugar': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'units': {'type': 'string', 'const': 'g'}, 'buffer': {'oneOf': [{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['off', 'recommended']}}, 'additionalProperties': False}, {'type': 'object', 'required': ['mode', 'grams'], 'properties': {'mode': {'const': 'custom'}, 'grams': {'type': 'number', 'maximum': 10000, 'minimum': 0}}, 'additionalProperties': False}], 'default': {'mode': 'off'}}, 'flours': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'pct', 'bigaPct', 'source'], 'properties': {'id': {'type': 'string', 'pattern': '^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$', 'maxLength': 64, 'minLength': 1}, 'pct': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'source': {'oneOf': [{'type': 'object', 'required': ['type', 'ref'], 'properties': {'ref': {'type': 'string', '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})$', 'maxLength': 100, 'minLength': 1}, 'type': {'const': 'catalog'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'name'], 'properties': {'name': {'type': 'string', 'pattern': '\\S', 'maxLength': 100, 'minLength': 1}, 'type': {'const': 'custom'}}, 'additionalProperties': False}]}, 'bigaPct': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 12}, 'sizing': {'oneOf': [{'type': 'object', 'required': ['mode', 'flourGrams'], 'properties': {'mode': {'const': 'flour'}, 'flourGrams': {'type': 'number', 'maximum': 100000, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['mode', 'ballCount', 'ballGrams'], 'properties': {'mode': {'const': 'balls'}, 'ballCount': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'ballGrams': {'type': 'number', 'maximum': 2000, 'minimum': 50}}, 'additionalProperties': False}]}, 'prefIdy': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 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.'}, 'prefIsd': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 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.'}, 'finalIdy': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required.'}, 'finalIsd': {'type': 'number', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required.'}, 'hydration': {'type': 'number', 'maximum': 200, 'minimum': 0}, 'ascorbicAcid': {'type': 'number', 'default': 0, 'maximum': 1, 'minimum': 0}, 'bigaHydration': {'type': 'number', 'default': 50, 'maximum': 200, 'minimum': 0, 'description': 'Preferment water as a percentage of preferment flour.'}, 'nonfatDryMilk': {'type': 'number', 'default': 0, 'maximum': 30, 'minimum': 0}, 'starterPrefPct': {'type': 'number', 'default': 0, 'maximum': 200, 'minimum': 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.'}, 'reserveWaterPct': {'type': 'number', 'default': 5, 'maximum': 100, 'minimum': 0}, 'starterFinalPct': {'type': 'number', 'default': 0, 'maximum': 200, 'minimum': 0, 'description': 'Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required.'}, 'customAdjustments': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'pct'], 'properties': {'id': {'type': 'string', 'pattern': '^c[0-9a-z]{5}$', 'maxLength': 6, 'minLength': 1}, 'pct': {'type': 'number', 'maximum': 100, 'minimum': 0}, 'name': {'type': 'string', 'pattern': '^\\S(?:[\\s\\S]*\\S)?$', 'maxLength': 40, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 8, '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."}, 'starterFlourSource': {'type': 'string', 'default': 'blend', 'maxLength': 64, 'minLength': 1, 'description': 'blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration.'}, 'starterHydrationPct': {'type': 'number', 'default': 100, 'maximum': 200, 'minimum': 40, 'description': 'Starter water as a percentage of starter flour, not total flour or starter mass.'}}, '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.', 'additionalProperties': False}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}}, '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.", 'additionalProperties': False}
已更改
shopping_list
2026年10月3日 02:50
已更改
calculate_dough
2026年10月3日 02:50
已添加
shopping_list
2026年9月23日 02:40
已添加
plan_bake
2026年9月23日 02:40
已添加
calculate_balance
2026年9月23日 02:40
已添加
calculate_dough
2026年9月23日 02:40
已添加
get_flour
2026年9月23日 02:40
已添加
search_flours
2026年9月23日 02:40
已添加
get_ingredient
2026年9月23日 02:40
已添加
search_ingredients
2026年9月23日 02:40
已添加
read_menu
2026年9月23日 02:40
已添加
get_pizza
2026年9月23日 02:40
已添加
search_pizzas
2026年9月23日 02:40