Skip to main content
Glama

compare_recipe_options

Read-onlyIdempotent

Rank complete production routes for an item by raw cost, buildings, net power, and byproduct outlet needs, so you can choose between end-to-end factory options.

Instructions

Rank whole routes to make an item by cost: raw per unit, buildings, net power, byproducts needing an outlet.

Each route is solved end to end (Crude -> Alt HOR -> Diluted Fuel against Crude -> Fuel); alternates_for_item only lists recipes.

Input Schema

NameRequiredDescriptionDefault
itemYes
rateNo
saveNo
as_ofNopin to one save: the sav:… token an earlier answer printed
limitNo
worldNo
outletsNobyproducts allowed out as products instead of sunk
allow_sinksNo
per_resourceNoraw resource to price per unit in; omit = the one the routes share

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changedv0.3.0
    • removedInput schema / properties / allow_sinks / title
      Removed value: -"Allow Sinks"
    • 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 / item / title
      Removed value: -"Item"
    • removedInput schema / properties / limit / description
      Removed value: -"max rows (hard cap 25)"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • removedInput schema / properties / outlets / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / outlets / description
      Added value: +"byproducts allowed out as products instead of sunk"
    • addedInput schema / properties / outlets / items
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / outlets / title
      Removed value: -"Outlets"
    • addedInput schema / properties / outlets / type
      Added value: +[
      +  "array",
      +  "null"
      +]
    • removedInput schema / properties / per_resource / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / per_resource / description
      Added value: +"raw resource to price per unit in; omit = the one the routes share"
    • removedInput schema / properties / per_resource / title
      Removed value: -"Per Resource"
    • addedInput schema / properties / per_resource / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / rate / title
      Removed value: -"Rate"
    • 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: -"compare_recipe_optionsArguments"
  2. Changed1 schema field 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"
      +}
  3. First observedv0.1.0

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare this a safe, read-only, idempotent, closed-world query, so the description's job is narrower. It adds real behavioral context: each route is solved end to end (with a worked example chain) and the ranking incorporates raw cost, buildings, net power, and byproducts. It does not disclose output shape, truncation via `limit`, or ranking tie-breaks.

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 front-loaded sentences with no filler; the ranking criteria come first and the sibling contrast closes it. The 'Crude -> Alt HOR -> Diluted Fuel' example is dense domain jargon but earns its place by illustrating the end-to-end solving behavior.

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?

Without an output schema the description must convey what comes back, and it only implies a ranked list. For a 9-parameter tool at 33% schema coverage, it leaves save/world/as_of scoping, `rate`, `allow_sinks`, and ranking output shape unexplained, so it is minimum-viable rather than complete.

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 33%, so the description must carry the burden, yet it only gestures at concepts already documented in the schema (`per_resource` as 'raw per unit', `outlets` as 'byproducts allowed out'). It says nothing about the undocumented parameters `rate`, `save`, `world`, `allow_sinks`, or `limit`, leaving most inputs ambiguous.

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 and resource ('Rank whole routes to make an item by cost') and enumerates the cost dimensions ranked (raw per unit, buildings, net power, byproducts). It also explicitly distinguishes itself from the sibling `alternates_for_item`, which 'only lists recipes', so the agent can separate the two without reading schemas.

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

Usage Guidelines4/5

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

Gives a clear use context (full end-to-end route comparison with cost ranking) and names the alternative tool `alternates_for_item` plus the condition that separates them. There is no explicit statement of when this tool is inappropriate (e.g. single-item lookup vs multi-route comparison), which keeps it below a 5.

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