Skip to main content
Glama

Loafy: Sourdough Bread Baking

Add a bake to my Loafy journal

log_bake

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. 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.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "log_bake"
  }
}

Input Schema

NameRequiredDescriptionDefault
notesNoHow the bake went, in the baker's words: only what no other parameter takes.
floursNoThe flours, comma-separated, each as the baker named it with its grams: the brand and name on the bag ("Caputo Pizzeria 400"; find_flours finds the exact one, then give it as flour:<id> 400), or the grain with the word on its bag ("whole rye 100", "Weizenmehl Type 1050 300", "T65 500"), the baker's own words about a flour in brackets after it ("rye 100 (fresh-milled at the market)"), a flour without grams alone. The old kinds still work: bread_flour, all_purpose, whole_wheat, rye, spelt, einkorn, durum, tipo_00, other.
piecesNoHow many pieces the dough was divided into: loaves, rolls or pizza balls.
ratingNoHow it turned out, 1 to 5 stars.
add_insNoWhat else went into the dough or onto it besides flour, water, starter, salt and yeast, comma-separated, each as its name and grams when the baker gave them, such as "walnuts 80, raisins 60, hulled hemp seeds 30"; names from the list: walnuts, hazelnuts, sunflower_seeds, pumpkin_seeds, sesame, flaxseeds, hemp_seeds, poppy_seeds, raisins, cranberries, olives, cheese, sun_dried_tomatoes, chocolate; anything else in the baker's words. A change names only the add-ins it adds or corrects; the others stay. "walnuts 0" takes walnuts out.
starterNoThe name of the baker's starter that went in, if any.
baked_onNoThe day of the bake, as YYYY-MM-DD; today if left out.
pre_restNoAn autolyse, flour and water rested alone first, or a fermentolyse, everything mixed at once. A fermentolyse has no rest and no minutes.
problemsNoWhat 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; anything else goes in the notes.
bake_typeNoWhat was baked.sourdough_bread
bake_levelNoOn a stove: the dial's level while baking.
bulk_hoursNoHours of bulk fermentation.
loaf_shapeNoHow a sourdough bread was shaped: boule (round) or batard (oval). A baguette or a loaf pan bread is a bake_type of its own.
ph_readingsNoWhat the baker's pH meter read, comma-separated, each as its step and value, such as "end_of_bulk 4.1, starter_ready 4.2"; steps: starter_ready, mixing, end_of_bulk, shaping, before_proof, after_proof, after_bake. A change names only the steps it adds or corrects; the others keep their readings.
bake_minutesNoMinutes in the oven, whole minutes (90 seconds is 2); with two phases, the first.
salt_percentNoSalt as a percentage of flour.
baking_methodNoWhat it was baked in: home_oven also for a Dutch oven, a stone or a tray in it.
preheat_levelNoOn a stove: the dial's level while the pan heated.
next_time_notesNoWhat to try differently next time.
starter_percentNoStarter as a percentage of flour.
autolyse_minutesNoMinutes of an autolyse: the flour and water rested alone before the starter and the salt went in.
bake_temp_celsiusNoOven temperature in °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.
bulk_temp_celsiusNoDough or room temperature during bulk, in °C.
dry_yeast_percentNoDry or instant yeast as a percentage of flour.
hydration_percentNoWater as a percentage of flour.
dough_rise_percentNoHow much the dough grew during bulk fermentation, in percent.
fridge_proof_hoursNoHours the shaped dough proofed in the fridge.
piece_weight_gramsNoWhat one piece weighed when it was divided, in grams.
proof_rise_percentNoHow much more the shaped dough grew during the proof, in percent.
stretch_fold_countNoSets of stretch and folds during bulk.
fresh_yeast_percentNoFresh yeast as a percentage of flour.
second_bake_minutesNoMinutes of that second phase, whole minutes.
preheat_temp_celsiusNoHow hot the oven was preheated, in °C. A value above 300 °C is only plausible in a pizza or wood-fired oven.
room_temp_proof_hoursNoHours the shaped dough proofed at room temperature.
second_bake_temp_celsiusNoOven temperature in °C of a second phase: with the lid off, or turned down. A value above 300 °C is only plausible in a pizza or wood-fired oven.
other_bake_type_descriptionNoWhat was baked, in the baker's words, when bake_type is other.

Output Schema

NameRequiredDescriptionDefault
urlNoThe same answer, recipe or entry on loafy.ai.
bakeNoA bake in the baker's journal.
cardNoThe figures the bake card in Claude shows (ui://loafy/bake-card).
noteNoA remark on the whole result, such as why nothing was found.
toolNoThe tool that answered.
inputNoThe arguments as the tool used them, after any correction.
notesNoWhat was corrected or left out, such as a value outside its range.
savedNoWhat was saved, in one sentence.
photosNoWhere photos are added.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / autolyse_minutes / description
      Previous value: -"Minutes the flour and water rested before mixing, with the starter in for a fermentolyse."New value: +"Minutes of an autolyse: the flour and water rested alone before the starter and the salt went in."
    • changedInput schema / properties / pre_rest / description
      Previous value: -"That rest: an autolyse, flour and water only, or a fermentolyse, with the starter in."New value: +"An autolyse, flour and water rested alone first, or a fermentolyse, everything mixed at once. A fermentolyse has no rest and no minutes."
  2. Changed2 schema fields changed
    • addedInput schema / properties / add_ins
      Added value: +{
      +  "description": "What else went into the dough or onto it besides flour, water, starter, salt and yeast, comma-separated, each as its name and grams when the baker gave them, such as \"walnuts 80, raisins 60, hulled hemp seeds 30\"; names from the list: walnuts, hazelnuts, sunflower_seeds, pumpkin_seeds, sesame, flaxseeds, hemp_seeds, poppy_seeds, raisins, cranberries, olives, cheese, sun_dried_tomatoes, chocolate; anything else in the baker's words. A change names only the add-ins it adds or corrects; the others stay. \"walnuts 0\" takes walnuts out.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / bake / properties / add_ins
      Added value: +{
      +  "description": "What else went into the dough, in the baker's order.",
      +  "items": {
      +    "properties": {
      +      "grams": {
      +        "description": "Grams, when given.",
      +        "type": "integer"
      +      },
      +      "label": {
      +        "description": "The baker's own add-in in their words.",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "One of the list, such as walnuts, or other for the baker's own.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / flours / description
      Previous value: -"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."New value: +"The flours, comma-separated, each as the baker named it with its grams: the brand and name on the bag (\"Caputo Pizzeria 400\"; find_flours finds the exact one, then give it as flour:<id> 400), or the grain with the word on its bag (\"whole rye 100\", \"Weizenmehl Type 1050 300\", \"T65 500\"), the baker's own words about a flour in brackets after it (\"rye 100 (fresh-milled at the market)\"), a flour without grams alone. The old kinds still work: bread_flour, all_purpose, whole_wheat, rye, spelt, einkorn, durum, tipo_00, other."
  4. Changed2 schema fields changed
    • addedInput schema / properties / ph_readings
      Added value: +{
      +  "description": "What the baker's pH meter read, comma-separated, each as its step and value, such as \"end_of_bulk 4.1, starter_ready 4.2\"; steps: starter_ready, mixing, end_of_bulk, shaping, before_proof, after_proof, after_bake. A change names only the steps it adds or corrects; the others keep their readings.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / bake / properties / ph_readings
      Added value: +{
      +  "description": "What the baker's pH meter read, in the order of the dough's day.",
      +  "items": {
      +    "properties": {
      +      "step": {
      +        "description": "Where it was read, such as starter_ready or end_of_bulk.",
      +        "type": "string"
      +      },
      +      "value": {
      +        "description": "The pH.",
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / loaf_shape
      Added value: +{
      +  "description": "How a sourdough bread was shaped: boule (round) or batard (oval). A baguette or a loaf pan bread is a bake_type of its own.",
      +  "enum": [
      +    "boule",
      +    "batard"
      +  ],
      +  "type": "string"
      +}
  6. Changed42 schema fields changed
    • addedInput schema / properties / autolyse_minutes
      Added value: +{
      +  "description": "Minutes the flour and water rested before mixing, with the starter in for a fermentolyse.",
      +  "maximum": 1440,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / bake_level
      Added value: +{
      +  "description": "On a stove: the dial's level while baking.",
      +  "maximum": 12,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / bake_minutes / description
      Previous value: -"Minutes in the oven."New value: +"Minutes in the oven, whole minutes (90 seconds is 2); with two phases, the first."
    • changedInput schema / properties / bake_temp_celsius / description
      Previous value: -"Oven temperature in °C."New value: +"Oven temperature in °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."
    • changedInput schema / properties / bake_temp_celsius / maximum
      Previous value: -350New value: +550
    • addedInput schema / properties / baking_method
      Added value: +{
      +  "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"
      +}
    • addedInput schema / properties / dough_rise_percent
      Added value: +{
      +  "description": "How much the dough grew during bulk fermentation, in percent.",
      +  "maximum": 300,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / dry_yeast_percent
      Added value: +{
      +  "description": "Dry or instant yeast as a percentage of flour.",
      +  "maximum": 10,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / flours
      Added value: +{
      +  "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"
      +}
    • addedInput schema / properties / fresh_yeast_percent
      Added value: +{
      +  "description": "Fresh yeast as a percentage of flour.",
      +  "maximum": 10,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / notes / description
      Previous value: -"How the bake went, in the baker's words."New value: +"How the bake went, in the baker's words: only what no other parameter takes."
    • addedInput schema / properties / other_bake_type_description
      Added value: +{
      +  "description": "What was baked, in the baker's words, when bake_type is other.",
      +  "type": "string"
      +}
    • addedInput schema / properties / piece_weight_grams
      Added value: +{
      +  "description": "What one piece weighed when it was divided, in grams.",
      +  "maximum": 10000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / pieces
      Added value: +{
      +  "description": "How many pieces the dough was divided into: loaves, rolls or pizza balls.",
      +  "maximum": 500,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / pre_rest
      Added value: +{
      +  "description": "That rest: an autolyse, flour and water only, or a fermentolyse, with the starter in.",
      +  "enum": [
      +    "autolyse",
      +    "fermentolyse"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / preheat_level
      Added value: +{
      +  "description": "On a stove: the dial's level while the pan heated.",
      +  "maximum": 12,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / preheat_temp_celsius
      Added value: +{
      +  "description": "How hot the oven was preheated, in °C. A value above 300 °C is only plausible in a pizza or wood-fired oven.",
      +  "maximum": 550,
      +  "minimum": 50,
      +  "type": "integer"
      +}
    • changedInput schema / properties / problems / description
      Previous value: -"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."New value: +"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; anything else goes in the notes."
    • addedInput schema / properties / proof_rise_percent
      Added value: +{
      +  "description": "How much more the shaped dough grew during the proof, in percent.",
      +  "maximum": 300,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / second_bake_minutes
      Added value: +{
      +  "description": "Minutes of that second phase, whole minutes.",
      +  "maximum": 300,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / second_bake_temp_celsius
      Added value: +{
      +  "description": "Oven temperature in °C of a second phase: with the lid off, or turned down. A value above 300 °C is only plausible in a pizza or wood-fired oven.",
      +  "maximum": 550,
      +  "minimum": 50,
      +  "type": "integer"
      +}
    • addedInput schema / properties / stretch_fold_count
      Added value: +{
      +  "description": "Sets of stretch and folds during bulk.",
      +  "maximum": 10,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / autolyse_minutes
      Added value: +{
      +  "description": "Minutes of rest before mixing.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / bake_level
      Added value: +{
      +  "description": "A stove's dial while baking.",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / bake / properties / bake_minutes / description
      Previous value: -"Minutes in the oven."New value: +"Minutes in the oven; with two phases, the first."
    • changedOutput schema / properties / bake / properties / bake_temp_celsius / description
      Previous value: -"Oven temperature, °C."New value: +"Oven temperature, °C; with two phases, the first."
    • addedOutput schema / properties / bake / properties / baking_method
      Added value: +{
      +  "description": "What it was baked in.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / bake / properties / dough_rise_percent
      Added value: +{
      +  "description": "How much the dough grew in bulk, %.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / dry_yeast_percent
      Added value: +{
      +  "description": "Dry yeast as a share.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / bake / properties / fermentolyse
      Added value: +{
      +  "description": "The rest was a fermentolyse, with the starter in.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / bake / properties / flour_amounts
      Added value: +{
      +  "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"
      +}
    • addedOutput schema / properties / bake / properties / flours
      Added value: +{
      +  "description": "The flours used, without grams.",
      +  "items": {
      +    "description": "A flour's kind.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / bake / properties / fresh_yeast_percent
      Added value: +{
      +  "description": "Fresh yeast as a share.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / bake / properties / other_bake_type_description
      Added value: +{
      +  "description": "What was baked, when bake_type is other.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / bake / properties / piece_weight_grams
      Added value: +{
      +  "description": "What one piece weighed, in grams.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / pieces
      Added value: +{
      +  "description": "How many pieces the dough made.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / preheat_level
      Added value: +{
      +  "description": "A stove's dial while heating.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / preheat_temp_celsius
      Added value: +{
      +  "description": "Preheat temperature, °C.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / bake / properties / proof_rise_percent
      Added value: +{
      +  "description": "How much more it grew in the proof, %.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / second_bake_minutes
      Added value: +{
      +  "description": "Minutes of the second phase.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / bake / properties / second_bake_temp_celsius
      Added value: +{
      +  "description": "Oven temperature of the second phase, °C.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / bake / properties / stretch_fold_count
      Added value: +{
      +  "description": "Sets of stretch and folds.",
      +  "type": "integer"
      +}
  7. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "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"
      +}
  8. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations it discloses the return shape (the new entry with a link, where photos are added) and an auth prerequisite ("Needs the baker's Loafy account"). The two-minute dedup window is genuinely useful behavior that annotations do not convey, though it sits in mild tension with idempotentHint=false — it is a repeat window rather than true idempotency, so this is a nuance rather than a contradiction.

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

Conciseness5/5

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

Four short sentences, zero filler, and the core purpose is front-loaded before the return-value, dedup and update_bake details. Each sentence contributes a fact the agent cannot get from the structured fields.

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

Completeness4/5

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

For a 36-parameter tool with an output schema, the description covers the important non-schema facts: idempotency window, auth requirement, and the update_bake boundary. The one gap is that nothing states all parameters are optional and what a minimal valid bake looks like, which matters when required=[] on a schema this large.

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

Parameters3/5

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

Schema coverage is 100% and the 36 parameter descriptions are unusually detailed, so the schema carries the semantics. The description only groups the fields into categories (what was baked and when, recipe figures, how it went, what to try next time) and adds no format or unit guidance beyond what is already documented.

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?

"Add a bake to the baker's Loafy bake journal" gives a specific verb and resource, then enumerates the scope of the record (what was baked and when, recipe figures, outcome, next steps). It also names the sibling it is not — "a bake already in the journal changes with update_bake" — so an agent can separate it from update_bake without opening a schema.

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?

It explicitly routes the agent: use this to create a new entry, use update_bake when the bake already exists. It also states the duplicate-submission condition (same bake within two minutes returns the first entry), which is exactly the situation an agent would otherwise get wrong.

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