Flour-first dough plans: yeast, hydration, schedule from flour you own. No API key for plan tools.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get detailed information about a specific flour by its slug. Returns full profile including protein, W strength, hydration curve, maturation profiles, and description.
Flour slug (e.g. 'caputo-pizzeria', 'manitoba-oro')
Get detailed information about a specific flour by its slug. Returns full profile including protein, W strength, hydration curve, maturation profiles, and description.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Flour slug (e.g. 'caputo-pizzeria', 'manitoba-oro') |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Flour slug (e.g. 'caputo-pizzeria', 'manitoba-oro')"
}
}
}List the signed-in baker's scheduled and active bakes plus live temperature-sensor readings when a device is reporting. The first call prompts the chat app to authorize a Pandough account (OAuth scope bakes:read). Needs Pro (or cancelled-Pro). Returns ids, flour, hydration, schedule, a calculator session link, and probe temps (air around the dough, not dough core).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the dough recipe styles plan_bake supports. Call this when a user names a style (Neapolitan, classica, focaccia, bread, baguette) so you pass the correct recipeSlug instead of guessing — and so you never confuse a style word like 'classica' with a flour whose name contains it.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| locale | string | UI locale for the returned calculator link (e.g. 'en', 'pl', 'it'). Defaults to 'en'. |
| stages | array | 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. |
Search the Pandough flour database. Returns flour names, protein %, W strength, hydration ranges, and types. Use this to help users find the right flour for their bake.
| Argument | Type | Description |
|---|---|---|
| tag | string | Filter by tag (e.g. 'pizza', 'bread', 'pastry') |
| query | string | Search term (name, brand, or type) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tag": {
"type": "string",
"maxLength": 50,
"description": "Filter by tag (e.g. 'pizza', 'bread', 'pastry')"
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Search term (name, brand, or type)"
}
}
}Search the Pandough oven database. Returns oven specs (max temperature, type, fuel) plus recommended bake settings — top/deck heat, bake time, and deck material — computed for a Neapolitan pizza by the same heat engine the site uses.
| Argument | Type | Description |
|---|---|---|
| type | string | Oven type filter (e.g. 'pizza-oven', 'home-oven', 'outdoor') |
| query | string | Search term (oven name, brand) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"type": {
"type": "string",
"maxLength": 50,
"description": "Oven type filter (e.g. 'pizza-oven', 'home-oven', 'outdoor')"
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Search term (oven name, brand)"
}
}
}Search the Pandough baking knowledge base for troubleshooting advice, technique guides, and flour science. Returns curated expert content about common baking issues.
| Argument | Type | Description |
|---|---|---|
| issue* | string | The baking issue or question (e.g. 'sticky dough', 'no oven spring', 'cold proof technique') |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"issue"
],
"properties": {
"issue": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The baking issue or question (e.g. 'sticky dough', 'no oven spring', 'cold proof technique')"
}
}
}| bakeTime | string | Target bake time as an ISO 8601 datetime (e.g. '2026-06-10T18:00:00Z'). Must be in the future. |
| ovenSlug | string | Exact 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. |
| ovenType | string | Oven class for an unlisted model. Pass together with ovenMaxCelsius; prefer ovenSlug when search_ovens finds the model. |
| servings | integer | Number of portions/pizzas (1–50, default: 4) |
| flourSlug | string | Flour slug from search_flours (e.g. 'caputo-pizzeria'). For a single flour. Mutually exclusive with flourBlend. |
| flourBlend | array | A 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. |
| preferment | object | Plan 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. |
| recipeSlug* | string | Recipe 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. |
| roomTempHours | number | 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. |
| ovenMaxCelsius | number | The real maximum temperature in °C for an unlisted oven (100–600). This is what constrains hydration and bake time. |
| ovenMinCelsius | number | Optional minimum set temperature in °C for an unlisted oven. |
| fridgeTempHours | number | 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. |
| roomTempCelsius | number | The user's real kitchen temperature in °C (2–40). The single biggest driver of yeast amount and timing — ask the user for it. |
| hydrationPercent | number | Target hydration percentage (40–110) |
| fridgeTempCelsius | number | The user's real fridge temperature in °C (0–12). Ask the user for it when a cold ferment is involved. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"recipeSlug"
],
"properties": {
"locale": {
"enum": [
"en",
"pl",
"de",
"es",
"it",
"nl",
"fr",
"ja",
"ko",
"sv",
"pt",
"hu",
"cs"
],
"type": "string",
"description": "UI locale for the returned calculator link (e.g. 'en', 'pl', 'it'). Defaults to 'en'."
},
"stages": {
"type": "array",
"items": {
"type": "object",
"required": [
"durationHours",
"tempCelsius"
],
"properties": {
"tempCelsius": {
"type": "number",
"maximum": 35,
"minimum": 0,
"description": "Temperature of this stage in °C (the fridge temperature for a cold stage)"
},
"durationHours": {
"type": "number",
"maximum": 168,
"minimum": 0.25,
"description": "Length of this stage in hours"
}
}
},
"maxItems": 6,
"minItems": 1,
"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."
},
"bakeTime": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\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))$",
"description": "Target bake time as an ISO 8601 datetime (e.g. '2026-06-10T18:00:00Z'). Must be in the future."
},
"ovenSlug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Exact 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."
},
"ovenType": {
"enum": [
"home-electric",
"home-gas",
"portable-gas",
"portable-electric",
"wood-fired",
"pellet",
"hybrid",
"kamado"
],
"type": "string",
"description": "Oven class for an unlisted model. Pass together with ovenMaxCelsius; prefer ovenSlug when search_ovens finds the model."
},
"servings": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of portions/pizzas (1–50, default: 4)"
},
"flourSlug": {
"type": "string",
"maxLength": 120,
"description": "Flour slug from search_flours (e.g. 'caputo-pizzeria'). For a single flour. Mutually exclusive with flourBlend."
},
"flourBlend": {
"type": "array",
"items": {
"type": "object",
"required": [
"flourSlug",
"percent"
],
"properties": {
"percent": {
"type": "number",
"maximum": 99,
"minimum": 1,
"description": "This flour's share of the blend (1–99); the set must sum to 100"
},
"flourSlug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Component flour slug from search_flours"
}
}
},
"maxItems": 5,
"minItems": 2,
"description": "A 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."
},
"preferment": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"poolish",
"biga",
"biga-fredda",
"biga-lunga",
"tiga",
"sourdough",
"old-dough"
],
"type": "string",
"description": "Preferment style. poolish = 100% hydration, fast, extensible. biga = stiff (~45-50%). biga-fredda = one long cold hold. biga-lunga = 24h cold then 24h warm. tiga = tiga-style build. sourdough = natural starter (no commercial yeast)."
},
"stages": {
"type": "array",
"items": {
"type": "object",
"required": [
"durationHours",
"tempCelsius"
],
"properties": {
"tempCelsius": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "Temperature of this leg in °C (use ~4 for the fridge)"
},
"durationHours": {
"type": "number",
"maximum": 96,
"minimum": 0.25,
"description": "Length of this leg in hours"
}
}
},
"maxItems": 6,
"minItems": 1,
"description": "The build program, leg by leg — e.g. [{durationHours:24,tempCelsius:4},{durationHours:24,tempCelsius:18}] for a long biga. Omit to use the style's default program."
},
"flourSlug": {
"type": "string",
"maxLength": 120,
"description": "Build the preferment from a specific flour (slug from search_flours). Omit to use the main flour."
},
"percentFlour": {
"type": "number",
"maximum": 100,
"minimum": 1,
"description": "Share of the TOTAL flour that goes into the preferment (1-100). Defaults: 30 for biga/poolish/tiga, 15 for sourdough."
},
"hydrationPercent": {
"type": "number",
"maximum": 200,
"minimum": 40,
"description": "Preferment hydration % (40-200). Defaults to the style's canonical value (poolish 100, biga ~45)."
}
},
"description": "Plan 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."
},
"recipeSlug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Recipe 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."
},
"roomTempHours": {
"type": "number",
"maximum": 168,
"minimum": 0,
"description": "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."
},
"ovenMaxCelsius": {
"type": "number",
"maximum": 600,
"minimum": 100,
"description": "The real maximum temperature in °C for an unlisted oven (100–600). This is what constrains hydration and bake time."
},
"ovenMinCelsius": {
"type": "number",
"maximum": 400,
"minimum": 0,
"description": "Optional minimum set temperature in °C for an unlisted oven."
},
"fridgeTempHours": {
"type": "number",
"maximum": 168,
"minimum": 0,
"description": "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."
},
"roomTempCelsius": {
"type": "number",
"maximum": 40,
"minimum": 2,
"description": "The user's real kitchen temperature in °C (2–40). The single biggest driver of yeast amount and timing — ask the user for it."
},
"hydrationPercent": {
"type": "number",
"maximum": 110,
"minimum": 40,
"description": "Target hydration percentage (40–110)"
},
"fridgeTempCelsius": {
"type": "number",
"maximum": 12,
"minimum": 0,
"description": "The user's real fridge temperature in °C (0–12). Ask the user for it when a cold ferment is involved."
}
}
}