Skip to main content
Glama

search_recipes

Read-onlyIdempotent

Find recipes by name, consumed item, or produced item, and mark them HAVE/LOCKED against a chosen save.

Instructions

Search recipes by name, or by what they consume/produce; marks HAVE/LOCKED against the save.

consumes= is the reverse lookup (every recipe that eats an item); with produces= too, only recipes doing both. The header counts every recipe_kind over the whole table, whatever recipe_kind shows.

Input Schema

NameRequiredDescriptionDefault
saveNo
as_ofNopin to one save: the sav:… token an earlier answer printed
limitNo
queryNo
worldNo
offsetNo
consumesNo
producesNo
recipe_kindNopart | building (build-gun costs) | manual | allpart
include_eventsNo
only_alternatesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changedv0.3.0
    • removedInput schema / properties / as_of / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / as_of / description
      Previous value: -"pin to one world state: a sav:… token from an earlier answer"New value: +"pin to one save: the sav:… token an earlier answer printed"
    • removedInput schema / properties / as_of / title
      Removed value: -"As Of"
    • addedInput schema / properties / as_of / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / consumes / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / consumes / title
      Removed value: -"Consumes"
    • addedInput schema / properties / consumes / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / include_events / title
      Removed value: -"Include Events"
    • removedInput schema / properties / kind
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "retired -- write recipe_kind= instead",
      -  "title": "Kind"
      -}
    • removedInput schema / properties / limit / description
      Removed value: -"max rows (hard cap 25)"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • addedInput schema / properties / offset / minimum
      Added value: +0
    • removedInput schema / properties / offset / title
      Removed value: -"Offset"
    • removedInput schema / properties / only_alternates / title
      Removed value: -"Only Alternates"
    • removedInput schema / properties / produces / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / produces / title
      Removed value: -"Produces"
    • addedInput schema / properties / produces / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / query / title
      Removed value: -"Query"
    • changedInput schema / properties / recipe_kind / description
      Previous value: -"part | building | manual | all"New value: +"part | building (build-gun costs) | manual | all"
    • removedInput schema / properties / recipe_kind / title
      Removed value: -"Recipe Kind"
    • removedInput schema / properties / save / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / save / title
      Removed value: -"Save"
    • addedInput schema / properties / save / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / world / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / world / title
      Removed value: -"World"
    • addedInput schema / properties / world / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / title
      Removed value: -"search_recipesArguments"
  2. Changed7 schema fields changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "pin to one world state: a sav:… token from an earlier answer",
      +  "title": "As Of"
      +}
    • addedInput schema / properties / kind / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / kind / default
      Previous value: -"part"New value: +null
    • addedInput schema / properties / kind / description
      Added value: +"retired -- write recipe_kind= instead"
    • removedInput schema / properties / kind / type
      Removed value: -"string"
    • addedInput schema / properties / recipe_kind
      Added value: +{
      +  "default": "part",
      +  "description": "part | building | manual | all",
      +  "title": "Recipe Kind",
      +  "type": "string"
      +}
    • addedInput schema / properties / world
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "World"
      +}
  3. First observedv0.1.0

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already cover read-only/idempotent/non-destructive. The description adds genuine behavioral context: results are marked HAVE/LOCKED against the save, and the header counts all recipe_kinds regardless of the recipe_kind filter — a non-obvious quirk worth disclosing. It says nothing about pagination, empty results, or save-resolution behavior.

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 tight sentences plus a header note, front-loaded with the primary capability. No filler, though the header-count sentence is buried at the end where its relevance to filtering is easy to miss.

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

Completeness2/5

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

With 11 parameters, 18% schema coverage, and no output schema, the description should carry much more weight. It covers the relational filters and the result markers but omits the meaning of include_events, only_alternates, world/save/as_of, and paging — an agent cannot confidently call this tool without guessing.

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 description coverage is only 18% across 11 parameters, so the description must compensate. It clarifies consumes, produces, and their combination, but leaves save, as_of, world, query, limit, offset, include_events, and only_alternates completely undocumented in both schema and description — a large gap for a tool with this many knobs.

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?

Opens with a specific verb+resource ('Search recipes') and immediately broadens the retrieval model to name or by consumes/produces relation. It doesn't explicitly contrast itself with siblings like recipe_detail or alternates_for_item, but the reverse-lookup framing is distinctive enough to separate it from a plain lookup.

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 explains the semantics of consumes= and the consumes+produces combination, which implies when each mode is useful, but it never states when to prefer this tool over recipe_detail, compare_recipe_options, or alternates_for_item. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.