Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://loafy.ai
Changed the definition of "estimate_bulk_fermentation", "list_my_bakes", "log_bake" and 2 more
BulkBake Planner: bulk fermentation estimate
Loafy's Bake Planner. Estimate how long the bulk fermentation of a ⟨26 unchanged words⟩ and source: Bill Wraith's rise-time model (2007/08), the Loafy bakers (his model scaled by how long the bulk fermentations Loafy's bakers logged took) and, where the book names one, ⟨38 unchanged words⟩
⟨95 unchanged words⟩ this dough.","items":{"properties":{"bakers":{"description":"The bakers behind the Loafy bakers' figure.","type":"integer"},"bakes":{"description":"The bakes behind the Loafy bakers' or the baker's own figure.","type":"integer"}, ⟨11 unchanged words⟩ "number"},"model":{"description":"wraith, bakers, book or journal.","type":"string" ⟨164 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"BulkBake Planner: bulk fermentation estimate"}
⟨13 unchanged words⟩ in the baker's journal.","properties":{"autolyse_minutes":{"description":"Minutes of rest before mixing.","type":"integer"},"bake_level":{"description":"A stove's dial while baking.","type":"integer"},"bake_minutes":{"description":"Minutes in theoven.oven; with two phases, the first.","type":"number"},"bake_temp_celsius":{"description":"Oven temperature,°C.°C; with two phases, the first.","type":"number"},"bake_type":{ ⟨9 unchanged words⟩ day, YYYY-MM-DD.","type":"string"},"baking_method":{"description":"What it was baked in.","type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation. ⟨6 unchanged words⟩ bulk, °C.","type":"number"},"dough_rise_percent":{"description":"How much the dough grew in bulk, %.","type":"integer"},"dry_yeast_percent":{"description":"Dry yeast as a share.","type":"number"},"fermentolyse":{"description":"The rest was a fermentolyse, with the starter in.","type":"boolean"},"flour_amounts":{"description":"The flours, with their grams.","items":{"properties":{"grams":{"description":"Its grams.","type":"integer"},"name":{"description":"The flour's kind.","type":"string"}},"type":"object"},"type":"array"},"flours":{"description":"The flours used, without grams.","items":{"description":"A flour's kind.","type":"string"},"type":"array"},"fresh_yeast_percent":{"description":"Fresh yeast as a share.","type":"number"},"fridge_proof_hours":{"description":"Hours in the fridge. ⟨35 unchanged words⟩ baker's notes.","type":"string"},"other_bake_type_description":{"description":"What was baked, when bake_type is other.","type":"string"},"
{"properties":{"autolyse_minutes":{"description":"Minutes the flour and water rested before mixing, with the starter in for a fermentolyse.","maximum":1440,"minimum":0,"type":"integer"},"bake_level":{"description":"On a stove: the dial's level while baking.","maximum":12,"minimum":1,"type":"integer"},"bake_minutes":{"description":"Minutes in theoven.oven, whole minutes (90 seconds is 2); with two phases, the first.","maximum":300,"minimum":1,"type":"integer"},"bake_temp_celsius":{"description":"Oven temperature in°C.°C; with two phases, the first (in a Dutch oven, with the lid on). A value above 300 °C is only plausible in a pizza or wood-fired oven.","maximum":350550,"minimum":50,"type":"integer"}, ⟨35 unchanged words⟩ left out.","type":"string"},"baking_method":{"description":"What it was baked in: home_oven also for a Dutch oven, a stone or a tray in it.","enum":["home_oven","pizza_oven","wood_fired","stove"],"type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation. ⟨18 unchanged words⟩ "minimum":0,"type":"number"},"dough_rise_percent":{"description":"How much the dough grew during bulk fermentation, in percent.","maximum":300,"minimum":0,"type":"integer"},"dry_yeast_percent":{"description":"Dry or instant yeast as a percentage of flour.","maximum":10,"minimum":0,"type":"number"},"flours":{"description":"The flours, comma-separated, each as its kind and grams, such as \"bread_flour 450, rye 50\", or its kind alone when no grams were given; kinds: bread_flour, all_purpose, whole_wheat, rye, spelt, einkorn, durum, tipo_00, other.","type":"string"},"fresh_yeast_percent":{"description":"Fresh yeast as a percentage of flour.","maximum":10,"minimum":0,"type":"number"},"
Sourdough bakeBakeplannerPlanner
Loafy's Bake Planner. Plan a sourdough bake backwards from when the ⟨36 unchanged words⟩ times and a link to the same plan in the Bake Planner on loafy.ai. The time is the baker's local ⟨31 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"Sourdough bakeBakeplannerPlanner"}
{"properties":{"autolyse_minutes":{"description":"Minutes the flour and water rested before mixing, with the starter in for a fermentolyse.","maximum":1440,"minimum":0,"type":"integer"},"bake_level":{"description":"On a stove: the dial's level while baking.","maximum":12,"minimum":1,"type":"integer"},"bake_minutes":{"description":"Minutes in theoven.oven, whole minutes (90 seconds is 2); with two phases, the first.","maximum":300,"minimum":1,"type":"integer"},"bake_temp_celsius":{"description":"Oven temperature in°C.°C; with two phases, the first (in a Dutch oven, with the lid on). A value above 300 °C is only plausible in a pizza or wood-fired oven.","maximum":350550,"minimum":50,"type":"integer"}, ⟨29 unchanged words⟩ as YYYY-MM-DD.","type":"string"},"baking_method":{"description":"What it was baked in: home_oven also for a Dutch oven, a stone or a tray in it.","enum":["home_oven","pizza_oven","wood_fired","stove"],"type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation. ⟨18 unchanged words⟩ "minimum":0,"type":"number"},"dough_rise_percent":{"description":"How much the dough grew during bulk fermentation, in percent.","maximum":300,"minimum":0,"type":"integer"},"dry_yeast_percent":{"description":"Dry or instant yeast as a percentage of flour.","maximum":10,"minimum":0,"type":"number"},"flours":{"description":"The flours, comma-separated, each as its kind and grams, such as \"bread_flour 450, rye 50\", or its kind alone when no grams were given; kinds: bread_flour, all_purpose, whole_wheat, rye, spelt, einkorn, durum, tipo_00, other.","type":"string"},"fresh_yeast_percent":{"description":"Fresh yeast as a percentage of flour.","maximum":10,"minimum":0,"type":"number"},"
Added "estimate_bulk_fermentation"; changed the definition of "plan_sourdough_bake" (19 tools before, 20 now)
⟨68 unchanged words⟩ amounts of flour, water and starter arecalculate_bread_dough.calculate_bread_dough; how long bulk fermentation takes at a given dough temperature and starter amount is estimate_bulk_fermentation.
Bulk fermentation estimate — Estimate how long the bulk fermentation of a sourdough bread dough (from mixing until shaping) takes at a given dough temperature and starter amount. Returns a range from several models with each model's figure and source: Bill Wraith's rise-time model (2007/08) and, where the book names one, the figure from The Sourdough Framework. Every time is theoretical: the dough is done when it has grown, as the result's note says. For a whole bake planned backwards from when the bread should be ready, use plan_sourdough_bake.
Changed the definition of "calculate_bread_dough"
Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨77 unchanged words⟩ % hydration.","maximum":2000,"minimum":10050,"type":"integer"},"loaves":{" ⟨40 unchanged words⟩
Certificate recorded, valid to 2026-12-29
Authorization not required, issuer https://loafy.ai
Changed the definition of "add_container", "add_starter", "calculate_bread_dough" and 15 more
⟨26 unchanged words⟩ Returns it with its id and a link. A name the baker already uses is not added again; that container comes back, and update_container changes it. Needs the baker's Loafy account.
before
—after
{"description":"The container as saved.","properties":{"container":{"description":"One of the baker's containers.","properties":{"id":{"description":"The container's id, which update_container takes.","type":"string"},"name":{"description":"Its name.","type":"string"},"notes":{"description":"Notes on it.","type":"string"},"url":{"description":"The container on loafy.ai.","type":"string"},"weight_grams":{"description":"Its empty weight, in grams.","type":"number"}},"type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"saved":{"description":"What was saved, in one sentence.","type":"string"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}Unknown → Live
First tool surface recorded: 19 tools (server version 1.1.0)
https://loafy.ai/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 10 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨13 unchanged words⟩ in the baker's journal.","properties":{"autolyse_minutes":{"description":"Minutes of rest before mixing.","type":"integer"},"bake_level":{"description":"A stove's dial while baking.","type":"integer"},"bake_minutes":{"description":"Minutes in theoven.oven; with two phases, the first.","type":"number"},"bake_temp_celsius":{"description":"Oven temperature,°C.°C; with two phases, the first.","type":"number"},"bake_type":{ ⟨9 unchanged words⟩ day, YYYY-MM-DD.","type":"string"},"baking_method":{"description":"What it was baked in.","type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation. ⟨6 unchanged words⟩ bulk, °C.","type":"number"},"dough_rise_percent":{"description":"How much the dough grew in bulk, %.","type":"integer"},"dry_yeast_percent":{"description":"Dry yeast as a share.","type":"number"},"fermentolyse":{"description":"The rest was a fermentolyse, with the starter in.","type":"boolean"},"flour_amounts":{"description":"The flours, with their grams.","items":{"properties":{"grams":{"description":"Its grams.","type":"integer"},"name":{"description":"The flour's kind.","type":"string"}},"type":"object"},"type":"array"},"flours":{"description":"The flours used, without grams.","items":{"description":"A flour's kind.","type":"string"},"type":"array"},"fresh_yeast_percent":{"description":"Fresh yeast as a share.","type":"number"},"fridge_proof_hours":{"description":"Hours in the fridge. ⟨35 unchanged words⟩ baker's notes.","type":"string"},"other_bake_type_description":{"description":"What was baked, when bake_type is other.","type":"string"},"photos":{"description":"How many photos it has.","type":"integer"},"piece_weight_grams":{"description":"What one piece weighed, in grams.","type":"integer"},"pieces":{"description":"How many pieces the dough made.","type":"integer"},"preheat_level":{"description":"A stove's dial while heating.","type":"integer"},"preheat_temp_celsius":{"description":"Preheat temperature, °C.","type":"number"},"problems":{"description":"What went wrong.", ⟨10 unchanged words⟩ :"string"},"type":"array"},"proof_rise_percent":{"description":"How much more it grew in the proof, %.","type":"integer"},"rating":{"description":"Stars, 1 to ⟨17 unchanged words⟩ a share.","type":"number"},"second_bake_minutes":{"description":"Minutes of the second phase.","type":"integer"},"second_bake_temp_celsius":{"description":"Oven temperature of the second phase, °C.","type":"number"},"starter":{"description":"The starter it was ⟨6 unchanged words⟩ "Starter as a share.","type":"number"},"stretch_fold_count":{"description":"Sets of stretch and folds.","type":"integer"},"url":{"description":"The bake ⟨221 unchanged words⟩
⟨13 unchanged words⟩ in the baker's journal.","properties":{"autolyse_minutes":{"description":"Minutes of rest before mixing.","type":"integer"},"bake_level":{"description":"A stove's dial while baking.","type":"integer"},"bake_minutes":{"description":"Minutes in theoven.oven; with two phases, the first.","type":"number"},"bake_temp_celsius":{"description":"Oven temperature,°C.°C; with two phases, the first.","type":"number"},"bake_type":{ ⟨9 unchanged words⟩ day, YYYY-MM-DD.","type":"string"},"baking_method":{"description":"What it was baked in.","type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation. ⟨6 unchanged words⟩ bulk, °C.","type":"number"},"dough_rise_percent":{"description":"How much the dough grew in bulk, %.","type":"integer"},"dry_yeast_percent":{"description":"Dry yeast as a share.","type":"number"},"fermentolyse":{"description":"The rest was a fermentolyse, with the starter in.","type":"boolean"},"flour_amounts":{"description":"The flours, with their grams.","items":{"properties":{"grams":{"description":"Its grams.","type":"integer"},"name":{"description":"The flour's kind.","type":"string"}},"type":"object"},"type":"array"},"flours":{"description":"The flours used, without grams.","items":{"description":"A flour's kind.","type":"string"},"type":"array"},"fresh_yeast_percent":{"description":"Fresh yeast as a share.","type":"number"},"fridge_proof_hours":{"description":"Hours in the fridge. ⟨35 unchanged words⟩ baker's notes.","type":"string"},"other_bake_type_description":{"description":"What was baked, when bake_type is other.","type":"string"},"photos":{"description":"How many photos it has.","type":"integer"},"piece_weight_grams":{"description":"What one piece weighed, in grams.","type":"integer"},"pieces":{"description":"How many pieces the dough made.","type":"integer"},"preheat_level":{"description":"A stove's dial while heating.","type":"integer"},"preheat_temp_celsius":{"description":"Preheat temperature, °C.","type":"number"},"problems":{"description":"What went wrong.", ⟨10 unchanged words⟩ :"string"},"type":"array"},"proof_rise_percent":{"description":"How much more it grew in the proof, %.","type":"integer"},"rating":{"description":"Stars, 1 to ⟨17 unchanged words⟩ a share.","type":"number"},"second_bake_minutes":{"description":"Minutes of the second phase.","type":"integer"},"second_bake_temp_celsius":{"description":"Oven temperature of the second phase, °C.","type":"number"},"starter":{"description":"The starter it was ⟨6 unchanged words⟩ "Starter as a share.","type":"number"},"stretch_fold_count":{"description":"Sets of stretch and folds.","type":"integer"},"url":{"description":"The bake ⟨221 unchanged words⟩
⟨25 unchanged words⟩ and a link, where photos are added. A name the baker already uses is not added again; that starter comes back, and update_starter changes it. Needs the baker's Loafy account.
before
—after
{"description":"The starter as saved.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"saved":{"description":"What was saved, in one sentence.","type":"string"},"starter":{"description":"One of the baker's starters.","properties":{"age_days":{"description":"Its age in days.","type":"integer"},"bakes":{"description":"How many bakes it went into.","type":"integer"},"birthday":{"description":"The day it was started, YYYY-MM-DD.","type":"string"},"id":{"description":"The starter's id, which update_starter takes.","type":"string"},"last_baked_on":{"description":"Its last bake, YYYY-MM-DD.","type":"string"},"name":{"description":"Its name.","type":"string"},"notes":{"description":"Notes on it.","type":"string"},"story":{"description":"Its story.","type":"string"},"url":{"description":"The starter on loafy.ai.","type":"string"}},"type":"object"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨31 unchanged words⟩ baker can adjust it and run the timers. Pizza dough is calculate_pizza_dough, and when to start a bake is plan_sourdough_bake. A value outside its range is corrected, and notes name it.
before
—after
{"description":"A sourdough bread recipe in grams.","properties":{"dough_per_loaf_g":{"description":"The dough of one loaf, in grams.","type":"number"},"ingredients":{"properties":{"bread_flour_g":{"description":"Bread flour, in grams.","type":"number"},"salt_g":{"description":"Salt, in grams.","type":"number"},"starter_g":{"description":"Starter, in grams.","type":"number"},"total_flour_g":{"description":"All flour, in grams.","type":"number"},"water_g":{"description":"Water, in grams.","type":"number"},"whole_grain_flour_g":{"description":"Whole grain flour, in grams.","type":"number"}},"type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"total_dough_g":{"description":"All the dough, in grams.","type":"number"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨30 unchanged words⟩ a link to the same recipe on loafy.ai. A loaf of bread is calculate_bread_dough. A value outside its range is corrected, and notes name it.
before
—after
{"description":"Pizza dough in grams.","properties":{"ingredients":{"additionalProperties":{"type":"number"},"description":"Flour, water, salt and the leavening (fresh yeast or starter), in grams.","type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"toppings":{"additionalProperties":{"type":"number"},"description":"Toppings for all the pizzas: grams, and basil as leaves and pots.","type":"object"},"total_dough_g":{"description":"All the dough, in grams.","type":"number"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨60 unchanged words⟩ and storage, and it is in English. The book itself is search_sourdough_book for passages and read_sourdough_book for a whole chapter. Without a Loafy account, reading and searching the ⟨12 unchanged words⟩ lookup within 15 minutes counting as one question;a freewithLoafyan accountremovesitthehas no limit. The calculators, the guides and the ⟨7 unchanged words⟩
before
—after
{"description":"Answers to real questions from bakers.","properties":{"answers":{"description":"The answers that match.","items":{"properties":{"answer":{"description":"Hendrik's answer.","type":"string"},"question":{"description":"The baker's question.","type":"string"},"source":{"properties":{"title":{"description":"The book chapter behind it.","type":"string"},"url":{"description":"Its link.","type":"string"}},"type":"object"},"url":{"description":"The answer's page on loafy.ai.","type":"string"}},"type":"object"},"type":"array"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"license":{"description":"The licence of the book's text: CC BY-SA 4.0, with attribution.","type":"string"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"passages":{"description":"When no answer matches, the closest passages from the book.","items":{"properties":{"chapter":{"description":"The chapter.","type":"string"},"part":{"description":"Its number and title, which read_sourdough_book takes.","type":"string"},"section":{"description":"The section within it.","type":"string"},"text":{"description":"The passage.","type":"string"},"url":{"description":"The chapter on the book's website.","type":"string"}},"type":"object"},"type":"array"},"suggestion":{"description":"Where to look next when nothing fits.","type":"string"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}Look up one step of a guided journey by its id, its title or its position: its title, where it ⟨33 unchanged words⟩
⟨2 unchanged words⟩ "description":"Journey identifier, e.g. \"sourdough-bread\"., or the journey's title.","type":"string"},"step":{"description":"Step identifier (e.g. \"mix\"), its title, or position (\"5\" is the fifth ⟨15 unchanged words⟩
before
—after
{"description":"One step of a guided journey.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"journey":{"properties":{"description":{"description":"What it covers.","type":"string"},"difficulty":{"description":"How hard it is.","type":"string"},"duration":{"description":"How long it takes.","type":"string"},"slug":{"description":"The journey's identifier.","type":"string"},"steps":{"description":"How many steps it has.","type":"integer"},"title":{"description":"Its title.","type":"string"},"url":{"description":"The journey on loafy.ai.","type":"string"}},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"step":{"properties":{"id":{"description":"The step's identifier.","type":"string"},"next_step":{"description":"The next step's identifier.","type":["string","null"]},"position":{"description":"Where it sits, such as \"3 of 14\".","type":"string"},"timer_minutes":{"description":"Its timer, when the step has one.","type":"integer"},"title":{"description":"Its title.","type":"string"}},"type":"object"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨23 unchanged words⟩ , each with its id and a link. A new bake is log_bake, a change to one is update_bake with its id. Needs the baker's Loafy account.
before
—after
{"description":"The baker's bakes.","properties":{"bakes":{"description":"Newest first.","items":{"description":"A bake in the baker's journal.","properties":{"bake_minutes":{"description":"Minutes in the oven.","type":"number"},"bake_temp_celsius":{"description":"Oven temperature, °C.","type":"number"},"bake_type":{"description":"What was baked.","type":"string"},"baked_on":{"description":"The day, YYYY-MM-DD.","type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation.","type":"number"},"bulk_temp_celsius":{"description":"Temperature during bulk, °C.","type":"number"},"fridge_proof_hours":{"description":"Hours in the fridge.","type":"number"},"hydration_percent":{"description":"Water as a share of the flour.","type":"number"},"id":{"description":"The bake's id, which update_bake takes.","type":"string"},"next_time_notes":{"description":"What to try next time.","type":"string"},"notes":{"description":"The baker's notes.","type":"string"},"photos":{"description":"How many photos it has.","type":"integer"},"problems":{"description":"What went wrong.","items":{"description":"A problem, such as flat or dense.","type":"string"},"type":"array"},"rating":{"description":"Stars, 1 to 5.","type":"integer"},"room_temp_proof_hours":{"description":"Hours of proof at room temperature.","type":"number"},"salt_percent":{"description":"Salt as a share.","type":"number"},"starter":{"description":"The starter it was made with.","type":"string"},"starter_percent":{"description":"Starter as a share.","type":"number"},"url":{"description":"The bake on loafy.ai.","type":"string"}},"type":"object"},"type":"array"},"in_journal":{"description":"All bakes in the journal.","type":"integer"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨24 unchanged words⟩ , each with its id and a link. A new container is add_container, a change to one is update_container. Needs the baker's Loafy account.
before
—after
{"description":"The baker's containers.","properties":{"containers":{"description":"By name.","items":{"description":"One of the baker's containers.","properties":{"id":{"description":"The container's id, which update_container takes.","type":"string"},"name":{"description":"Its name.","type":"string"},"notes":{"description":"Notes on it.","type":"string"},"url":{"description":"The container on loafy.ai.","type":"string"},"weight_grams":{"description":"Its empty weight, in grams.","type":"number"}},"type":"object"},"type":"array"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨23 unchanged words⟩ , each with its id and a link. A new starter is add_starter, a change to one is update_starter. Needs the baker's Loafy account.
before
—after
{"description":"The baker's starters.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"starters":{"description":"By name.","items":{"description":"One of the baker's starters.","properties":{"age_days":{"description":"Its age in days.","type":"integer"},"bakes":{"description":"How many bakes it went into.","type":"integer"},"birthday":{"description":"The day it was started, YYYY-MM-DD.","type":"string"},"id":{"description":"The starter's id, which update_starter takes.","type":"string"},"last_baked_on":{"description":"Its last bake, YYYY-MM-DD.","type":"string"},"name":{"description":"Its name.","type":"string"},"notes":{"description":"Notes on it.","type":"string"},"story":{"description":"Its story.","type":"string"},"url":{"description":"The starter on loafy.ai.","type":"string"}},"type":"object"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}before
—after
{"description":"Loafy's guided journeys.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"journeys":{"description":"Every guided journey.","items":{"properties":{"description":{"description":"What it covers.","type":"string"},"difficulty":{"description":"How hard it is.","type":"string"},"duration":{"description":"How long it takes.","type":"string"},"slug":{"description":"The journey's identifier.","type":"string"},"steps":{"description":"How many steps it has.","type":"integer"},"title":{"description":"Its title.","type":"string"},"url":{"description":"The journey on loafy.ai.","type":"string"}},"type":"object"},"type":"array"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨30 unchanged words⟩ with a link, where photos are added. The same bake sent again within two minutes returns the first entry instead of a second one, and a bake already in the journal changes with update_bake. Needs the baker's Loafy account.
before
—after
{"description":"The bake as saved in the journal.","properties":{"bake":{"description":"A bake in the baker's journal.","properties":{"bake_minutes":{"description":"Minutes in the oven.","type":"number"},"bake_temp_celsius":{"description":"Oven temperature, °C.","type":"number"},"bake_type":{"description":"What was baked.","type":"string"},"baked_on":{"description":"The day, YYYY-MM-DD.","type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation.","type":"number"},"bulk_temp_celsius":{"description":"Temperature during bulk, °C.","type":"number"},"fridge_proof_hours":{"description":"Hours in the fridge.","type":"number"},"hydration_percent":{"description":"Water as a share of the flour.","type":"number"},"id":{"description":"The bake's id, which update_bake takes.","type":"string"},"next_time_notes":{"description":"What to try next time.","type":"string"},"notes":{"description":"The baker's notes.","type":"string"},"photos":{"description":"How many photos it has.","type":"integer"},"problems":{"description":"What went wrong.","items":{"description":"A problem, such as flat or dense.","type":"string"},"type":"array"},"rating":{"description":"Stars, 1 to 5.","type":"integer"},"room_temp_proof_hours":{"description":"Hours of proof at room temperature.","type":"number"},"salt_percent":{"description":"Salt as a share.","type":"number"},"starter":{"description":"The starter it was made with.","type":"string"},"starter_percent":{"description":"Starter as a share.","type":"number"},"url":{"description":"The bake on loafy.ai.","type":"string"}},"type":"object"},"card":{"description":"The figures the bake card in Claude shows (ui://loafy/bake-card).","properties":{"add_photos":{"description":"The photo button's label.","type":"string"},"best":{"description":"The best bake so far.","type":"string"},"facts":{"description":"The bake's main figures.","items":{"description":"A figure, such as 75 % hydration.","type":"string"},"type":"array"},"open":{"description":"The open button's label.","type":"string"},"photos_url":{"description":"Where its photos are added.","type":"string"},"subtitle":{"description":"Under the title.","type":"string"},"title":{"description":"Its title.","type":"string"},"trail":{"description":"The last bakes.","items":{"properties":{"label":{"description":"Stars or today.","type":"string"},"now":{"description":"This bake.","type":"boolean"},"rating":{"description":"Stars.","type":"integer"}},"type":"object"},"type":"array"},"url":{"description":"The bake on loafy.ai.","type":"string"}},"type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"photos":{"description":"Where photos are added.","type":"string"},"saved":{"description":"What was saved, in one sentence.","type":"string"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨46 unchanged words⟩ a link to the same plan on loafy.ai. The time is the baker's local date and time, such as 2026-10-24T10:00. The amounts of flour, water and starter are calculate_bread_dough.
before
—after
{"description":"A sourdough bake planned backwards from when the bread should be ready.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"ready_at":{"description":"When the bread comes out of the oven.","type":"string"},"starter":{"properties":{"bulk":{"description":"The bulk fermentation that goes with it.","type":"string"},"for_kitchen":{"description":"The kitchen temperature the figures are for.","type":"string"},"note":{"description":"How to read the figures.","type":"string"},"percent_of_flour":{"description":"Starter as a share of the flour.","type":"string"},"source":{"description":"Where in the book they come from.","type":"string"}},"type":"object"},"steps":{"description":"The bake, step by step, in order.","items":{"properties":{"at":{"description":"When.","type":"string"},"from":{"description":"From when, for a window.","type":"string"},"hours":{"description":"How long it takes.","type":"number"},"note":{"description":"What to look for.","type":"string"},"step":{"description":"What to do.","type":"string"},"until":{"description":"Until when, for a window.","type":"string"}},"type":"object"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨64 unchanged words⟩ lookup within 15 minutes counting as one question;a freewithLoafyan accountremovesitthehas no limit. The calculators, the guides and the ⟨7 unchanged words⟩
⟨51 unchanged words⟩ English, and the search matches English words. Hendrik's published answers to common questions are find_sourdough_answer, and a whole chapter is read_sourdough_book. Without a Loafy account, reading and searching the ⟨12 unchanged words⟩ lookup within 15 minutes counting as one question;a freewithLoafyan accountremovesitthehas no limit. The calculators, the guides and the ⟨7 unchanged words⟩
before
—after
{"description":"Passages from The Sourdough Framework.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"license":{"description":"The licence of the book's text: CC BY-SA 4.0, with attribution.","type":"string"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"passages":{"description":"The passages that answer the question.","items":{"properties":{"chapter":{"description":"The chapter.","type":"string"},"part":{"description":"Its number and title, which read_sourdough_book takes.","type":"string"},"section":{"description":"The section within it.","type":"string"},"text":{"description":"The passage.","type":"string"},"url":{"description":"The chapter on the book's website.","type":"string"}},"type":"object"},"type":"array"},"suggestion":{"description":"Where to look next when nothing fits.","type":"string"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}⟨3 unchanged words⟩ "Journey identifier from list_sourdough_journeys, e.g. \"sourdough-bread\"., or the journey's title.","type":"string"}},"required": ⟨3 unchanged words⟩
before
—after
{"description":"A guided journey and its first step.","properties":{"first_step":{"properties":{"id":{"description":"The step's identifier.","type":"string"},"timer_minutes":{"description":"Its timer, when the step has one.","type":"integer"},"title":{"description":"Its title.","type":"string"}},"type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"journey":{"properties":{"description":{"description":"What it covers.","type":"string"},"difficulty":{"description":"How hard it is.","type":"string"},"duration":{"description":"How long it takes.","type":"string"},"slug":{"description":"The journey's identifier.","type":"string"},"steps":{"description":"How many steps it has.","type":"integer"},"title":{"description":"Its title.","type":"string"},"url":{"description":"The journey on loafy.ai.","type":"string"}},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}before
—after
{"description":"The bake as saved in the journal.","properties":{"bake":{"description":"A bake in the baker's journal.","properties":{"bake_minutes":{"description":"Minutes in the oven.","type":"number"},"bake_temp_celsius":{"description":"Oven temperature, °C.","type":"number"},"bake_type":{"description":"What was baked.","type":"string"},"baked_on":{"description":"The day, YYYY-MM-DD.","type":"string"},"bulk_hours":{"description":"Hours of bulk fermentation.","type":"number"},"bulk_temp_celsius":{"description":"Temperature during bulk, °C.","type":"number"},"fridge_proof_hours":{"description":"Hours in the fridge.","type":"number"},"hydration_percent":{"description":"Water as a share of the flour.","type":"number"},"id":{"description":"The bake's id, which update_bake takes.","type":"string"},"next_time_notes":{"description":"What to try next time.","type":"string"},"notes":{"description":"The baker's notes.","type":"string"},"photos":{"description":"How many photos it has.","type":"integer"},"problems":{"description":"What went wrong.","items":{"description":"A problem, such as flat or dense.","type":"string"},"type":"array"},"rating":{"description":"Stars, 1 to 5.","type":"integer"},"room_temp_proof_hours":{"description":"Hours of proof at room temperature.","type":"number"},"salt_percent":{"description":"Salt as a share.","type":"number"},"starter":{"description":"The starter it was made with.","type":"string"},"starter_percent":{"description":"Starter as a share.","type":"number"},"url":{"description":"The bake on loafy.ai.","type":"string"}},"type":"object"},"card":{"description":"The figures the bake card in Claude shows (ui://loafy/bake-card).","properties":{"add_photos":{"description":"The photo button's label.","type":"string"},"best":{"description":"The best bake so far.","type":"string"},"facts":{"description":"The bake's main figures.","items":{"description":"A figure, such as 75 % hydration.","type":"string"},"type":"array"},"open":{"description":"The open button's label.","type":"string"},"photos_url":{"description":"Where its photos are added.","type":"string"},"subtitle":{"description":"Under the title.","type":"string"},"title":{"description":"Its title.","type":"string"},"trail":{"description":"The last bakes.","items":{"properties":{"label":{"description":"Stars or today.","type":"string"},"now":{"description":"This bake.","type":"boolean"},"rating":{"description":"Stars.","type":"integer"}},"type":"object"},"type":"array"},"url":{"description":"The bake on loafy.ai.","type":"string"}},"type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"photos":{"description":"Where photos are added.","type":"string"},"saved":{"description":"What was saved, in one sentence.","type":"string"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}before
—after
{"description":"The container as saved.","properties":{"container":{"description":"One of the baker's containers.","properties":{"id":{"description":"The container's id, which update_container takes.","type":"string"},"name":{"description":"Its name.","type":"string"},"notes":{"description":"Notes on it.","type":"string"},"url":{"description":"The container on loafy.ai.","type":"string"},"weight_grams":{"description":"Its empty weight, in grams.","type":"number"}},"type":"object"},"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"saved":{"description":"What was saved, in one sentence.","type":"string"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}before
—after
{"description":"The starter as saved.","properties":{"input":{"description":"The arguments as the tool used them, after any correction.","properties":{},"type":"object"},"note":{"description":"A remark on the whole result, such as why nothing was found.","type":"string"},"notes":{"description":"What was corrected or left out, such as a value outside its range.","items":{"description":"A correction or remark.","type":"string"},"type":"array"},"saved":{"description":"What was saved, in one sentence.","type":"string"},"starter":{"description":"One of the baker's starters.","properties":{"age_days":{"description":"Its age in days.","type":"integer"},"bakes":{"description":"How many bakes it went into.","type":"integer"},"birthday":{"description":"The day it was started, YYYY-MM-DD.","type":"string"},"id":{"description":"The starter's id, which update_starter takes.","type":"string"},"last_baked_on":{"description":"Its last bake, YYYY-MM-DD.","type":"string"},"name":{"description":"Its name.","type":"string"},"notes":{"description":"Notes on it.","type":"string"},"story":{"description":"Its story.","type":"string"},"url":{"description":"The starter on loafy.ai.","type":"string"}},"type":"object"},"tool":{"description":"The tool that answered.","type":"string"},"url":{"description":"The same answer, recipe or entry on loafy.ai.","type":"string"}},"type":"object"}