Skip to main content
Glama

List postflop packs

list_postflop_packs
Read-onlyIdempotent

Every solved postflop pack: preflop line, positions (OOP vs IP), stack, pot, the bet-size trees it is solved under, and the solved boards. Boards use the spaced form ("3h 3d 2s"). NLHE packs list sizingTrees: "75" (75% pot every street, the pack id itself) and "33" (33% pot on the flop, then 75%, under the <pack>-flop33 id); every postflop tool accepts either tree's packId. PLO5 packs (ids starting plo5-) solve one 33% flop tree, flop decisions only. Compact output lists board names per pack. Pass pack (the 75% id or the -flop33 id) for that tree's per-board detail and per-flop exploitability where the index publishes a number. Missing exploitability is omitted, never estimated. Pass variant to list only NLHE or PLO5 packs. Call this before get_postflop_node.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
packNoOne pack id (75% id or the -flop33 id): per-board detail and that tree's exploitability
detailNoResponse detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
variantNoOnly packs of this game: nlhe (hold'em) or plo5 (five-card Omaha)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hintNoHow to narrow, page, or widen the same query.
packsNoPacks matching `variant` and `pack`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Solved postflop packs and their boards.",
      +  "properties": {
      +    "hint": {
      +      "description": "How to narrow, page, or widen the same query.",
      +      "type": "string"
      +    },
      +    "packs": {
      +      "description": "Packs matching `variant` and `pack`.",
      +      "items": {
      +        "description": "One solved pack.",
      +        "properties": {
      +          "actionEvCoverage": {
      +            "description": "How action EV is reconstructed, and for how many boards.",
      +            "type": "object"
      +          },
      +          "boardCount": {
      +            "description": "Solved boards in the pack.",
      +            "type": "integer"
      +          },
      +          "boards": {
      +            "description": "Board names in the pack list, or per-board detail when one `pack` was requested.",
      +            "items": {
      +              "anyOf": [
      +                {
      +                  "description": "Board in spaced form, e.g. \"3h 3d 2s\".",
      +                  "type": "string"
      +                },
      +                {
      +                  "description": "One solved board.",
      +                  "properties": {
      +                    "actionEv": {
      +                      "description": "Whether per-action EV can be reconstructed here.",
      +                      "type": "object"
      +                    },
      +                    "board": {
      +                      "description": "Board in spaced form.",
      +                      "type": "string"
      +                    },
      +                    "exploitabilityPct": {
      +                      "description": "Published exploitability as a percent of the pot. Omitted when the index has no number.",
      +                      "type": "number"
      +                    },
      +                    "exploitabilityTree": {
      +                      "description": "Which tree the exploitability belongs to.",
      +                      "type": "string"
      +                    },
      +                    "iterations": {
      +                      "description": "Published solver iterations.",
      +                      "type": "integer"
      +                    },
      +                    "queryable": {
      +                      "description": "Whether nodes can be walked.",
      +                      "type": "boolean"
      +                    },
      +                    "river": {
      +                      "description": "Whether the river is solved.",
      +                      "type": "boolean"
      +                    },
      +                    "trees": {
      +                      "description": "Trees this board is solved under.",
      +                      "items": {
      +                        "description": "\"75\" or \"33\".",
      +                        "type": "string"
      +                      },
      +                      "type": "array"
      +                    }
      +                  },
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "type": "array"
      +          },
      +          "effStackBb": {
      +            "description": "Effective stack behind, in big blinds.",
      +            "type": "number"
      +          },
      +          "exploitability": {
      +            "description": "\"published\" or \"not available\" for this tree. Never estimated.",
      +            "type": "string"
      +          },
      +          "generatedAt": {
      +            "description": "When the pack was generated.",
      +            "type": "string"
      +          },
      +          "hasEv": {
      +            "description": "Whether combos carry EV.",
      +            "type": "boolean"
      +          },
      +          "id": {
      +            "description": "Pack id to pass as `pack`.",
      +            "type": "string"
      +          },
      +          "ipPos": {
      +            "description": "In-position seat.",
      +            "type": "string"
      +          },
      +          "oopPos": {
      +            "description": "Out-of-position seat.",
      +            "type": "string"
      +          },
      +          "potBb": {
      +            "description": "Starting pot in big blinds.",
      +            "type": "number"
      +          },
      +          "preflopLine": {
      +            "description": "Preflop line the pack starts from.",
      +            "type": "string"
      +          },
      +          "queryableBoards": {
      +            "description": "Boards whose nodes can be walked.",
      +            "type": "integer"
      +          },
      +          "sizingTrees": {
      +            "description": "Bet-size trees; either packId is accepted by every postflop tool.",
      +            "items": {
      +              "description": "One bet-size tree of this pack.",
      +              "properties": {
      +                "betSizing": {
      +                  "description": "What the tree bets on each street.",
      +                  "type": "string"
      +                },
      +                "boards": {
      +                  "description": "Boards solved under the tree.",
      +                  "type": "integer"
      +                },
      +                "missing": {
      +                  "description": "Boards the tree does not cover.",
      +                  "items": {
      +                    "description": "A board absent from this tree.",
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "packId": {
      +                  "description": "Pack id that addresses this tree.",
      +                  "type": "string"
      +                },
      +                "tree": {
      +                  "description": "\"75\" or \"33\".",
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "stackBb": {
      +            "description": "Starting stack in big blinds.",
      +            "type": "number"
      +          },
      +          "title": {
      +            "description": "Human title.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial domain behavior on top: pack-id conventions for the 75% vs '-flop33' trees, the PLO5 single-tree restriction, and the policy that missing exploitability is omitted rather than estimated. It also discloses that 'compact' removes bulk maps, which materially affects what an agent receives.

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 opening sentence is well front-loaded with the full content of a pack, and nearly every clause carries information. However, the remainder is a dense run-on that mixes parameter semantics and output-mode behavior into one block, which would benefit from structure.

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

Completeness5/5

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

An output schema exists, so return values need not be explained; the description nonetheless clarifies the compact/full distinction and exploitability omission. For a filtered-list tool with 100% schema coverage and clear annotations, nothing an agent needs to call it correctly 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. The description goes beyond the schema by explaining what the `pack` ids actually mean (75% id vs `<pack>-flop33`), that every postflop tool accepts either tree's packId, and what detail levels retain or drop, adding real domain semantics the schema cannot express.

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 ('Every solved postflop pack') and enumerates exactly what each entry contains (preflop line, positions, stack, pot, sizing trees, solved boards). It is clearly distinguishable from sibling list/get tools and explicitly positions itself relative to get_postflop_node.

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 strong usage direction: 'Call this before get_postflop_node' establishes the workflow, and it explains how to use `variant` and `pack` to narrow the listing. It does not state when this tool should be skipped in favor of a sibling list tool (e.g., list_datasets), so it stops short of explicit when-not guidance.

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