Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

PokerData

REMOTE · POKERDATA.IO · 2 COMPONENTS

GTO poker solver data: NLHE/PLO preflop ranges, postflop strategy, EV. 6-max NL preflop free.

81 Trust /100

Last scanned (9 hours ago)

Scores higher than 87% of remote servers

Reachable. Last reached 18 Oct 2026.

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security97
Transport & Reachability100
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 6309 tokens (~210/item across 30 items; 29 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management7
  • Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 29 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 18 Oct 26 +7
    • Authorization: partial → pass ▲ security
    • First check of Authorization: pass security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “upload_hand_history” is now declared destructive security
    • Tool “enqueue_solve” is now declared destructive security
  • 17 Oct 26 +9
    • Authorization: unverified → partial ▲ security
    • Tool “get_session_summary” rewrote its description, which is the text the model reads security
    • Schema quality: 180 → 210 ▼ functional
    • Tool coverage: 54% → 100% ▲ functional
    • Stability: unverified → 0.03 ▲ functional
    • Tool “explain_combo” now declares an output schema ▲ functional
    • Tool “find_hands” now declares an output schema ▲ functional
    • Tool “get_board_report” now declares an output schema ▲ functional
    • Tool “get_config” now declares an output schema ▲ functional
    • Tool “get_exploitability” now declares an output schema ▲ functional
    • Tool “get_hand_results” now declares an output schema ▲ functional
    • Tool “get_node” now declares an output schema ▲ functional
    • Tool “get_opponent_limp_range” now declares an output schema ▲ functional
    • Tool “get_opponent_notes” now declares an output schema ▲ functional
    • Tool “get_postflop_node” now declares an output schema ▲ functional
    • Tool “get_postflop_range” now declares an output schema ▲ functional
    • Tool “get_queued_solve” now declares an output schema ▲ functional
    • Tool “get_range” now declares an output schema ▲ functional
    • Tool “get_range_metadata” now declares an output schema ▲ functional
    • Tool “get_session_summary” now declares an output schema ▲ functional
    • Tool “get_tournament_results” now declares an output schema ▲ functional
    • Tool “get_tree_docs” now declares an output schema ▲ functional
    • Tool “get_upload_link” now declares an output schema ▲ functional
    • Tool “list_datasets” now declares an output schema ▲ functional
    • Tool “list_games” now declares an output schema ▲ functional
    • Tool “list_library_solutions” now declares an output schema ▲ functional
    • Tool “list_my_opponents” now declares an output schema ▲ functional
    • Tool “list_my_sessions” now declares an output schema ▲ functional
    • Tool “list_postflop_packs” now declares an output schema ▲ functional
    • Tool “list_queued_solves” now declares an output schema ▲ functional
    • Tool “list_spots” now declares an output schema ▲ functional
    • Tool “upload_hand_history” now declares an output schema ▲ functional
    • Tool “compare_strategies” now declares an output schema ▲ functional
    • Tool “enqueue_solve” now declares an output schema ▲ functional
    • First check of Tool coverage: 100 functional
    • “enqueue_solve” reworded the description of “pot” cosmetic
    • “enqueue_solve” reworded the description of “tags” cosmetic
    • “enqueue_solve” reworded the description of “title” cosmetic
    • “find_hands” reworded the description of “filter” cosmetic
    • “find_hands” reworded the description of “game_type” cosmetic
    • “find_hands” reworded the description of “gto_plo5_rfi_bucket” cosmetic
    • “find_hands” reworded the description of “gto_vs_3bet_bucket” cosmetic
    • “find_hands” reworded the description of “limit” cosmetic
    • “find_hands” reworded the description of “session_id” cosmetic
    • “find_hands” reworded the description of “sort” cosmetic
    • “find_hands” reworded the description of “table_size” cosmetic
    • “get_board_report” reworded the description of “filters” cosmetic
    • “get_exploitability” reworded the description of “game” cosmetic
    • “get_hand_results” reworded the description of “max_points” cosmetic
    • “get_hand_results” reworded the description of “session_id” cosmetic
    • “get_opponent_limp_range” reworded the description of “game_type” cosmetic
    • “get_opponent_limp_range” reworded the description of “limit” cosmetic
    • “get_opponent_limp_range” reworded the description of “opponent_id” cosmetic
    • “get_opponent_limp_range” reworded the description of “position” cosmetic
    • “get_opponent_limp_range” reworded the description of “session_id” cosmetic
    • “get_opponent_limp_range” reworded the description of “table_size” cosmetic
    • “get_opponent_notes” reworded the description of “opponent_id” cosmetic
    • “get_postflop_range” reworded the description of “hand” cosmetic
    • “get_postflop_range” reworded the description of “minFreq” cosmetic
    • “get_postflop_range” reworded the description of “tree” cosmetic
    • “get_queued_solve” reworded the description of “queue_id” cosmetic
    • “get_range_metadata” reworded the description of “game” cosmetic
    • “get_range_metadata” reworded the description of “stack” cosmetic
    • “get_session_summary” reworded the description of “session_id” cosmetic
    • “get_tournament_results” reworded the description of “limit” cosmetic
    • “list_library_solutions” reworded the description of “limit” cosmetic
    • “list_my_opponents” reworded the description of “game_type” cosmetic
    • “list_my_opponents” reworded the description of “hero” cosmetic
    • “list_my_opponents” reworded the description of “min_hands” cosmetic
    • “list_my_opponents” reworded the description of “name” cosmetic
    • “list_my_opponents” reworded the description of “sort” cosmetic
    • “list_my_sessions” reworded the description of “game_type” cosmetic
    • “list_my_sessions” reworded the description of “limit” cosmetic
    • “list_queued_solves” reworded the description of “limit” cosmetic
    • “upload_hand_history” reworded the description of “filename” cosmetic
    • “list_my_opponents” reworded the description of “limit” cosmetic
    • “compare_strategies” reworded the description of “baseline” cosmetic
    • “compare_strategies” reworded the description of “comparison” cosmetic
    • “enqueue_solve” reworded the description of “add_allin” cosmetic
    • “enqueue_solve” reworded the description of “bet_sizes” cosmetic
    • “enqueue_solve” reworded the description of “board” cosmetic
    • “enqueue_solve” reworded the description of “effective_stack” cosmetic
    • “enqueue_solve” reworded the description of “ip_range” cosmetic
    • “enqueue_solve” reworded the description of “iterations” cosmetic
    • “enqueue_solve” reworded the description of “max_aggressions” cosmetic
    • “enqueue_solve” reworded the description of “oop_range” cosmetic
    • Tool “explain_combo” changed its title: Explain a postflop combo cosmetic
    • Tool “find_hands” changed its title: Find my hands cosmetic
    • Tool “get_board_report” changed its title: Report on board textures cosmetic
    • Tool “get_config” changed its title: Get table configuration cosmetic
    • Tool “get_exploitability” changed its title: Get preflop exploitability cosmetic
    • Tool “get_hand_results” changed its title: Get my results curve cosmetic
    • Tool “get_node” changed its title: Get preflop decision node cosmetic
    • Tool “get_opponent_limp_range” changed its title: Get an opponent's limp range cosmetic
    • Tool “get_opponent_notes” changed its title: Get opponent notes cosmetic
    • Tool “get_postflop_node” changed its title: Get postflop solver node cosmetic
    • Tool “get_postflop_range” changed its title: Get postflop action range cosmetic
    • Tool “get_queued_solve” changed its title: Get a queued solve cosmetic
    • Tool “get_range” changed its title: Get preflop range cosmetic
    • Tool “get_range_metadata” changed its title: Get range index metadata cosmetic
    • Tool “get_session_summary” changed its title: Summarize a session cosmetic
    • Tool “get_tournament_results” changed its title: Get my tournament results cosmetic
    • Tool “get_tree_docs” changed its title: Get tree documentation cosmetic
    • Tool “get_upload_link” changed its title: Get the hand-upload link cosmetic
    • Tool “list_datasets” changed its title: List solved datasets cosmetic
    • Tool “list_games” changed its title: List covered games cosmetic
    • Tool “list_library_solutions” changed its title: List my saved solutions cosmetic
    • Tool “list_my_opponents” changed its title: List my opponents cosmetic
    • Tool “list_my_sessions” changed its title: List my sessions cosmetic
    • Tool “list_postflop_packs” changed its title: List postflop packs cosmetic
    • Tool “list_queued_solves” changed its title: List my queued solves cosmetic
    • Tool “list_spots” changed its title: Search preflop spots cosmetic
    • Tool “upload_hand_history” changed its title: Upload a hand history cosmetic
    • Tool “compare_strategies” changed its title: Compare two strategies cosmetic
    • Tool “enqueue_solve” changed its title: Record a solve request cosmetic
  • 16 Oct 26 65

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 18 Oct 2026 · Probed https://pokerdata.io/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=pokerdata.io CN=YR2,O=Let's Encrypt,C=US 18 Sept 2026 17 Dec 2026 RSA 2048 SHA256-RSA 5f206cc5db5a032984e58c4e3bb165bee64
SANs: pokerdata.io
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of pokerdata.io. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
io. present 57355 8 Verified
pokerdata.io. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="Authentication required for this tool", resource_metadata="https://pokerdata.io/.well-known/oauth-protected-resource/api/mcp", scope="mcp"

Bearer error="invalid_token", error_description="Authentication required for this tool", resource_metadata="https://pokerdata.io/.well-known/oauth-protected-resource/api/mcp", scope="mcp"
Header Value
strict-transport-security max-age=63072000

Protected resource metadata

Document https://pokerdata.io/.well-known/oauth-protected-resource/api/mcp
Retrieved Yes
Resource https://pokerdata.io/api/mcp
Authorisation server https://pokerdata.io

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://pokerdata.io/api/mcp Verified 200
http (plaintext) http://pokerdata.io/api/mcp HTTPS enforced 308 https://pokerdata.io/api/mcp
MCP tools · 29 exposed · ~6,082 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
compare_strategies ~324

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.

NameTypeReqDescription
anteBbnumber–Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage.
baselineobjectyesThe 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.
comboLimitnumber–Maximum largest-changing combos for aggregate postflop comparisons (default 12, maximum 50)
comparisonobjectyesThe 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.
domainstringyesPreflop contexts use game/stack/history/hand. Postflop contexts use pack/board/path/combo.
formatstring–Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported.
objectivestring–Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage.
NameTypeReqDescription
contextobject|null–Canonical context the answer belongs to (variant, format, stacks, positions, board, path). Null when the request is unsupported.
coverageobject–Whether the request was answered exactly, aggregated, or refused as out of coverage.
resultobject|null–Both snapshots, the per-action frequency and EV deltas, and the largest combo changes for postflop comparisons. Null when the request is unsupported.
schemaVersionstring–Envelope version, currently "1.0".
warningsarray–Caveats that must survive into any answer built on this result.

No examples provided.

enqueue_solve ~275

Record a heads-up postflop solve request. Required: title, board, pot (bb), effective_stack (bb). The job stays pending: solver dispatch and billing are not configured, so this does not start a solve.

NameTypeReqDescription
add_allinboolean–Add an all-in branch alongside the bet sizes.
bet_sizesarray–Bet sizes as fractions of the pot, e.g. [0.33, 0.75].
boardstringyesBoard to solve, e.g. "3h 3d 2s".
effective_stacknumberyesEffective stack behind, in big blinds.
ip_rangestring–In-position range in the same weights format.
iterationsinteger–Requested solver iterations, 50 to 5000.
max_aggressionsinteger–Raises allowed per street, 1 to 4.
oop_rangestring–Out-of-position range as hand-class weights, e.g. "AA:1,AKs:0.42". Defaults are left to the solver config.
potnumberyesStarting pot in big blinds.
tagsarray–Free-form tags stored with the job.
titlestringyesLabel for the job, 1 to 120 characters.
NameTypeReqDescription
boardstring–Board for the requested solve.
createdAtstring–ISO timestamp the job was recorded.
dispatchstring–Always "not_configured".
effective_stacknumber–Effective stack in big blinds.
potnumber–Pot in big blinds.
queue_idinteger–Id for get_queued_solve.
reasonstring–Why the job does not start a solve.
solution_idstring|null–Always null while dispatch is disabled.
statusstring–"pending", "running", "done", or "failed".
titlestring–Title given when the job was recorded.

No examples provided.

explain_combo ~336

Preferred tool for exact NLHE postflop hand questions. Returns a canonical context, exact action mix, action EV/loss when available, made-hand and draw classification, blocker facts, and same-rank-class suit comparisons. The server computes evidence; the agent should phrase causality as interpretation.

NameTypeReqDescription
anteBbnumber–Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage.
boardstringyesBoard in spaced form, e.g. "6s 4h 2s"
combostringyesRequired exact two-card combo, e.g. As5s
comparisonLimitnumber–Maximum same-rank-class suit comparisons (default 6, maximum 12)
formatstring–Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported.
objectivestring–Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage.
packstringyesPack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or "<pack>-flop33" for 33%.
patharray–Exact childSegment path from get_postflop_node, e.g. ["Check", "Bet 5.5"]. Empty for the root.
NameTypeReqDescription
contextobject|null–Canonical context the answer belongs to (variant, format, stacks, positions, board, path). Null when the request is unsupported.
coverageobject–Whether the request was answered exactly, aggregated, or refused as out of coverage.
resultobject|null–Recommendation, made-hand and draw classification, blockers, the exact action mix with EV, and same-rank-class suit comparisons. Null when the request is unsupported.
schemaVersionstring–Envelope version, currently "1.0".
warningsarray–Caveats that must survive into any answer built on this result.

No examples provided.

find_hands ~261

Find hands the account has uploaded. Returns hand_id, session_id, handAt, position, cards, game, board, potType, street lines, and netBb. Solver grade buckets are not filled. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.

NameTypeReqDescription
filter––Hand-level filters, all optional.
game_type––Only hands of this game type. Matches hole-card count.
gto_plo5_rfi_bucket––Solver grade bucket for PLO5 raise-first-in. Grades are not computed, so any value matches nothing.
gto_vs_3bet_bucket––Solver grade bucket for hero's action vs a 3-bet. Grades are not computed, so any value matches nothing rather than inventing a frequency.
limitintegeryesHands to return, 1 to 50.
session_id––Only hands from this upload session (see list_my_sessions).
sortstringyesRow order: newest first, largest win first, or largest loss first (the default).
table_size––Only hands dealt at tables of this many seats.
NameTypeReqDescription
gtostring–Always "not graded": solver grades are not attached.
gtoNotestring–Why a solver-grade filter matches nothing.
handsarray–Matching hands, sorted as requested.
hintstring–Where to upload hands when the account has none.
returnedinteger–Hands in this response.
totalinteger–Matching hands before the limit.

No examples provided.

get_board_report ~314

Preferred tool for board-texture heuristics. Aggregates action frequencies and range/action composition across solved boards in one postflop pack. Results explicitly report sample breadth and use equal weight per board.

NameTypeReqDescription
anteBbnumber–Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage.
boardLimitnumber–Maximum matching boards to analyze (default and maximum 50)
filtersobject–Texture filters applied to the pack's solved boards. All optional; omit for every board.
formatstring–Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported.
objectivestring–Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage.
packstringyesPack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or "<pack>-flop33" for 33%.
patharray–Exact childSegment path from get_postflop_node, e.g. ["Check", "Bet 5.5"]. Empty for the root.
representativeLimitnumber–Maximum representative boards returned (default 12, maximum 20)
NameTypeReqDescription
contextobject|null–Canonical context the answer belongs to (variant, format, stacks, positions, board, path). Null when the request is unsupported.
coverageobject–Whether the request was answered exactly, aggregated, or refused as out of coverage.
resultobject|null–Action frequencies and range composition aggregated across solved boards, with equal weight per board, plus representative boards. Null when the request is unsupported.
schemaVersionstring–Envelope version, currently "1.0".
warningsarray–Caveats that must survive into any answer built on this result.

No examples provided.

get_config ~452

Table for one preflop game and stack, in big blinds: seats, stacks, blinds (sb 0.5, bb 1), ante, antePostedBy, stackIncludesAnte, openSizes (first-in raise-to), evUnit, evBaseline. Convergence is not published. stackIncludesAnte is true: the named depth is the starting stack and the 1bb BB ante is posted from it. openSizes at 40bb is open 2.2x (listing 2.2bb; node decodes code 40034 to 2.19bb) and SB 2.8x (2.8bb). 10bb is all-in/fold versus 50bb stacks, so stacks is null there. evs on nodes are small blinds relative to fold. Example: get_config({ game: "nlmtt8", stack: 40 }).

NameTypeReqDescription
gamestringyes"nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/…
stacknumberyesStack depth in big blinds, e.g. 40
NameTypeReqDescription
antenumber–Ante in big blinds.
antePostedBystring|null–Seat that posts the ante.
blindsobject–Blinds in big blinds.
evBaselinestring–What EV is measured against, "fold".
evUnitstring–EV unit, "sb".
gamestring–Game id.
openSizesobject–First-in raise-to sizes, by seat, with label and sizeBb.
schemaVersionnumber–Payload version, 1.
seatsarray–Seats in action order.
stacknumber–Stack depth in big blinds.
stackIncludesAnteboolean–True when the named depth already contains the ante.
stacksarray|null–Starting stacks per seat. Null where the depth is solved against a different stack (10bb all-in/fold versus 50bb).
unitsobject–Unit labels for stack, stacks, blinds, ante, openSizes, and evs.

No examples provided.

get_exploitability ~84

Preflop exploitability for a game. No preflop dataset publishes exploitability, convergence, or iteration counts. The answer is not available; this tool never fills in a number.

NameTypeReqDescription
gamestringyesPreflop game id to report on, e.g. "nl" or "nlmtt8". Any known game answers "not available".
NameTypeReqDescription
availableboolean–Always false.
convergencenumber|null–Always null.
datasetstring|null–Dataset the game maps to, or null when unknown.
exploitabilitynumber|null–Always null: no figure is published or estimated.
gamestring–Game id, echoed.
iterationsnumber|null–Always null.
reasonstring–Why no number is returned.
statusstring–Always "not available".

No examples provided.

get_hand_results ~119

Per-hand cumulative results for a winnings curve. `points` is [{ hand, bb }], oldest to newest, downsampled. Pass session_id for one session. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.

NameTypeReqDescription
max_pointsintegeryesPoints on the curve after downsampling, 2 to 200.
session_id––Only this upload session's hands. Omit for the whole account.
NameTypeReqDescription
hintstring–Where to upload hands when the account has none.
netBbnumber–Final cumulative result in big blinds.
pointsarray–Downsampled curve, oldest to newest.
totalHandsinteger–Hands behind the curve.

No examples provided.

get_node ~504

Actions available at a decision node. `history` is an action path ending in the position about to act, e.g. "UTG_60%_HJ". sizeBb is the raise-to in big blinds and sizePctPot is the percent of the pot after calling (nlmtt8 40bb Open 40034 is 2.19bb; the pack label is 2.2x). evs are small blinds relative to fold. Compact mode returns action totals; add `hand` for its exact mixed strategy. full=true is full=1: all 169 hold'em hands with explicit 0, and no invented EVs.

NameTypeReqDescription
detailstring–Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
fullboolean–Hold'em only. When true, each action includes all 169 hands with weight 0 where the bundle omitted the hand. EVs stay only where the bundle scored them.
gamestringyes"nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/…
handstring–Optional hand/class
historystringyesAction path ending in a position
minFreqnumber–Trim per-action ranges
stacknumberyesStack depth in big blinds
NameTypeReqDescription
actionsarray–Actions at the node.
actorstring–Position to act at this node.
continuingCombosnumber–Combos that continue past this node.
continuingHandsnumber–Hand classes that continue past this node.
evBaselinestring–What EV is measured against, "fold".
evUnitstring–EV unit, "sb".
gamestring–Preflop game id, e.g. "nl" or "nlmtt8".
handstring–The requested hand, when one was asked for.
hintstring–How to narrow, page, or widen the same query.
historystring–Action path ending in the acting position.
schemaVersionnumber–Payload version, 1.
spotstring–Action path ending in an action, echoed from the request.
stacknumber–Stack depth in big blinds.
unitsobject–Unit labels: stack and sizeBb in bb, evs in sb.
versionnumber–Dataset version where the bundle publishes one.

No examples provided.

get_opponent_limp_range ~149

Shown-hand first-in limp range: 169-class counts of hole cards villains showed after an open limp. Pass position for one seat. Sample is showdown-only. This is not a solver range.

NameTypeReqDescription
game_type––Only hands of this game type.
limitintegeryesHole-card classes to return, most frequent first, 1 to 169.
opponent_id––Only this opponent's limps (see list_my_opponents). Omit for every tracked villain.
position––Only limps from these seats.
session_id––Only hands from this upload session.
table_size––Only hands dealt at tables of this many seats.
NameTypeReqDescription
classesarray–Observed classes, most frequent first. Counts, not solver frequencies.
classesByPositionobject–Seat label to that seat's observed classes.
notestring–That the sample is showdown-only and the counts are observations.
sampleinteger–Shown limped hands behind the counts.

No examples provided.

get_opponent_notes ~44

Leak notes computed from uploaded hands for one opponent, with the sample size on each line.

NameTypeReqDescription
opponent_idstringyesOpponent id from list_my_opponents.
NameTypeReqDescription
display_namestring–Screen name as written in the history.
errorstring–Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.
notesarray–Notes, or a single line saying the sample is too small.
opponent_idstring–Opponent id, echoed.

No examples provided.

get_postflop_node ~266

One postflop solver node: the acting player's strategy for every hand class, the legal next segments, board, reach and the reach-weighted action split. Walk deeper by appending a returned childSegment (an action like "Bet 5.5" or a runout like "deal:7c") to `path`.

NameTypeReqDescription
boardstringyesBoard in spaced form, e.g. "3h 3d 2s"
combostring–Optional exact combo, e.g. AsKh (PLO5: five cards, as listed in the node's hands)
detailstring–Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
limitnumber–Maximum representative compact combos (default 40, maximum 200)
packstringyesPack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or "<pack>-flop33" for 33%.
patharray–Segments from the root, e.g. ["Check", "Bet 5.5"]. Empty for the root node.
NameTypeReqDescription
actingPlayerinteger|null–0 for out of position, 1 for in position.
actionFreqsarray–Full detail: aggregate frequency per action.
actionsarray–Actions at the node with their reach-weighted frequency.
board––Board at this node.
childSegmentsarray–Append one of these to `path` to walk deeper.
columnsarray–Column order for `hands`: combo, reach, frequencies, evBb, evLossBb, actionEvBb.
combostring–The requested combo, when one was asked for.
handsarray–Compact rows in `columns` order, or the full per-combo strategy objects in full detail.
hintstring–How to narrow, page, or widen the same query.
nodeobject|null–Full detail: the stored node. Null at a chance point, where runouts hang directly under the path.
patharray|null–Segments walked from the root to this node.
potBbnumber|null–Pot at this node in big blinds.
reacharray–Full detail: the acting player's per-combo reach.
summaryobject–What the compact range left out, so nothing looks complete when it is sampled.

No examples provided.

get_postflop_range ~333

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.

NameTypeReqDescription
boardstringyesFlop, e.g. "3h 3d 2s"
handstring–Optional exact combo (AsKh) or hand class (AKs) for one frequency instead of reading the whole range.
minFreqnumber–Drop classes at or below this weight. Default 0.
packstringyesPack id from list_postflop_packs
patharrayyesFlop actions ending in the action whose range you want
treestringyesBet-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.
NameTypeReqDescription
actionstring–The action whose range this is.
boardstring–Canonical board as stored in the pack.
errorstring–Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.
handobject–The requested hand, when one was asked for.
packstring–Pack id the range was read from, after tree resolution.
patharray–Flop actions, ending in the action asked for.
rangestring–Hand-class weights as "AA:1,AKs:0.42,…", the preflop range format.
summaryobject–What the compact range left out, so nothing looks complete when it is sampled.
treestring–Bet-size tree, "33" or "75".
weightsobject–Hand class to frequency. An omitted class has weight 0.

No examples provided.

get_queued_solve ~55

Look up one queued solve for this account. status is pending, running, done, or failed. solution_id is null until a worker exists.

NameTypeReqDescription
queue_idintegeryesQueue id returned by enqueue_solve.
NameTypeReqDescription
boardstring–Board for the requested solve.
createdAtstring–ISO timestamp the job was recorded.
dispatchstring–Always "not_configured".
effective_stacknumber–Effective stack in big blinds.
potnumber–Pot in big blinds.
queue_idinteger–Id for get_queued_solve.
reasonstring–Why the job does not start a solve.
solution_idstring|null–Always null while dispatch is disabled.
statusstring–"pending", "running", "done", or "failed".
titlestring–Title given when the job was recorded.

No examples provided.

get_range ~497

The GTO range for one spot. `spot` is an action path of POSITION_ACTION pairs ending in the action whose range you want, e.g. NLHE cash "UTG_60%_HJ_Call", nlmtt8 "UTG_Open", or PLO "UTG_Open_HJ_3B". Add `hand` for one exact frequency and EV. Compact mode is default; PLO returns representative pure/mixed hands unless a hand is specified; plo5 returns the top hands by EV that take the action (limit up to 500 compact, 2000 full).

NameTypeReqDescription
detailstring–Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
gamestringyes"nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/…
handstring–Optional hand/class, e.g. AKs or (KA)(KA)
limitnumber–Maximum compact rows to return (default 120, maximum 500).
minFreqnumber–Drop hands at or below this weight (PLO ranges are large)
spotstringyesAction path ending in an action
stacknumberyesStack depth in big blinds, e.g. 100
NameTypeReqDescription
actionstring–plo5: the action the range belongs to.
actorstring–Position to act at this node.
columnsarray–Column order for `range`: hand, frequency, evSb.
combosnumber–Combos in the range.
evnumber|null–Full detail: EV of the requested hand in small blinds.
evSbnumber|null–EV of the requested hand in small blinds.
evsobject–Hand class to EV, only where the solved bundle scored the hand.
freqnumber–Full detail: frequency of the requested hand.
frequencynumber–Frequency of the requested hand, 0 to 1.
gamestring–Preflop game id, e.g. "nl" or "nlmtt8".
handstring–The requested hand, when one was asked for.
handsnumber–Hand classes in the range.
hintstring–How to narrow, page, or widen the same query.
historystring–Action path ending in the acting position.
kindstring–plo5: the action family.
rangearray–Compact rows in `columns` order.
spotstring–Action path ending in an action, echoed from the request.
stacknumber–Stack depth in big blinds.
summaryobject–What the compact range left out, so nothing looks complete when it is sampled.
versionnumber–Dataset version where the bundle publishes one.
weightsobject–Hand class to frequency. An omitted class has weight 0.

No examples provided.

get_range_metadata ~159

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.

NameTypeReqDescription
gamestringyesPreflop game id, e.g. "nl", "nl9", "nlmtt8", "nlh8-hydra", "plo", "plo9", "plo5", "plo6hu".
pathstringyesAction path, e.g. UTG_Open or LJ_Fold. Use (root) or empty for the plo5 root.
stacknumberyesStack depth in big blinds, e.g. 100.
NameTypeReqDescription
actorstring|null–Acting position read off the path.
datasetstring–Dataset the game maps to.
errorstring–Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.
gamestring–Game id, echoed.
matchstring–"bundle", "node", or "none".
notestring–What the match means, or that nothing was estimated.
pathstring–Action path, echoed.
preflopExploitabilitystring–Always "not available".
rowsarray–Matching index rows.
stacknumber–Stack depth in big blinds, echoed.

No examples provided.

get_session_summary ~164

One uploaded session's headline numbers: hero, game type, start and end times, hands played, net result in big blinds, and HUD rates (VPIP, PFR, 3-bet, open limp) as percentages with the sample size. Use it after list_my_sessions to report how a session went; use get_hand_results for its winnings curve and find_hands for individual hands. Returns an error for an unknown session id. Any key works, free trial included, and it never counts against the allowance. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.

NameTypeReqDescription
session_idstringyesSession id from list_my_sessions.
NameTypeReqDescription
endedAtstring|null–Last hand timestamp.
errorstring–Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.
game_typestring–Game type: "NLHE", "PLO", "PLO5", or "PLO6".
handsinteger–Hands in the session.
herostring–Hero name in the history.
hudobject–HUD rates over this session, as percentages.
idstring–Session id.
netBbnumber–Session result in big blinds.
startedAtstring|null–First hand timestamp.

No examples provided.

get_tournament_results ~89

MTT results imported from tournament summary files. Money is in cents. Hand histories are not a source of buy-ins or prizes. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.

NameTypeReqDescription
limitintegeryesTournament summaries to include, 1 to 500.
NameTypeReqDescription
buyInCentsnumber|null–Total buy-ins, or null when one buy-in is unknown.
itmPctnumber|null–Share of tournaments that cashed, 0 to 1, or null.
netProfitCentsnumber|null–Received minus buy-ins, or null when a buy-in is unknown.
notestring–Present when no tournament summaries have been uploaded.
receivedCentsnumber–Total prize money received.
recentarray–Tournaments, newest first.
roinumber|null–Return on investment as a ratio, or null.
tournamentsinteger–Tournament summaries counted.

No examples provided.

get_tree_docs ~88

Tree documentation for one dataset: coverage note from the shipped README and per-stack bundle or node counts from the shipped index. Does not read or modify range bytes.

NameTypeReqDescription
datasetstringyesDataset id from list_datasets, e.g. "nl/v2", "nl9", "nlmtt8", "plo", "plo9", "plo5", "plo6hu".
NameTypeReqDescription
coveragestring–Coverage row from the shipped README.
datasetstring–Dataset id, echoed.
errorstring–Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.
preflopExploitabilitystring–Always "not available".
sourcestring–File the coverage note came from.
stacksarray–Per-stack counts.

No examples provided.

get_upload_link ~58

Primary hand-upload path. Returns https://pokerdata.io/upload on this origin, with a short-lived signed token for the caller's account when signing is configured. Hand the URL to the user. Pasting histories into chat is the fallback.

Input schema present but exposes no named parameters.

NameTypeReqDescription
expiresAtstring|null–When the signed token expires, or null when unsigned.
primaryboolean–Always true: this is the primary upload path.
resourcestring–MCP resource URI that returns the same payload.
tokenAttachedboolean–Whether the URL carries a signed token for this account.
urlstring–URL to hand to the user, signed when signing is configured.

No examples provided.

list_datasets ~40

List preflop datasets in the shipped tree documentation (stacks, positions, whether each bundle was analyzed). Preflop exploitability is not available.

Input schema present but exposes no named parameters.

NameTypeReqDescription
datasetsarray–Documented datasets.
generatedstring–Date the documentation was generated.
preflopExploitabilitystring–Always "not available": no preflop dataset publishes it.
readmestring–How to read one dataset's write-up.
sourcestring–Where the documentation came from, "data/tree-docs".

No examples provided.

list_games ~294

Discover covered stack depths and positions. Call this before low-level preflop queries. "nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), "nlh8-hydra" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), "plo" = pot-limit Omaha 6-max cash (4-card), "plo5" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), "plo9" = pot-limit Omaha 9-max cash, "plo6hu" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only.

NameTypeReqDescription
detailstring–Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
NameTypeReqDescription
_coverageobject–Formats and objectives this server does and does not answer.

No examples provided.

list_library_solutions ~45

Finished postflop solutions saved for this account. None are marked done while dispatch is disabled.

NameTypeReqDescription
limitintegeryesSolutions to return, 1 to 50.
NameTypeReqDescription
notestring–Why no solution is marked done.
solutionsarray–Empty while solver dispatch is disabled.

No examples provided.

list_my_opponents ~160

Tracked opponents from uploaded hands. Each row has handCount, handsVsHero, and heroBb100Vs. Pass name to find one villain.

NameTypeReqDescription
game_type––Only hands of this game type, e.g. "NLHE" or "PLO".
hero––Only hands where this hero name was seated.
limitintegeryesOpponents to return, 1 to 500.
min_handsintegeryesDrop opponents seen in fewer hands than this.
name––Case-insensitive substring of the opponent's screen name.
sortstringyesRow order: most hands, most recent, or by hero's bb/100 against them (toughest = worst for hero).
NameTypeReqDescription
opponentsarray–Opponents, sorted as requested.

No examples provided.

list_my_sessions ~102

Recent uploaded sessions, newest first: id, hero, game type, dates, hands, and net result. game_type matches hole-card count. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.

NameTypeReqDescription
game_type––Only sessions containing this game type.
limitintegeryesSessions to return, 1 to 50.
NameTypeReqDescription
hintstring–Where to upload hands when the account has none.
sessionsarray–Sessions, newest first.

No examples provided.

list_postflop_packs ~317

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.

NameTypeReqDescription
detailstring–Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
packstring–One pack id (75% id or the -flop33 id): per-board detail and that tree's exploitability
variantstring–Only packs of this game: nlhe (hold'em) or plo5 (five-card Omaha)
NameTypeReqDescription
hintstring–How to narrow, page, or widen the same query.
packsarray–Packs matching `variant` and `pack`.

No examples provided.

list_queued_solves ~44

List this account's solver-queue jobs, newest first. Jobs are not dispatched.

NameTypeReqDescription
limitintegeryesJobs to return, 1 to 50.
NameTypeReqDescription
solvesarray–Queued jobs. None are dispatched.

No examples provided.

list_spots ~426

Search valid decision nodes for a stack depth, tagged by depth (1 = RFI, 2 = vs open, 3 = 3-bet pots, …). Compact mode is paginated; use depth, contains, and offset to narrow results without loading thousands of paths. plo9 has no spot index: walk it with get_node from history "UTG".

NameTypeReqDescription
containsstring–Optional case-insensitive history substring filter
depthnumber–Optional decision depth filter
detailstring–Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required.
gamestringyes"nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/…
limitnumber–Maximum compact rows to return (default 120, maximum 500).
offsetnumber–Compact pagination offset
stacknumberyesStack depth in big blinds
NameTypeReqDescription
gamestring–Game id.
hintstring–How to narrow, page, or widen the same query.
matchedinteger–Spots left after the depth and contains filters.
nextOffsetinteger|null–Offset for the next page, or null at the end.
offsetinteger–Offset this page started at.
returnedinteger–Spots in this page.
spotsarray–This page of decision nodes.
stacknumber–Stack depth in big blinds.
totalinteger–Spots in the dataset for this stack.

No examples provided.

upload_hand_history ~83

Secondary upload path for a small paste. Prefer get_upload_link and the hosted /upload page. Runs the same ingestion pipeline and returns hands parsed, tournaments parsed, and errors. Does not grade solver frequencies.

NameTypeReqDescription
filenamestring–Name to record for the paste. Defaults to "paste.txt".
textstringyesRaw hand history or tournament summary text.
NameTypeReqDescription
errorsarray–Parse errors, if any.
filenamestring–Filename recorded for the paste.
handsParsedinteger–Hands parsed.
persistedboolean–Always false: nothing is written to durable storage.
persistencestring–Where the hands live, "process_memory".
sessionIdstring|null–Session id for the stored hands, or null when nothing parsed.
tournamentsParsedinteger–Tournament summaries parsed.

No examples provided.

Install

How do I install the PokerData MCP server?

PokerData is a hosted endpoint at https://pokerdata.io/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · pokerdata.io

# add to Claude Code
claude mcp add --transport http hft-studio-pokerdata 'https://pokerdata.io/api/mcp'
Common questions

What is the PokerData MCP server?

PokerData is an MCP server listed in the public MCP registry as io.github.hft-studio/pokerdata. GTO poker solver data: NLHE/PLO preflop ranges, postflop strategy, EV. 6-max NL preflop free. This page covers its hosted endpoint (https://pokerdata.io/api/mcp).

Is the PokerData MCP server safe to use?

PokerData scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the PokerData MCP server expose?

PokerData exposes 29 tools: list_games, get_range, get_node, get_config, list_spots, and 24 more. Their descriptions and schemas cost roughly 6,082 tokens of context every time the server is loaded.

Does the PokerData MCP server require authentication?

Yes. PokerData asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the PokerData MCP server still maintained?

PokerData is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.