Skip to main content
Glama

Get range index metadata

get_range_metadata
Read-onlyIdempotent

Index metadata for one preflop game, stack, and path: bundle stats for hold'em/PLO bundles, or the matching node row for plo5 and plo6hu. Does not return a strategy and does not invent exploitability.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
gameYesPreflop game id, e.g. "nl", "nl9", "nlmtt8", "nlh8-hydra", "plo", "plo9", "plo5", "plo6hu".
pathYesAction path, e.g. UTG_Open or LJ_Fold. Use (root) or empty for the plo5 root.
stackYesStack depth in big blinds, e.g. 100.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
gameNoGame id, echoed.
noteNoWhat the match means, or that nothing was estimated.
pathNoAction path, echoed.
rowsNoMatching index rows.
actorNoActing position read off the path.
errorNoPresent instead of a payload when the request named something that does not exist. No figure is estimated in its place.
matchNo"bundle", "node", or "none".
stackNoStack depth in big blinds, echoed.
datasetNoDataset the game maps to.
preflopExploitabilityNoAlways "not available".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / game / description
      Added value: +"Preflop game id, e.g. \"nl\", \"nl9\", \"nlmtt8\", \"nlh8-hydra\", \"plo\", \"plo9\", \"plo5\", \"plo6hu\"."
    • addedInput schema / properties / stack / description
      Added value: +"Stack depth in big blinds, e.g. 100."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Index metadata for one preflop game, stack, and path. Never a strategy, and never an invented exploitability.",
      +  "properties": {
      +    "actor": {
      +      "description": "Acting position read off the path.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "dataset": {
      +      "description": "Dataset the game maps to.",
      +      "type": "string"
      +    },
      +    "error": {
      +      "description": "Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.",
      +      "type": "string"
      +    },
      +    "game": {
      +      "description": "Game id, echoed.",
      +      "type": "string"
      +    },
      +    "match": {
      +      "description": "\"bundle\", \"node\", or \"none\".",
      +      "type": "string"
      +    },
      +    "note": {
      +      "description": "What the match means, or that nothing was estimated.",
      +      "type": "string"
      +    },
      +    "path": {
      +      "description": "Action path, echoed.",
      +      "type": "string"
      +    },
      +    "preflopExploitability": {
      +      "description": "Always \"not available\".",
      +      "type": "string"
      +    },
      +    "rows": {
      +      "description": "Matching index rows.",
      +      "items": {
      +        "description": "One index row.",
      +        "properties": {
      +          "analyzed": {
      +            "description": "Whether the row was analyzed.",
      +            "type": "boolean"
      +          },
      +          "decisionNodes": {
      +            "description": "Decision nodes.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "edges": {
      +            "description": "Edges.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "format": {
      +            "description": "Format label.",
      +            "type": "string"
      +          },
      +          "freqSumChecks": {
      +            "description": "Frequency-sum checks run.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "freqSumOff": {
      +            "description": "Checks that came out off.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "gzBytes": {
      +            "description": "Compressed size in bytes.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "hasRaiseMeta": {
      +            "description": "Whether raise metadata is stored.",
      +            "type": "boolean"
      +          },
      +          "key": {
      +            "description": "Row key.",
      +            "type": "string"
      +          },
      +          "manifestEdgeCount": {
      +            "description": "Edge count from the manifest.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "maxActions": {
      +            "description": "Most actions on any node.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "position": {
      +            "description": "Acting position.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "stack": {
      +      "description": "Stack depth in big blinds, echoed.",
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuine extra context: the return payload branches by game type (bundle stats for hold'em/PLO vs. a node row for plo5/plo6hu) and it explicitly disclaims two things it does not do.

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 with the payload behavior front-loaded and the exclusions second; every clause carries information. Slightly dense with domain jargon ('bundle stats', 'plo6hu') but no filler.

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

Completeness4/5

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

A read-only, single-shot lookup with full schema descriptions, rich annotations, and an output schema, so return-format explanation is not needed. The description covers the one non-obvious element (game-dependent payload) and the boundary conditions; only an explicit sibling pointer is missing.

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 coverage is 100% with per-parameter examples ('nl', 'plo5', 'UTG_Open', '100'), so the schema already carries the meaning. The description restates the three required inputs without adding format or validity detail beyond them, so the baseline 3 applies.

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 concrete verb and resource ('Index metadata for one preflop game, stack, and path') and further specifies the output shape per game family (bundle stats vs. node row). It also fences itself off from the more obvious sibling by declaring it 'does not return a strategy', which is what get_range presumably does, though it never names that alternative.

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 clear when-not guidance by excluding strategy and exploitability outputs, which tells the agent when to prefer get_range or get_exploitability instead. However, no alternative tool is named and there is no positive statement of the use case that selects this tool over list_games/get_node.

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