Skip to main content
Glama

List locked recipes

list_recipes
Read-onlyIdempotent

List recipes (all or filtered by equipment and status). The id on each row is the number this account knows that record by, counting from 1: safe to show, and what other tools expect back.

Input Schema

NameRequiredDescriptionDefault
statusNoFilter by status: current, archived, or all. Defaults to current.
bean_idNo
grinder_idNo
machine_idNo

Output Schema

NameRequiredDescriptionDefault
recipesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / recipes / items / properties / roaster_name / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / recipes / items / properties / machine_settings
      Added value: +{
      +  "additionalProperties": true,
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / recipes / items / required
      Previous value: -[
      -  "id",
      -  "bean_id",
      -  "grinder_id",
      -  "machine_id",
      -  "program_id",
      -  "status",
      -  "grind_label",
      -  "grind_position_value",
      -  "dose_g",
      -  "target_yield_g",
      -  "target_time_s",
      -  "finish_action",
      -  "drink_intent",
      -  "profile",
      -  "locked_at",
      -  "bean_name",
      -  "roaster_name",
      -  "grinder_name",
      -  "machine_name",
      -  "grind_reading"
      -]New value: +[
      +  "id",
      +  "bean_id",
      +  "grinder_id",
      +  "machine_id",
      +  "program_id",
      +  "status",
      +  "grind_label",
      +  "grind_position_value",
      +  "dose_g",
      +  "target_yield_g",
      +  "target_time_s",
      +  "finish_action",
      +  "drink_intent",
      +  "profile",
      +  "locked_at",
      +  "machine_settings",
      +  "bean_name",
      +  "roaster_name",
      +  "grinder_name",
      +  "machine_name",
      +  "grind_reading"
      +]
  3. Changed3 schema fields changed
    • removedOutput schema / properties / recipes / items / properties / grind_reading / properties / label / type
      Removed value: -"null"
    • removedOutput schema / properties / recipes / items / properties / grind_reading / properties / offset_clicks / type
      Removed value: -"null"
    • removedOutput schema / properties / recipes / items / properties / grind_reading / properties / offset_direction / type
      Removed value: -"null"
  4. Changed2 schema fields changed
    • addedOutput schema / properties / recipes / items / properties / grind_reading / properties / epoch_tasks
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / recipes / items / properties / grind_reading / properties / untranslatable
      Added value: +{
      +  "type": "boolean"
      +}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / recipes / items / properties / roaster_name
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / recipes / items / required
      Previous value: -[
      -  "id",
      -  "bean_id",
      -  "grinder_id",
      -  "machine_id",
      -  "program_id",
      -  "status",
      -  "grind_label",
      -  "grind_position_value",
      -  "dose_g",
      -  "target_yield_g",
      -  "target_time_s",
      -  "finish_action",
      -  "drink_intent",
      -  "profile",
      -  "locked_at",
      -  "bean_name",
      -  "grinder_name",
      -  "machine_name",
      -  "grind_reading"
      -]New value: +[
      +  "id",
      +  "bean_id",
      +  "grinder_id",
      +  "machine_id",
      +  "program_id",
      +  "status",
      +  "grind_label",
      +  "grind_position_value",
      +  "dose_g",
      +  "target_yield_g",
      +  "target_time_s",
      +  "finish_action",
      +  "drink_intent",
      +  "profile",
      +  "locked_at",
      +  "bean_name",
      +  "roaster_name",
      +  "grinder_name",
      +  "machine_name",
      +  "grind_reading"
      +]
  6. Changed5 schema fields changed
    • changedOutput schema / properties / recipes / items / properties / dose_g / type
      Previous value: -"number"New value: +[
      +  "integer",
      +  "number"
      +]
    • changedOutput schema / properties / recipes / items / properties / grind_reading / required
      Previous value: -[
      -  "label",
      -  "offset_clicks",
      -  "offset_direction",
      -  "epochs_since",
      -  "unmeasured"
      -]New value: +[]
    • changedOutput schema / properties / recipes / items / properties / grind_reading / type
      Previous value: -"object"New value: +[
      +  "null",
      +  "object"
      +]
    • changedOutput schema / properties / recipes / items / properties / program_id / type
      Previous value: -"integer"New value: +[
      +  "null",
      +  "integer"
      +]
    • changedOutput schema / properties / recipes / items / properties / target_yield_g / type
      Previous value: -[
      -  "number",
      -  "integer"
      -]New value: +[
      +  "integer",
      +  "number"
      +]
  7. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "recipes": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "bean_id": {
      +            "type": "integer"
      +          },
      +          "bean_name": {
      +            "type": "string"
      +          },
      +          "dose_g": {
      +            "type": "number"
      +          },
      +          "drink_intent": {
      +            "type": "string"
      +          },
      +          "finish_action": {
      +            "type": "string"
      +          },
      +          "grind_label": {
      +            "type": "string"
      +          },
      +          "grind_position_value": {
      +            "type": "integer"
      +          },
      +          "grind_reading": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "epochs_since": {
      +                "type": "integer"
      +              },
      +              "label": {
      +                "type": "null"
      +              },
      +              "offset_clicks": {
      +                "type": "null"
      +              },
      +              "offset_direction": {
      +                "type": "null"
      +              },
      +              "unmeasured": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "label",
      +              "offset_clicks",
      +              "offset_direction",
      +              "epochs_since",
      +              "unmeasured"
      +            ],
      +            "type": "object"
      +          },
      +          "grinder_id": {
      +            "type": "integer"
      +          },
      +          "grinder_name": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "integer"
      +          },
      +          "locked_at": {
      +            "type": "string"
      +          },
      +          "machine_id": {
      +            "type": "integer"
      +          },
      +          "machine_name": {
      +            "type": "string"
      +          },
      +          "profile": {
      +            "type": "string"
      +          },
      +          "program_id": {
      +            "type": "integer"
      +          },
      +          "status": {
      +            "type": "string"
      +          },
      +          "target_time_s": {
      +            "type": "integer"
      +          },
      +          "target_yield_g": {
      +            "type": [
      +              "number",
      +              "integer"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "bean_id",
      +          "grinder_id",
      +          "machine_id",
      +          "program_id",
      +          "status",
      +          "grind_label",
      +          "grind_position_value",
      +          "dose_g",
      +          "target_yield_g",
      +          "target_time_s",
      +          "finish_action",
      +          "drink_intent",
      +          "profile",
      +          "locked_at",
      +          "bean_name",
      +          "grinder_name",
      +          "machine_name",
      +          "grind_reading"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "recipes"
      +  ],
      +  "type": "object"
      +}
  8. First observed

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds one genuinely useful behavioral fact — the `id` is an account-local sequential number safe to display and usable as a key elsewhere — but says nothing about ordering, pagination, or empty results.

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

Conciseness3/5

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

Two sentences, no filler, front-loaded with the core action. The second sentence is convoluted ("the number this account knows that record by, counting from 1") where "account-local sequential ID" would say it faster.

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

Completeness3/5

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

An output schema exists, so return shape needn't be explained, and annotations cover safety. But with three of four parameters undocumented and no statement of filter-combination semantics or default behavior, the description does not close the gaps the structured data leaves.

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

Parameters2/5

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

Schema coverage is only 25%: `status` is documented in the schema but bean_id, grinder_id, and machine_id have nothing. The phrase "filtered by equipment and status" implies those three IDs are equipment filters, but never says what each one selects or how multiple filters combine (AND vs OR).

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 ("List recipes") plus the two filtering axes (equipment and status), which is enough to distinguish it from mutation siblings like lock_recipe or update_shot. It stops short of differentiating it from other list_* tools (list_shots, list_beans), which share the same shape.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no named alternative. The only usage signal is the implicit hint that the returned `id` is "what other tools expect back," which suggests chaining but never states the condition that selects this tool over a sibling.

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