Skip to main content
Glama

Compare two strategies

compare_strategies
Read-onlyIdempotent

Preferred tool for differences between two preflop or postflop contexts. The server fetches both strategies and returns action-frequency/EV deltas plus the largest postflop combo changes, avoiding two large node payloads.

Input Schema

NameRequiredDescriptionDefault
anteBbNoRequested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage.
domainYesPreflop contexts use game/stack/history/hand. Postflop contexts use pack/board/path/combo.
formatNoRequested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported.
baselineYesThe context deltas are measured from. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo.
objectiveNoRequested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage.
comboLimitNoMaximum largest-changing combos for aggregate postflop comparisons (default 12, maximum 50)
comparisonYesThe context deltas are measured to. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo.

Output Schema

NameRequiredDescriptionDefault
resultNoBoth snapshots, the per-action frequency and EV deltas, and the largest combo changes for postflop comparisons. Null when the request is unsupported.
contextNoCanonical context the answer belongs to (variant, format, stacks, positions, board, path). Null when the request is unsupported.
coverageNoWhether the request was answered exactly, aggregated, or refused as out of coverage.
warningsNoCaveats that must survive into any answer built on this result.
schemaVersionNoEnvelope version, currently "1.0".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / baseline / properties / game / enum
      Previous value: -[
      -  "nl",
      -  "nl9",
      -  "nlmtt8",
      -  "nlh8-hydra",
      -  "plo",
      -  "plo5",
      -  "plo9",
      -  "plo6hu"
      -]New value: +[
      +  "nl",
      +  "nl9",
      +  "nlmtt8",
      +  "nlh8-hydra",
      +  "nlh8-icm",
      +  "nlhu",
      +  "plo",
      +  "plo5",
      +  "plo9",
      +  "plo6hu"
      +]
    • changedInput schema / properties / comparison / properties / game / enum
      Previous value: -[
      -  "nl",
      -  "nl9",
      -  "nlmtt8",
      -  "nlh8-hydra",
      -  "plo",
      -  "plo5",
      -  "plo9",
      -  "plo6hu"
      -]New value: +[
      +  "nl",
      +  "nl9",
      +  "nlmtt8",
      +  "nlh8-hydra",
      +  "nlh8-icm",
      +  "nlhu",
      +  "plo",
      +  "plo5",
      +  "plo9",
      +  "plo6hu"
      +]
  2. Changed15 schema fields changed
    • addedInput schema / properties / baseline / description
      Added value: +"The context deltas are measured from. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo."
    • addedInput schema / properties / baseline / properties / board / description
      Added value: +"Postflop only. Board in spaced form, e.g. \"3h 3d 2s\"."
    • addedInput schema / properties / baseline / properties / combo / description
      Added value: +"Postflop only. Exact two-card combo, e.g. As5s. Provide it in both contexts or neither."
    • addedInput schema / properties / baseline / properties / game / description
      Added value: +"Preflop only. Both sides must name the same game."
    • addedInput schema / properties / baseline / properties / hand / description
      Added value: +"Preflop only. One hand or class, e.g. AKs. Provide it in both contexts or neither; PLO comparisons require it."
    • addedInput schema / properties / baseline / properties / history / description
      Added value: +"Preflop only. Action path ending in the position about to act, e.g. \"UTG_60%_HJ\"."
    • addedInput schema / properties / baseline / properties / stack / description
      Added value: +"Preflop only. Stack depth in big blinds."
    • addedInput schema / properties / comparison / description
      Added value: +"The context deltas are measured to. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo."
    • addedInput schema / properties / comparison / properties / board / description
      Added value: +"Postflop only. Board in spaced form, e.g. \"3h 3d 2s\"."
    • addedInput schema / properties / comparison / properties / combo / description
      Added value: +"Postflop only. Exact two-card combo, e.g. As5s. Provide it in both contexts or neither."
    • addedInput schema / properties / comparison / properties / game / description
      Added value: +"Preflop only. Both sides must name the same game."
    • addedInput schema / properties / comparison / properties / hand / description
      Added value: +"Preflop only. One hand or class, e.g. AKs. Provide it in both contexts or neither; PLO comparisons require it."
    • addedInput schema / properties / comparison / properties / history / description
      Added value: +"Preflop only. Action path ending in the position about to act, e.g. \"UTG_60%_HJ\"."
    • addedInput schema / properties / comparison / properties / stack / description
      Added value: +"Preflop only. Stack depth in big blinds."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Coverage-first envelope: coverage and context describe the answer, result carries it.",
      +  "properties": {
      +    "context": {
      +      "description": "Canonical context the answer belongs to (variant, format, stacks, positions, board, path). Null when the request is unsupported.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "coverage": {
      +      "description": "Whether the request was answered exactly, aggregated, or refused as out of coverage.",
      +      "properties": {
      +        "analyzedBoards": {
      +          "description": "Boards actually read at the requested path.",
      +          "type": "integer"
      +        },
      +        "available": {
      +          "description": "What is published instead.",
      +          "type": "string"
      +        },
      +        "dataClass": {
      +          "description": "\"solver\", \"solver_aggregate\", or \"solver_comparison\".",
      +          "type": "string"
      +        },
      +        "generatedAt": {
      +          "description": "When the pack was generated.",
      +          "type": "string"
      +        },
      +        "hasEv": {
      +          "description": "Whether the pack ships per-combo EV.",
      +          "type": "boolean"
      +        },
      +        "matchingBoards": {
      +          "description": "Boards matching the texture filters.",
      +          "type": "integer"
      +        },
      +        "objective": {
      +          "description": "\"solver_ev\", \"cash_game_ev\", or \"chip_ev\".",
      +          "type": "string"
      +        },
      +        "omittedByLimit": {
      +          "description": "Matching boards dropped by boardLimit.",
      +          "type": "integer"
      +        },
      +        "reason": {
      +          "description": "Why the request is out of coverage.",
      +          "type": "string"
      +        },
      +        "requested": {
      +          "description": "The format, objective, ante, or pack that was asked for.",
      +          "type": "object"
      +        },
      +        "solveQuality": {
      +          "description": "Published exploitability and iteration counts. Omitted, never estimated, when the pack does not publish them.",
      +          "type": "object"
      +        },
      +        "source": {
      +          "description": "Pack, board, path, generation time, and solve quality.",
      +          "type": "object"
      +        },
      +        "status": {
      +          "description": "\"exact\", \"aggregated_report\", or \"unsupported\". Treat \"unsupported\" as a hard stop.",
      +          "type": "string"
      +        },
      +        "unavailableAtPath": {
      +          "description": "Selected boards with no node at the path.",
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "result": {
      +      "description": "Both snapshots, the per-action frequency and EV deltas, and the largest combo changes for postflop comparisons. Null when the request is unsupported.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "schemaVersion": {
      +      "description": "Envelope version, currently \"1.0\".",
      +      "type": "string"
      +    },
      +    "warnings": {
      +      "description": "Caveats that must survive into any answer built on this result.",
      +      "items": {
      +        "description": "One caveat about how the result may be used.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A4/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 behavior, so the description's job is added context — and it delivers: the server does the fetching for both sides and returns action-frequency/EV deltas plus the largest postflop combo changes. It does not mention unsupported-coverage error behavior, but that is documented per-parameter in the schema.

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

Conciseness5/5

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

Two sentences, zero waste, with the primary recommendation ('Preferred tool') front-loaded before the explanation of what the server returns.

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?

For a complex two-nested-object comparison tool with an output schema, the description covers what the tool does and what it returns at a high level, leaving type/constraint detail to the thorough schema. Minor gap: it does not flag the cross-side consistency rules (same game, matching hand/combo presence) that make calls fail, though those live in the schema.

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 100%, with enums and nested baseline/comparison objects fully documented in-schema. The description adds no parameter-level meaning (e.g. how baseline vs comparison asymmetry matters, or when comboLimit applies), so baseline 3 is appropriate.

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: computes differences between two preflop or postflop contexts. It also distinguishes itself functionally from the single-node siblings by noting it avoids fetching two large node payloads, though it never names those siblings (get_node / get_postflop_node) directly.

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?

'Preferred tool for differences between two preflop or postflop contexts' plus the note that it avoids two large node payloads implicitly tells the agent to use this instead of two separate node fetches. There is no explicit when-not guidance or named alternative, so it falls short of a 5.

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.