Skip to main content
Glama

Pandough

plan_bake

Read-only

Create a bake plan with ingredient calculations. Returns exact ingredient amounts in grams, an auto-sized yeast amount, a fermentation schedule, dough warnings, and a calculator URL the user can open in Pandough with all parameters prefilled. Before calling this, gather the inputs that actually determine a good plan (skip any the user already volunteered): (1) Strongly ask which oven model they use — call search_ovens and pass ovenSlug. If it is unlisted, ask for ovenType plus ovenMaxCelsius. Oven capability materially changes the hydration band and bake feasibility; if the user declines, proceed but say the result is not oven-adapted. (2) Which flour(s) do they have? — call search_flours to resolve a flourSlug (or pass flourBlend for a 2–5 flour cut, e.g. a Pulcinella base with 30% Manitoba); this is what makes hydration and warnings flour-aware. (3) Their room temperature and fridge temperature — pass roomTempCelsius/fridgeTempCelsius; temperature is the dominant driver of yeast amount and timing. (4) How they mix/knead (by hand, stand mixer, no-knead) — plan_bake does not return technique guidance, so pair it with a troubleshoot call for method advice. (5) Do they want a preferment? — pass preferment for a biga, poolish, tiga, cold/long biga, or a natural sourdough starter. The yeast figure accounts for the preferment, and the calculator link opens with the build already set up, so recommending a biga in prose without passing this param hands the user a direct dough. Don't interrogate a user who already gave a full brief.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "recipeSlug": "<recipeSlug>"
    },
    "name": "plan_bake"
  }
}

Input Schema

NameRequiredDescriptionDefault
localeNoUI locale for the returned calculator link (e.g. 'en', 'pl', 'it'). Defaults to 'en'.
stagesNoThe full main-dough fermentation schedule as ordered stages (1–6), e.g. [{durationHours:1,tempCelsius:22},{durationHours:21,tempCelsius:4},{durationHours:2,tempCelsius:22}] for 1h at room temperature, 21h in the fridge, then a 2h warm-up. Use it when the user describes more than a room leg and a fridge leg, an order other than room then fridge, or a stage at its own temperature. The stages are the whole schedule: nothing is added (include the warm-up after the fridge yourself) and the calculator link opens on exactly these stages. Mutually exclusive with roomTempHours / fridgeTempHours. Room-temperature stages above 14h are clamped with a warning.
bakeTimeNoTarget bake time as an ISO 8601 datetime with the user's UTC offset for that date, e.g. '2026-06-10T18:00:00+02:00' for 18:00 in Warsaw in June (+01:00 in winter: the offset follows daylight saving time). 'Z' means UTC, not the user's local time. Must be in the future.
ovenSlugNoExact oven model slug from search_ovens. Strongly preferred: the engine uses the model's real ceiling and oven class to adapt hydration and bake feasibility. Mutually exclusive with manual ovenType/ovenMaxCelsius.
ovenTypeNoOven class for an unlisted model. Pass together with ovenMaxCelsius; prefer ovenSlug when search_ovens finds the model.
servingsNoNumber of portions/pizzas (1–50, default: 4)
flourSlugNoFlour slug from search_flours (e.g. 'caputo-pizzeria'). For a single flour. Mutually exclusive with flourBlend.
flourBlendNoA weighted flour blend (2–5 flours summing to 100%), e.g. [{flourSlug:'caputo-pizzeria',percent:70},{flourSlug:'manitoba-oro',percent:30}]. Mutually exclusive with flourSlug.
prefermentNoPlan the bake around a preferment (biga, poolish, tiga, sourdough…). The yeast figure returned accounts for it, and the calculator link opens with the build already set up.
recipeSlugYesRecipe type slug. Supported: neapolitan-pizza, classica-pizza, focaccia, artisan-bread, baguette (call list_recipes for the full list). When the user names a style like 'classica', pass that style here — do NOT confuse it with a flour whose name happens to contain the word.
roomTempHoursNoRoom-temperature fermentation hours (0–168). Pass BOTH this and fridgeTempHours to lock the split; naming only a total lets the engine choose. These hours are the bulk before the fridge: when the fridge leg is above 0 the plan adds the recipe's final proof at room temperature after the fridge (a warm-up) on top of them, and says so. Room legs above 14h are clamped with a warning.
ovenMaxCelsiusNoThe real maximum temperature in °C for an unlisted oven (100–600). This is what constrains hydration and bake time.
ovenMinCelsiusNoOptional minimum set temperature in °C for an unlisted oven.
fridgeTempHoursNoCold fermentation hours (0–168). Pass BOTH this and roomTempHours to lock the split. A locked fridge leg above 0 is followed by a warm-up at room temperature (the recipe's final proof), shown as its own schedule line.
roomTempCelsiusNoThe user's real kitchen temperature in °C (2–40). The single biggest driver of yeast amount and timing — ask the user for it.
hydrationPercentNoTarget hydration percentage (40–110)
fridgeTempCelsiusNoThe user's real fridge temperature in °C (0–12). Ask the user for it when a cold ferment is involved.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / bakeTime / description
      Previous value: -"Target bake time as an ISO 8601 datetime (e.g. '2026-06-10T18:00:00Z'). Must be in the future."New value: +"Target bake time as an ISO 8601 datetime with the user's UTC offset for that date, e.g. '2026-06-10T18:00:00+02:00' for 18:00 in Warsaw in June (+01:00 in winter: the offset follows daylight saving time). 'Z' means UTC, not the user's local time. Must be in the future."
    • changedInput schema / properties / bakeTime / pattern
      Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
  2. Changed4 schema fields changed
    • changedInput schema / properties / fridgeTempHours / description
      Previous value: -"Cold fermentation hours (0–168). Pass BOTH this and roomTempHours to lock the split."New value: +"Cold fermentation hours (0–168). Pass BOTH this and roomTempHours to lock the split. A locked fridge leg above 0 is followed by a warm-up at room temperature (the recipe's final proof), shown as its own schedule line."
    • changedInput schema / properties / preferment / properties / stages / maxItems
      Previous value: -4New value: +6
    • changedInput schema / properties / roomTempHours / description
      Previous value: -"Room-temperature fermentation hours (0–168). Pass BOTH this and fridgeTempHours to lock the split; naming only a total lets the engine choose. Room legs above 14h are clamped with a warning."New value: +"Room-temperature fermentation hours (0–168). Pass BOTH this and fridgeTempHours to lock the split; naming only a total lets the engine choose. These hours are the bulk before the fridge: when the fridge leg is above 0 the plan adds the recipe's final proof at room temperature after the fridge (a warm-up) on top of them, and says so. Room legs above 14h are clamped with a warning."
    • addedInput schema / properties / stages
      Added value: +{
      +  "description": "The full main-dough fermentation schedule as ordered stages (1–6), e.g. [{durationHours:1,tempCelsius:22},{durationHours:21,tempCelsius:4},{durationHours:2,tempCelsius:22}] for 1h at room temperature, 21h in the fridge, then a 2h warm-up. Use it when the user describes more than a room leg and a fridge leg, an order other than room then fridge, or a stage at its own temperature. The stages are the whole schedule: nothing is added (include the warm-up after the fridge yourself) and the calculator link opens on exactly these stages. Mutually exclusive with roomTempHours / fridgeTempHours. Room-temperature stages above 14h are clamped with a warning.",
      +  "items": {
      +    "properties": {
      +      "durationHours": {
      +        "description": "Length of this stage in hours",
      +        "maximum": 168,
      +        "minimum": 0.25,
      +        "type": "number"
      +      },
      +      "tempCelsius": {
      +        "description": "Temperature of this stage in °C (the fridge temperature for a cold stage)",
      +        "maximum": 35,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "durationHours",
      +      "tempCelsius"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 6,
      +  "minItems": 1,
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / locale / enum
      Previous value: -[
      -  "en",
      -  "pl",
      -  "de",
      -  "es",
      -  "it",
      -  "nl",
      -  "fr",
      -  "ja",
      -  "ko",
      -  "sv",
      -  "pt",
      -  "hu"
      -]New value: +[
      +  "en",
      +  "pl",
      +  "de",
      +  "es",
      +  "it",
      +  "nl",
      +  "fr",
      +  "ja",
      +  "ko",
      +  "sv",
      +  "pt",
      +  "hu",
      +  "cs"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / locale / enum
      Previous value: -[
      -  "en",
      -  "pl",
      -  "de",
      -  "es",
      -  "it",
      -  "nl",
      -  "fr",
      -  "ja",
      -  "ko",
      -  "sv",
      -  "pt"
      -]New value: +[
      +  "en",
      +  "pl",
      +  "de",
      +  "es",
      +  "it",
      +  "nl",
      +  "fr",
      +  "ja",
      +  "ko",
      +  "sv",
      +  "pt",
      +  "hu"
      +]
  5. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe calculation operation. The description adds useful behavioral context: it discloses the returned plan contents, explains that oven and flour data make the plan adaptive, notes that declining oven info yields a non-oven-adapted result, and states that technique guidance is out of scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and return values before moving into a useful numbered input-gathering sequence. It is lengthy, but the complexity of a 17-parameter planning tool largely justifies the detail, with only minor repetition around not over-questioning the user.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description appropriately explains the return values and calculator link. Given the rich input schema, annotations, and sibling tools, it provides enough context for an agent to know what to gather, which sibling tools to use, and how to invoke the planner correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already does most parameter documentation. The description adds meaningful selection guidance beyond the schema, especially for ovenSlug versus ovenType/ovenMaxCelsius, flourSlug versus flourBlend, temperature drivers, and the warning that recommending a preferment in prose without passing preferment gives the user a direct dough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it creates a bake plan with ingredient calculations and returns exact amounts, yeast, schedule, warnings, and a prefilled calculator URL. This clearly distinguishes it from siblings like search_ovens, search_flours, and troubleshoot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit pre-call guidance: gather oven, flour, temperature, mixing, and preferment inputs, and call search_ovens/search_flours where needed. It also names troubleshoot as the sibling for technique advice and warns not to interrogate a user who already supplied a full brief.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources