Skip to main content
Glama

Get postflop action range

get_postflop_range
Read-onlyIdempotent

The range a player takes one flop action with, from a solved pack: hand-class weights ("AA:1,AKs:0.42,...", same format as the preflop ranges) after every earlier flop action on the path. path ends in the action whose range you want, e.g. ["Check", "Bet 1.8", "Call 1.8"] for the check-call range. Bet-size tree. "33" = 33% pot on the flop, then 75% pot on the turn and river, plus all-in. "75" = 75% pot on every street, plus all-in. Compact and full detail apply to the other range tools; this returns the action range itself.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
handNoOptional exact combo (AsKh) or hand class (AKs) for one frequency instead of reading the whole range.
packYesPack id from list_postflop_packs
pathYesFlop actions ending in the action whose range you want
treeYesBet-size tree. "33" = 33% pot on the flop, then 75% pot on the turn and river, plus all-in. "75" = 75% pot on every street, plus all-in. PLO5 packs are solved on "33" only.
boardYesFlop, e.g. "3h 3d 2s"
minFreqNoDrop classes at or below this weight. Default 0.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
handNoThe requested hand, when one was asked for.
packNoPack id the range was read from, after tree resolution.
pathNoFlop actions, ending in the action asked for.
treeNoBet-size tree, "33" or "75".
boardNoCanonical board as stored in the pack.
errorNoPresent instead of a payload when the request named something that does not exist. No figure is estimated in its place.
rangeNoHand-class weights as "AA:1,AKs:0.42,…", the preflop range format.
actionNoThe action whose range this is.
summaryNoWhat the compact range left out, so nothing looks complete when it is sampled.
weightsNoHand class to frequency. An omitted class has weight 0.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / hand / description
      Added value: +"Optional exact combo (AsKh) or hand class (AKs) for one frequency instead of reading the whole range."
    • addedInput schema / properties / minFreq / description
      Added value: +"Drop classes at or below this weight. Default 0."
    • addedInput schema / properties / tree / description
      Added value: +"Bet-size tree. \"33\" = 33% pot on the flop, then 75% pot on the turn and river, plus all-in. \"75\" = 75% pot on every street, plus all-in. PLO5 packs are solved on \"33\" only."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "The range a player takes one flop action with, as hand-class weights.",
      +  "properties": {
      +    "action": {
      +      "description": "The action whose range this is.",
      +      "type": "string"
      +    },
      +    "board": {
      +      "description": "Canonical board as stored in the pack.",
      +      "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"
      +    },
      +    "hand": {
      +      "description": "The requested hand, when one was asked for.",
      +      "properties": {
      +        "frequency": {
      +          "description": "Reach-weighted frequency from 0 to 1.",
      +          "type": "number"
      +        },
      +        "hand": {
      +          "description": "Hand or class the frequency belongs to.",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "pack": {
      +      "description": "Pack id the range was read from, after tree resolution.",
      +      "type": "string"
      +    },
      +    "path": {
      +      "description": "Flop actions, ending in the action asked for.",
      +      "items": {
      +        "description": "One flop action.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "range": {
      +      "description": "Hand-class weights as \"AA:1,AKs:0.42,…\", the preflop range format.",
      +      "type": "string"
      +    },
      +    "summary": {
      +      "description": "What the compact range left out, so nothing looks complete when it is sampled.",
      +      "properties": {
      +        "classes": {
      +          "description": "Postflop: hand classes with reach at the node.",
      +          "type": "integer"
      +        },
      +        "matchingHands": {
      +          "description": "plo5: classes that take the action before the cut.",
      +          "type": "integer"
      +        },
      +        "minFreq": {
      +          "description": "plo5: the frequency floor applied.",
      +          "type": "number"
      +        },
      +        "mixedHands": {
      +          "description": "Classes strictly between 0.005 and 0.995.",
      +          "type": "integer"
      +        },
      +        "mixedInReturned": {
      +          "description": "plo5: mixed classes among the returned rows.",
      +          "type": "integer"
      +        },
      +        "nonzeroHands": {
      +          "description": "Hand classes with a frequency above 0.",
      +          "type": "integer"
      +        },
      +        "omitted": {
      +          "description": "Rows dropped by the compact cut.",
      +          "type": "integer"
      +        },
      +        "pureHands": {
      +          "description": "Classes at frequency 0.995 or higher.",
      +          "type": "integer"
      +        },
      +        "pureInReturned": {
      +          "description": "plo5: pure classes among the returned rows.",
      +          "type": "integer"
      +        },
      +        "returned": {
      +          "description": "Rows in this response.",
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "tree": {
      +      "description": "Bet-size tree, \"33\" or \"75\".",
      +      "type": "string"
      +    },
      +    "weights": {
      +      "additionalProperties": {
      +        "description": "Action frequency from 0 to 1.",
      +        "type": "number"
      +      },
      +      "description": "Hand class to frequency. An omitted class has weight 0.",
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds useful behavioral context – the hand-class weight return format and how the path accumulates prior actions – but says nothing about pagination, cost, or failure modes for an invalid path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is reasonably front-loaded, but the tree explanation ('33' = 33% pot on the flop...) restates the schema's tree description almost verbatim, duplicating structured data rather than adding new information. A sentence could be trimmed without loss.

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?

With an output schema present the return shape needn't be described, and annotations carry the safety profile. Between the path example and tree semantics, the agent has enough to call a 6-param tool correctly; only explicit sibling routing is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds real value with a concrete path example (['Check','Bet 1.8','Call 1.8']) and distinguishes the tree enum behavior ('33' vs '75'), which helps the agent construct valid values beyond reading the schema.

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 verb and resource ('the range a player takes one flop action with, from a solved pack') and clarifies it returns the action range itself rather than the compact/full-detail ranges of the other range tools. It differentiates from siblings only loosely ('the other range tools'), so it falls just short of a 5.

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 path-accumulation semantics ('after every earlier flop action on the path') and the worked example imply when to use it, but the description never names a concrete alternative tool or states an explicit when-not-to-use condition versus get_range or get_postflop_node. 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources