Skip to main content
Glama

Loafy: Sourdough Bread Baking

Find a sourdough answer

find_sourdough_answer
Read-onlyIdempotent

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. 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 book and the answers is limited to 3 questions a day, every lookup within 15 minutes counting as one question; with an account it has no limit. The calculators, the guides and the book's table of contents need no account.

Tool call template

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

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

Input Schema

NameRequiredDescriptionDefault
limitNoHow many answers to return. Defaults to 3.
queryYesWhat the baker wants to know, in English, e.g. "my starter smells like vinegar".

Output Schema

NameRequiredDescriptionDefault
urlNoThe same answer, recipe or entry on loafy.ai.
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.
answersNoThe answers that match.
licenseNoThe licence of the book's text: CC BY-SA 4.0, with attribution.
passagesNoWhen no answer matches, the closest passages from the book.
suggestionNoWhere to look next when nothing fits.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "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"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds substantial context beyond them: the no-match fallback to closest book passages, the daily quota and 15-minute dedup window, and the English-only limitation. These are exactly the behavioral traits an agent needs and cannot infer from structured fields.

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

Conciseness4/5

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

The paragraph is dense but every clause carries distinct information (source, return shape, fallback, coverage, sibling routing, quota). It is front-loaded with the core purpose, though the quota/account detail could be tightened.

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

Completeness5/5

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

With an output schema present, return values need not be re-explained, yet the description still clarifies the matched-answer vs fallback-passage distinction. Combined with annotations and full schema coverage, nothing an agent needs to invoke this correctly is missing.

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 schema already documents both parameters, including that the query must be in English. The description only reinforces the English constraint and says nothing new about the 'limit' parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('search') and resource ('Loafy's library of answers to real questions from bakers'), with the author and grounding source named. It explicitly distinguishes itself from the siblings that operate on the book itself (search_sourdough_book, read_sourdough_book).

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?

Explicitly routes the agent: 'The book itself is search_sourdough_book for passages and read_sourdough_book for a whole chapter.' It also states when the fallback behavior kicks in ('When none matches') and what account status allows (3 questions/day unauthenticated vs unlimited with an account).

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