Skip to main content
Glama

search_resource_nodes

Read-onlyIdempotent

Find resource nodes by region, resource, purity, kind, or distance, and filter to free or tapped nodes so you can choose where to build next.

Instructions

Resource nodes as fields (clusters within 200 m, by yield), nodes (one row each) or nearest (by distance from near=).

sources= is a list of node selectors; locations union, filters intersect; omit for the whole map: north|south|east|west|northeast|..., region:, grid:X3Y4, node:, pin:, near:@<radius_m>, bbox:x1,y1,x2,y2 (metres), resource:, purity:, kind:; all in a filter means no filter. Printed node_ids are reusable as node:. Water has no nodes: asking for it lists fracking satellites, the bodies already pumped and sea level.

Input Schema

NameRequiredDescriptionDefault
kindNonode | well_sat | geyser | all
nearNo'x,y' (m), 'me' or a factory; @<radius_m> keeps what is within; show=nearest needs it; adds distances
saveNo
showNofields | nodes | nearestfields
as_ofNopin to one save: the sav:… token an earlier answer printed
limitNo
worldNo
offsetNo
purityNopure | normal | impure | all
statusNofree | tapped | all; only_free=true means free
sourcesNo
resourceNo
only_freeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed39 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 / group
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "retired -- write show= instead",
      -  "title": "Group"
      -}
    • removedInput schema / properties / kind / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / kind / title
      Removed value: -"Kind"
    • addedInput schema / properties / kind / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / limit / description
      Removed value: -"max rows (hard cap 25)"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • removedInput schema / properties / mode
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "retired -- write show= instead",
      -  "title": "Mode"
      -}
    • removedInput schema / properties / near / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • changedInput schema / properties / near / description
      Previous value: -"origin for show=nearest: 'x,y' in metres, 'me', or a factory name"New value: +"'x,y' (m), 'me' or a factory; @<radius_m> keeps what is within; show=nearest needs it; adds distances"
    • removedInput schema / properties / near / title
      Removed value: -"Near"
    • addedInput schema / properties / near / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedInput schema / properties / offset / minimum
      Added value: +0
    • removedInput schema / properties / offset / title
      Removed value: -"Offset"
    • removedInput schema / properties / only_free / title
      Removed value: -"Only Free"
    • removedInput schema / properties / purity / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / purity / title
      Removed value: -"Purity"
    • addedInput schema / properties / purity / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / resource / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / resource / title
      Removed value: -"Resource"
    • addedInput schema / properties / resource / 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 / show / title
      Removed value: -"Show"
    • removedInput schema / properties / sources / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / sources / items
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / sources / title
      Removed value: -"Sources"
    • addedInput schema / properties / sources / type
      Added value: +[
      +  "array",
      +  "null"
      +]
    • removedInput schema / properties / status / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / status / title
      Removed value: -"Status"
    • addedInput schema / properties / status / 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_resource_nodesArguments"
  2. Changed1 schema field changedv0.2.0
    • addedInput schema / properties / status
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "free | tapped | all; only_free=true means free",
      +  "title": "Status"
      +}
  3. Changed11 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"
      +}
    • changedInput schema / properties / group / description
      Previous value: -"deprecated alias for mode"New value: +"retired -- write show= instead"
    • addedInput schema / properties / kind / description
      Added value: +"node | well_sat | geyser | all"
    • addedInput schema / properties / mode / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / mode / default
      Previous value: -"fields"New value: +null
    • changedInput schema / properties / mode / description
      Previous value: -"fields | nodes | nearest"New value: +"retired -- write show= instead"
    • removedInput schema / properties / mode / type
      Removed value: -"string"
    • changedInput schema / properties / near / description
      Previous value: -"origin for mode=nearest: 'x,y' in metres, 'me', or a factory name"New value: +"origin for show=nearest: 'x,y' in metres, 'me', or a factory name"
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "title": "Offset",
      +  "type": "integer"
      +}
    • addedInput schema / properties / purity / description
      Added value: +"pure | normal | impure | all"
    • addedInput schema / properties / show
      Added value: +{
      +  "default": "fields",
      +  "description": "fields | nodes | nearest",
      +  "title": "Show",
      +  "type": "string"
      +}
  4. First observedv0.1.0

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds meaningful behavior beyond annotations: sources union and filters intersect, printed node_ids are reusable, near adds distances, and water has no nodes.

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?

The description is compact and front-loads the three output modes before explaining selectors. It is dense and somewhat cryptic, but nearly every phrase carries useful operational information.

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?

For a complex 13-parameter search tool with no output schema, the description covers the core query modes and source syntax reasonably well. It still omits details about pagination behavior, returned fields, and several parameters, so it is only minimally complete.

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 only 46%, so the description must carry substantial parameter meaning. It does explain the complex sources selector and near/show behavior well, but leaves several of the 13 parameters, including save, world, limit, offset, status, and only_free, largely or entirely unaddressed.

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?

The description clearly states that the tool returns resource nodes in three modes: clustered fields, one-row-per-node, or nearest-by-distance. It is specific about the resource and output shape, but does not distinguish it from sibling search/map tools such as show_on_map or factory_map.

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?

It provides usage details for parameters, including that sources can be omitted for the whole map and that show=nearest requires near. However, it gives no explicit guidance on when to choose this tool over sibling tools, leaving tool selection implied.

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