Skip to main content
Glama

Loafy: Sourdough Bread Baking

Look up a journey step

get_sourdough_journey_step
Read-onlyIdempotent

Look up one step of a guided journey by its id, its title 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.

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": {
      "slug": "<slug>"
    },
    "name": "get_sourdough_journey_step"
  }
}

Input Schema

NameRequiredDescriptionDefault
slugYesJourney identifier, e.g. "sourdough-bread", or the journey's title.
stepNoStep identifier (e.g. "mix"), its title, or position ("5" is the fifth step). Left out, the first step is returned.

Output Schema

NameRequiredDescriptionDefault
urlNoThe same answer, recipe or entry on loafy.ai.
noteNoA remark on the whole result, such as why nothing was found.
stepNo
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.
journeyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / slug / description
      Previous value: -"Journey identifier, e.g. \"sourdough-bread\"."New value: +"Journey identifier, e.g. \"sourdough-bread\", or the journey's title."
    • changedInput schema / properties / step / description
      Previous value: -"Step identifier (e.g. \"mix\") or position (\"5\" is the fifth step). Left out, the first step is returned."New value: +"Step identifier (e.g. \"mix\"), its title, or position (\"5\" is the fifth step). Left out, the first step is returned."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "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"
      +}
  2. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the returned payload shape (title, position, timer-in-minutes when present, opening link) and the key caveat that instructions live on the page, not in the response.

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?

Two sentences, purpose front-loaded, with the payload fields listed compactly. Minor redundancy between "by its id, its title or its position" and the later "its title, where it sits in the journey," but no filler sentences.

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?

With an output schema present, return values need not be enumerated, yet the description still orients the agent and explains the instructions/timer split. Complete enough for a two-parameter read tool; only the absence of explicit sibling routing holds it back.

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 description coverage is 100%, so the schema already documents both parameters including the first-step default. The description restates the id/title/position addressing but adds no format or syntax detail the schema lacks; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Look up one step of a guided journey") and enumerates the lookup keys (id, title, position). An agent can distinguish it from list_sourdough_journeys or get_sourdough_book_contents by resource, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by explaining that the step can be addressed by id, title, or position, and that omitting it returns the first step (via the schema). It never states when to prefer this over start_sourdough_journey or list_sourdough_journeys, so the selection guidance is only implied.

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