Skip to main content
Glama

rank_unlocks

Read-onlyIdempotent

Rank locked alternate recipes by their impact on a saved factory plan: re-solve with each added and report the delta in plan units, flagging zero values and claimable hard-drive candidates.

Instructions

Value of each locked alternate recipe to THIS plan: re-solve with it added and report the delta in the plan's own units.

A zero delta is an answer. Deltas are an upper bound: a candidate needing an unbuilt machine is judged as if built, and the machine is named. Alternates on a pending hard drive are flagged as claimable now.

Input Schema

NameRequiredDescriptionDefault
planYesa saved plan's name or pin:N, or the solve: handle plan_factory printed
saveNo
as_ofNopin to one save: the sav:… token an earlier answer printed
limitNo
queryNoonly test alternates whose name matches
worldNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed37 schema fields changedv0.3.0
    • removedInput schema / properties / allow_sinks
      Removed value: -{
      -  "default": true,
      -  "title": "Allow Sinks",
      -  "type": "boolean"
      -}
    • 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 / clocks
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "type": "number"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Clocks"
      -}
    • removedInput schema / properties / exclude_recipes
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Exclude Recipes"
      -}
    • removedInput schema / properties / export_minimums
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": {
      -        "type": "number"
      -      },
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Export Minimums"
      -}
    • removedInput schema / properties / exports
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Exports"
      -}
    • removedInput schema / properties / extractor_clocks
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "type": "number"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Extractor Clocks"
      -}
    • removedInput schema / properties / limit / description
      Removed value: -"max rows (hard cap 25)"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • removedInput schema / properties / machine_cost_mw
      Removed value: -{
      -  "default": 5,
      -  "title": "Machine Cost Mw",
      -  "type": "number"
      -}
    • removedInput schema / properties / objective
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "omitted: min_raw_power with export_minimums, else max_mw",
      -  "title": "Objective"
      -}
    • removedInput schema / properties / only_free_nodes
      Removed value: -{
      -  "default": false,
      -  "title": "Only Free Nodes",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / only_recipes
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Only Recipes"
      -}
    • removedInput schema / properties / plan / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / plan / default
      Removed value: -null
    • changedInput schema / properties / plan / description
      Previous value: -"recall a saved plan by name"New value: +"a saved plan's name or pin:N, or the solve: handle plan_factory printed"
    • removedInput schema / properties / plan / title
      Removed value: -"Plan"
    • addedInput schema / properties / plan / type
      Added value: +"string"
    • removedInput schema / properties / query / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / query / title
      Removed value: -"Query"
    • addedInput schema / properties / query / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • 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 / search
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "retired -- write query= instead",
      -  "title": "Search"
      -}
    • removedInput schema / properties / sloops
      Removed value: -{
      -  "default": 0,
      -  "title": "Sloops",
      -  "type": "integer"
      -}
    • removedInput schema / properties / sources
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Sources"
      -}
    • removedInput schema / properties / target_item
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Target Item"
      -}
    • removedInput schema / properties / water_extractors
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "integer"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Water Extractors"
      -}
    • 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"
      +]
    • addedInput schema / required
      Added value: +[
      +  "plan"
      +]
    • removedInput schema / title
      Removed value: -"rank_unlocksArguments"
  2. Changed4 schema fields changedv0.2.0
    • addedInput schema / properties / objective / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / objective / default
      Previous value: -"max_mw"New value: +null
    • addedInput schema / properties / objective / description
      Added value: +"omitted: min_raw_power with export_minimums, else max_mw"
    • removedInput schema / properties / objective / type
      Removed value: -"string"
  3. Changed3 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 / query
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "only test alternates whose name matches",
      +  "title": "Query"
      +}
    • changedInput schema / properties / search / description
      Previous value: -"only test alternates whose name matches"New value: +"retired -- write query= instead"
  4. First observedv0.1.0

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already establish read-only/idempotent/non-destructive, and the description adds real behavioral context beyond that: deltas are an upper bound, candidates needing unbuilt machines are judged as if built and the machine is named, and hard-drive-pending alternates are flagged claimable now. It doesn't mention cost of the repeated re-solves or the shape of the ranked output.

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?

Front-loaded with the core definition followed by two short caveat blocks; every sentence carries information. The line-broken formatting is slightly ragged but not wasteful.

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?

With no output schema, the description should explain what the ranking looks like (ordering, units, tie handling with limit), which it only gestures at via 'the plan's own units'. The behavioral caveats are good, but the parameter/save-scope story and the output form are left incomplete for a six-parameter analysis tool.

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?

Six parameters at 50% schema coverage, and the description mentions none of them. The undocumented save, as_of, world, and limit fields get no explanation anywhere, and even the meaning of 'plan' (name vs pin:N vs solve: handle) is only conveyed by the schema, not the description.

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 action on a specific resource: it values each candidate locked alternate recipe relative to THIS plan by re-solving and reporting the delta. That is distinguishable from sibling listing tools like alternates_for_item or unlocked_recipes, though the description never names those siblings to make the contrast explicit.

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?

Usage is implied by phrases like 'locked alternate recipe' and 'THIS plan', and it gives interpretation guidance ('A zero delta is an answer'), but it never states when an agent should call this instead of alternates_for_item, hard_drives, or compare_recipe_options.

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