For developers

Add Loafy to your baking site

Your page knows the baker's numbers. Pass them to Loafy, and the answer comes from The Sourdough Framework, the open book by Hendrik Kleinwächter, about that dough. Try it: change the numbers and watch the link.

Your calculator

Total hydration, starter included: 67.6 %

The Ask Loafy link it writes

https://loafy.ai/loafy?via=yoursite&q=My+dough%3A+1000+g+flour%2C+700+g+water%2C+200+g+starter+at+50+%25+hydration+%2867.6+%25+total+hydration%29.+Is+this+hydration+right+for+my+flour%3F

Free, no key. The question arrives written; the baker presses send, and the answer names the book's chapter.

What it costs

For any page

Free

No account, no key

  • Ask Loafy link. Link to Loafy with the baker's question already written. The answer opens on loafy.ai and names the chapter of the book it comes from; the baker presses send once. Without an account a baker gets one free question a day, with a free Loafy account five.
  • Ask box. A small HTML form for your page: a field and a button. It loads nothing from Loafy before a baker presses Ask and sets no cookies; the answer opens on loafy.ai, like the link.
See the code

For developers

Free

With the API key of a free Loafy account

  • Tools API. Run the bread and pizza calculators and link the guided journeys with no key; read and search The Sourdough Framework and Hendrik's answers to real baker questions with your account's API key. JSON over HTTPS, from your server.
  • AI assistants (MCP). Claude and every other assistant that speaks the Model Context Protocol connects to the same tools at one URL; to read and search the book and the answers, the baker signs in with a Loafy account.
Read the docs Add Loafy to Claude

Answers in your page

$25

per 1,000 answers, prepaid · early access

For businesses, plus VAT where it applies

  • Coming: a Loafy panel on your page that opens when a baker clicks and answers about your page's numbers, from the book, under "Answers powered by Loafy". It is not built yet. Hendrik is looking for the first partners, and nothing is charged before it runs.
  • Booked by e-mail with Hendrik. There is no checkout, and nothing is charged before it runs.
Book by e-mail or use the form

Get started

  1. No account: put the Ask Loafy link or the Ask box on your page, and call the calculators and journeys in the API or over MCP.
  2. A free Loafy account: it comes with an API key. Send it with the calls that read or search the book and Hendrik's answers. In Claude and other MCP assistants, the baker signs in with their account instead, and can let the assistant keep their bake journal, starters and containers. Create an account, then find the key under Settings, API keys.
  3. Loafy's answers inside your page: early access, booked by e-mail with Hendrik (Book or ask).

API reference

  • Base URL: https://loafy.ai/api/v1. JSON in, JSON out.
  • Authentication: Authorization: Bearer loafy_…, the API key of a Loafy account. Reading and searching the book and the answers need it; the calculators and journeys answer without it.
  • Limits: up to 120 calls an hour per server address. Call it from your server, not from the browser.
  • Errors: {"success": false, "error": {"code": …, "message": …}} with 401 (api_key_required), 404 (unknown_tool) or 429 (rate_limited).

GET /api/v1/tools

Every tool with its JSON Schema, and requires_api_key for each.

POST /api/v1/tools/<name>

Runs one tool with its parameters as the JSON body. Every result carries a url back into Loafy with the values filled in; please show it.

calculate_bread_dough · Bread dough calculator · no key

Calculate a sourdough bread recipe in grams from loaf count, loaf size and hydration. Returns flour, water, starter and salt, plus a link to the same recipe on loafy.ai where the baker can adjust it and run the timers.

  • loaves (integer, optional, default 1, 1 to 100) How many loaves to bake.
  • loaf_size_g (integer, optional, default 500, 100 to 2000) Flour per loaf in grams, not the dough weight: 500 g of flour makes one standard loaf of about 860 g of dough. For a loaf of a given dough weight, the flour is about 58 % of it at 60 % hydration.
  • hydration_percent (integer, optional, default 60, 55 to 100) Water as a percentage of flour. The book recommends around 60 % for most flours; higher is more open but stickier.
  • whole_grain_percent (integer, optional, default 20, 0 to 100) Share of the flour that is whole grain, the rest is bread flour.
calculate_pizza_dough · Pizza dough calculator · no key

Calculate pizza dough in grams from the number of pizzas, the ball weight and hydration, with either fresh yeast or sourdough starter. Returns flour, water, salt, leavening and toppings, plus a link to the same recipe on loafy.ai.

  • pizzas (integer, optional, default 4, 1 to 12) How many pizzas.
  • weight_per_pizza_g (integer, optional, 50 to 350) Dough ball weight in grams. Left out, it follows the oven: 250 g home, 270 g pizza oven, 280 g wood-fired.
  • hydration_percent (integer, optional, default 60, 55 to 75) Water as a percentage of flour. 55-65 is easy to handle, above 70 is expert.
  • dough_type (string, optional, default yeast, one of yeast, sourdough) Leavened with fresh yeast or with sourdough starter.
  • oven (string, optional, default home, one of home, pizza, wood) home is a domestic oven, pizza an Ooni or Roccbox, wood a wood-fired oven.
plan_sourdough_bake · Sourdough bake planner · no key

Plan a sourdough bake backwards from when the bread should come out of the oven: when to feed the starter, mix, shape, proof in the fridge, preheat and bake, and how much starter suits the kitchen's temperature according to The Sourdough Framework. Returns the times and a link to the same plan on loafy.ai.

  • ready_at (string, required) When the bread should come out of the oven, as the baker's local date and time, e.g. "2026-10-24T10:00".
  • kitchen_temperature_c (integer, optional, default 22, 15 to 32) Kitchen temperature in °C, which sets how much starter to use.
  • bulk_hours (integer, optional, 4 to 16) Hours of bulk fermentation, if the baker knows their dough. Without it, the book's figure for the kitchen's temperature.
  • cold_proof_hours (integer, optional, default 12, 8 to 24) Hours the shaped loaf proofs in the fridge. The book says 8 to 12.
list_sourdough_journeys · List guided journeys · no key

List Loafy's guided sourdough journeys: making a starter, baking a loaf, scoring, and more. Each one is a timed, step-by-step walkthrough on loafy.ai. Returns each journey's slug, title, duration, difficulty, number of steps and link.

No parameters.

start_sourdough_journey · Start a guided journey · no key

Start one of Loafy's guided journeys and get the link that opens it at the first step. The journey runs on loafy.ai, where each fold, proof and bake is timed for the baker.

  • slug (string, required) Journey identifier from list_sourdough_journeys, e.g. "sourdough-bread".
get_sourdough_journey_step · Look up a journey step · no key

Look up one step of a guided journey by its id or its position: its title, where it sits in the journey, its timer in minutes when the step has one, and the link that opens it. The instructions themselves are on the page, where the timer for that step runs.

  • slug (string, required) Journey identifier, e.g. "sourdough-bread".
  • step (string, optional) Step identifier (e.g. "mix") or position ("5" is the fifth step). Left out, the first step is returned.
find_sourdough_answer · Find a sourdough answer · needs your API key

Search Loafy's library of answers to real questions from bakers, written by Hendrik Kleinwächter of The Bread Code and grounded in his book The Sourdough Framework. Returns the answers that match, each with the book chapter behind it and a link. When none matches, returns the closest passages from the book instead. The library covers starters, fermentation, dough, flour, baking and storage, and it is in English.

  • query (string, required) What the baker wants to know, in English, e.g. "my starter smells like vinegar".
  • limit (integer, optional, default 3, 1 to 10) How many answers to return. Defaults to 3.
search_sourdough_book · Search The Sourdough Framework · needs your API key

Search Hendrik Kleinwächter's open-source book The Sourdough Framework and get the passages that answer a question, each with its chapter, a link and the part of the book it comes from, which read_sourdough_book returns in full. The book covers starters, fermentation, flour, hydration, shaping, baking and troubleshooting. It is written in English, and the search matches English words.

  • query (string, required) What to look up, in English, e.g. "starter smells like acetone" or "bulk fermentation temperature".
  • limit (integer, optional, default 3, 1 to 5) How many passages to return. Defaults to 3.
get_sourdough_book_contents · Contents of The Sourdough Framework · no key

The table of contents of Hendrik Kleinwächter's open-source book The Sourdough Framework: every chapter and section with its number and each chapter's length in words. read_sourdough_book returns any of them in full. The book covers starters, fermentation, flour, hydration, shaping, baking and troubleshooting.

No parameters.

read_sourdough_book · Read The Sourdough Framework · needs your API key

Read a chapter or section of Hendrik Kleinwächter's open-source book The Sourdough Framework in full, by its number from get_sourdough_book_contents or by its title. Returns the text with its chapter, link and licence; a chapter longer than about 40,000 characters comes in pages.

  • part (string, required) A chapter or section: its number from get_sourdough_book_contents, e.g. "8" or "8.3", or its title, e.g. "Bulk fermentation".
  • page (integer, optional, default 1, 1 to 10) Which page of a long chapter. Most parts have one.

The JSON API has no baker to act for, so the kitchen tools are only on MCP (below).

Loafy's own apps: /api/v1/me

With a baker's API key, these endpoints read and change that baker's data, as Loafy's iPhone app does. They are built for Loafy's own apps and change with them, so they are not documented as a public API. To work with a baker's bake journal, starters and containers, use the kitchen tools over MCP; for anything else, write to [email protected]. Whoever holds a key gets that access, so a baker gives it only to apps they trust and can revoke it under Settings, API keys.

MCP

Add Loafy to Claude

Opens Loafy in Claude's connector directory: press Connect, and Loafy is in every Claude app. Loafy in Claude shows what it does there.

  • URL: https://loafy.ai/mcp, Streamable HTTP (JSON-RPC 2.0): tools, prompts and resources.
  • Sign-in: OAuth 2.1 with PKCE and dynamic client registration (/.well-known/oauth-authorization-server). A guest connects without an account. Without a Loafy account, reading and searching the book and the answers is limited to 3 questions a day, every lookup within 15 minutes counting as one question; a free Loafy account removes the limit. The calculators, the guides and the book's table of contents need no account.
  • The kitchen tools need the baker's Loafy account and their permission for the kitchen, asked for on a page of its own. They open only for assistants at claude.ai, claude.com, chatgpt.com and on the baker's own computer, such as Claude Code; any other client gets the rest.
  • Discovery: the server card for MCP registries at https://loafy.ai/.well-known/mcp/server.json, and Loafy in Claude's connector directory.

Tools

The 10 tools of the API reference, and 9 for the baker's own kitchen. Those read, add and change the bake journal, the starters and the containers, and never delete anything.

list_my_bakes · My Loafy bake journal · MCP only, the baker's account and kitchen permission

The baker's own bakes from their Loafy bake journal, newest first: what was baked and when, the recipe figures, rating, problems and notes, each with its id and a link. Needs the baker's Loafy account.

  • limit (integer, optional, default 5, 1 to 20) How many bakes, newest first.
  • bake_type (string, optional, one of sourdough_bread, pizza, focaccia, bagels, brioche, croissant, baguettes, loaf_pan_bread, bread_rolls, pan_bread, tortilla, naan, flatbread, other) Only bakes of this kind, e.g. sourdough_bread or pizza.
log_bake · Add a bake to my Loafy journal · MCP only, the baker's account and kitchen permission

Add a bake to the baker's Loafy bake journal: what was baked and when, the recipe figures, how it went and what to try next time. Returns the new entry with a link, where photos are added. Needs the baker's Loafy account.

  • bake_type (string, optional, default sourdough_bread, one of sourdough_bread, pizza, focaccia, bagels, brioche, croissant, baguettes, loaf_pan_bread, bread_rolls, pan_bread, tortilla, naan, flatbread, other) What was baked.
  • baked_on (string, optional) The day of the bake, as YYYY-MM-DD; today if left out.
  • rating (integer, optional, 1 to 5) How it turned out, 1 to 5 stars.
  • hydration_percent (integer, optional, 40 to 120) Water as a percentage of flour.
  • starter_percent (number, optional, 1 to 50) Starter as a percentage of flour.
  • salt_percent (number, optional, 0 to 5) Salt as a percentage of flour.
  • bulk_hours (number, optional, 0 to 48) Hours of bulk fermentation.
  • bulk_temp_celsius (number, optional, 0 to 50) Dough or room temperature during bulk, in °C.
  • fridge_proof_hours (number, optional, 0 to 72) Hours the shaped dough proofed in the fridge.
  • room_temp_proof_hours (number, optional, 0 to 24) Hours the shaped dough proofed at room temperature.
  • bake_temp_celsius (integer, optional, 50 to 350) Oven temperature in °C.
  • bake_minutes (integer, optional, 1 to 300) Minutes in the oven.
  • problems (string, optional) What went wrong, comma-separated, from: dense_crumb, gummy_interior, no_oven_spring, flat_loaf, burnt_crust, pale_crust, bland_flavor, too_sour, didnt_rise, sticky_dough.
  • notes (string, optional) How the bake went, in the baker's words.
  • next_time_notes (string, optional) What to try differently next time.
  • starter (string, optional) The name of the baker's starter that went in, if any.
update_bake · Change a bake in my Loafy journal · MCP only, the baker's account and kitchen permission

Change a bake in the baker's Loafy bake journal, by its id from list_my_bakes or log_bake: only the figures and notes given change, the rest stays, and a text given replaces the old text. No bake is deleted. Returns the bake with a link. Needs the baker's Loafy account.

  • id (string, required) The bake's id, from list_my_bakes or log_bake.
  • bake_type (string, optional, one of sourdough_bread, pizza, focaccia, bagels, brioche, croissant, baguettes, loaf_pan_bread, bread_rolls, pan_bread, tortilla, naan, flatbread, other) What was baked.
  • baked_on (string, optional) The day of the bake, as YYYY-MM-DD.
  • rating (integer, optional, 1 to 5) How it turned out, 1 to 5 stars.
  • hydration_percent (integer, optional, 40 to 120) Water as a percentage of flour.
  • starter_percent (number, optional, 1 to 50) Starter as a percentage of flour.
  • salt_percent (number, optional, 0 to 5) Salt as a percentage of flour.
  • bulk_hours (number, optional, 0 to 48) Hours of bulk fermentation.
  • bulk_temp_celsius (number, optional, 0 to 50) Dough or room temperature during bulk, in °C.
  • fridge_proof_hours (number, optional, 0 to 72) Hours the shaped dough proofed in the fridge.
  • room_temp_proof_hours (number, optional, 0 to 24) Hours the shaped dough proofed at room temperature.
  • bake_temp_celsius (integer, optional, 50 to 350) Oven temperature in °C.
  • bake_minutes (integer, optional, 1 to 300) Minutes in the oven.
  • problems (string, optional) What went wrong, comma-separated, from: dense_crumb, gummy_interior, no_oven_spring, flat_loaf, burnt_crust, pale_crust, bland_flavor, too_sour, didnt_rise, sticky_dough.
  • notes (string, optional) How the bake went, in the baker's words.
  • next_time_notes (string, optional) What to try differently next time.
  • starter (string, optional) The name of the baker's starter that went in, if any.
list_my_starters · My Loafy starters · MCP only, the baker's account and kitchen permission

The baker's own sourdough starters in Loafy: name, birthday and age, notes and story, how many bakes each went into and when last, each with its id and a link. Needs the baker's Loafy account.

No parameters.

add_starter · Add a starter to Loafy · MCP only, the baker's account and kitchen permission

Add a sourdough starter to the baker's Loafy account: its name, the day it was started, notes and its story. Returns it with its id and a link, where photos are added. Needs the baker's Loafy account.

  • name (string, required) The starter's name.
  • birthday (string, optional) The day the starter was started, as YYYY-MM-DD; today if left out.
  • notes (string, optional) Notes on the starter, e.g. its flour and how it is fed.
  • story (string, optional) Where the starter comes from, in the baker's words.
update_starter · Change a starter in Loafy · MCP only, the baker's account and kitchen permission

Change one of the baker's starters, by its id from list_my_starters: only the name, birthday, notes or story given change, and a text given replaces the old text. No starter is deleted. Needs the baker's Loafy account.

  • id (string, required) The starter's id, from list_my_starters or add_starter.
  • name (string, optional) The starter's name.
  • birthday (string, optional) The day the starter was started, as YYYY-MM-DD.
  • notes (string, optional) Notes on the starter, e.g. its flour and how it is fed.
  • story (string, optional) Where the starter comes from, in the baker's words.
list_my_containers · My Loafy containers · MCP only, the baker's account and kitchen permission

The baker's own containers in Loafy: name and empty weight in grams, which Loafy takes off when dough is weighed in them, with notes, each with its id and a link. Needs the baker's Loafy account.

No parameters.

add_container · Add a container to Loafy · MCP only, the baker's account and kitchen permission

Add a container to the baker's Loafy account with its empty weight in grams, so Loafy can take it off when dough is weighed in it. Returns it with its id and a link. Needs the baker's Loafy account.

  • name (string, required) The container's name, e.g. "Glass bowl".
  • weight_grams (integer, required, 1 to 10000) The empty container's weight in grams.
  • notes (string, optional) Notes on the container.
update_container · Change a container in Loafy · MCP only, the baker's account and kitchen permission

Change one of the baker's containers, by its id from list_my_containers: only the name, weight or notes given change, and a text given replaces the old text. No container is deleted. Needs the baker's Loafy account.

  • id (string, required) The container's id, from list_my_containers or add_container.
  • name (string, optional) The container's name, e.g. "Glass bowl".
  • weight_grams (integer, optional, 1 to 10000) The empty container's weight in grams.
  • notes (string, optional) Notes on the container.

Prompts

Ready-made requests, under the + in Claude's message box.

diagnose_my_bread · Diagnose my bread

Attach a photo of your loaf and its crumb: Claude tells you what went wrong and what to change, from the troubleshooting chapter of The Sourdough Framework.

  • what_happened (optional) What you noticed, e.g. "flat and dense"

plan_my_bake · Plan my bake

Tell Claude when you want fresh bread: it plans feeding, mixing, shaping, the fridge and the bake backwards from there, with the starter amount for your kitchen.

  • ready_at (required) When you want fresh bread, e.g. "Saturday 10:00"
  • kitchen_temperature (optional) Your kitchen's temperature, e.g. "21 °C"

learn_sourdough · Learn sourdough with the book

Claude teaches you sourdough from The Sourdough Framework, a chapter at a time, starting where you are.

  • where_you_are (optional) E.g. "never baked bread" or "my loaves come out flat"

Cards

Resources an assistant that supports MCP Apps draws in the conversation.

ui://loafy/bake-card · Loafy bake card

A bake saved to the baker's Loafy journal: its number, the last bakes and the best so far. Drawn by log_bake.

Examples

Put your site's name where it says yoursite, so Loafy can count the bakers you send.

Ask Loafy link
https://loafy.ai/loafy?via=yoursite&q=Is+my+starter+ready%3F
Ask box
<form action="https://loafy.ai/loafy" method="get" target="_blank">
  <input type="hidden" name="via" value="yoursite">
  <label for="loafy-q">Ask Loafy, answers from The Sourdough Framework</label>
  <input id="loafy-q" name="q" type="text" maxlength="1000" required
         placeholder="Is my starter ready?">
  <button type="submit">Ask</button>
</form>
A calculator, no key
curl -X POST https://loafy.ai/api/v1/tools/calculate_bread_dough \
  -H "Content-Type: application/json" \
  -d '{"loaves": 2, "hydration_percent": 70}'
A book search, with your key
curl -X POST https://loafy.ai/api/v1/tools/search_sourdough_book \
  -H "Authorization: Bearer loafy_your_key" \
  -H "Content-Type: application/json" \
  -d '{"query": "how do I know when bulk fermentation is done", "limit": 2}'

Book or ask

Loafy's answers in your page, help with the API, or a question about what fits: send the form, or write to [email protected]. Either way it reaches Hendrik, who answers by e-mail with the terms.

What you would like

Hendrik reads every request and answers by e-mail. Your details are used only to answer you, see section 3.8 of the privacy policy.

The rules

  • Wherever Loafy's answers appear, "Answers powered by Loafy" stays visible and links to loafy.ai.
  • Passages from the book keep their credit: The Sourdough Framework by Hendrik Kleinwächter, licensed CC BY-SA 4.0. The tools API sends that line with every passage.
  • Every partnership is agreed with Hendrik by e-mail.
  • An API key belongs to its account; use your own. A key that is misused can be revoked.
  • Loafy sees what you send with a call and uses it to answer that call. The details are in Loafy's privacy policy.

Help

Questions first? Write to [email protected]. Adding Loafy to Claude has its own page.