PokerData MCP Server
by hft-studioio.github.hft-studio/pokerdatav1.0.4
GTO poker solver data: NLHE/PLO preflop ranges, postflop strategy, EV. 6-max NL preflop free.
context tax
~11,149 tok/turn29 tools
security
pending
cold start
pending
freshness
pending
Our reading of PokerData, from the data
PokerData is an MCP server from hft-studio, listed in the official MCP Registry.
Its 29 tools add about 11,149 tokens to every model turn (measured 2026-10-19).
It runs either locally over stdio or as a hosted endpoint and needs one secret (POKERDATA_API_KEY); use a scoped, least-privilege key.
Install PokerData MCP server
Install in Claude Code
claude mcp add pokerdata -e POKERDATA_API_KEY='<pokerdata-api-key>' -- npx -y pokerdata-mcpInstall in Cursor
{
"mcpServers": {
"pokerdata": {
"command": "npx",
"args": [
"-y",
"pokerdata-mcp"
],
"env": {
"POKERDATA_API_KEY": "<pokerdata-api-key>"
}
}
}
}Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project).
Install in Claude Desktop
{
"mcpServers": {
"pokerdata": {
"command": "npx",
"args": [
"-y",
"pokerdata-mcp"
],
"env": {
"POKERDATA_API_KEY": "<pokerdata-api-key>"
}
}
}
}Settings → Developer → Edit Config (claude_desktop_config.json), then restart.
Install in VS Code
{
"servers": {
"pokerdata": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"pokerdata-mcp"
],
"env": {
"POKERDATA_API_KEY": "<pokerdata-api-key>"
}
}
}
}Add to .vscode/mcp.json in your workspace.
Install in Windsurf
{
"mcpServers": {
"pokerdata": {
"command": "npx",
"args": [
"-y",
"pokerdata-mcp"
],
"env": {
"POKERDATA_API_KEY": "<pokerdata-api-key>"
}
}
}
}Add to ~/.codeium/windsurf/mcp_config.json.
Configuration
| Variable | Required | Secret | Description |
|---|---|---|---|
| POKERDATA_API_KEY | — | yes | pdk_ API key from https://pokerdata.io/app/api. Optional: without it the 6-max NL cash preflop tools still work. |
Remote endpoints
- streamable-http
https://pokerdata.io/api/mcp
Context tax
Connecting this server adds ~11,149 tokens of tool definitions to every model turn (heavy, 29 tools). Measured 2026-10-19 via its hosted endpoint; o200k tokenizer, worst case for clients that load all tools up front. How we measure
| Model | Per 1,000 turns | With prompt caching |
|---|---|---|
| Claude Opus 5.5 | $44.60 | $2.23 |
| Claude Sonnet 5.5 | $22.30 | $2.23 |
| Claude Haiku 5.5 | $1.11 | — |
Input prices as of 2026-10-06. Excludes your own prompt and output.
Tools (29)
find_hands2,084 tokFind 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.
compare_strategies1,061 tokPreferred 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.
get_board_report615 tokPreferred 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.
get_node589 tokActions 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.
get_range585 tokThe 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).
get_opponent_limp_range515 tokShown-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.
get_config511 tokTable 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 }).
list_spots510 tokSearch 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".
get_postflop_range463 tokThe 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.
explain_combo424 tokPreferred 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.
enqueue_solve398 tokRecord 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.
list_postflop_packs360 tokEvery 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 exploitab
get_postflop_node327 tokOne 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`.
list_games319 tokDiscover 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" =
get_session_summary288 tokOne 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
list_my_opponents276 tokTracked opponents from uploaded hands. Each row has handCount, handsVsHero, and heroBb100Vs. Pass name to find one villain.
get_hand_results269 tokPer-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.
get_range_metadata193 tokIndex 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.
get_opponent_notes169 tokLeak notes computed from uploaded hands for one opponent, with the sample size on each line.
list_my_sessions168 tokRecent 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.
get_tournament_results124 tokMTT 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.
upload_hand_history115 tokSecondary 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.
get_tree_docs112 tokTree 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.
get_exploitability109 tokPreflop 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.
get_queued_solve84 tokLook up one queued solve for this account. status is pending, running, done, or failed. solution_id is null until a worker exists.
list_library_solutions80 tokFinished postflop solutions saved for this account. None are marked done while dispatch is disabled.
list_queued_solves79 tokList this account's solver-queue jobs, newest first. Jobs are not dispatched.
get_upload_link74 tokPrimary 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.
list_datasets56 tokList preflop datasets in the shipped tree documentation (stacks, positions, whether each bundle was analyzed). Preflop exploitability is not available.
Freshness
Not enough public signals yet to judge maintenance.
Last commit (default branch)
2026-10-17 · 2d ago · GitHub
Latest release
no data · GitHub
Package published
no data · npm/PyPI
Registry entry updated
2026-10-17 · 2d ago · official registry · v1.0.4
FAQ
›How do I install the PokerData MCP server in Claude Code?
Run: claude mcp add pokerdata -e POKERDATA_API_KEY='<pokerdata-api-key>' -- npx -y pokerdata-mcp. For Cursor, VS Code, Claude Desktop and Windsurf, use the install tabs above.
›Does PokerData require an API key?
Yes. It expects POKERDATA_API_KEY, of which 1 is a secret.
›Can I use PokerData as a remote (hosted) MCP server?
Yes — it offers both a hosted endpoint and a local stdio package.
›Is PokerData in the official MCP registry?
Yes, as io.github.hft-studio/pokerdata.
›How many tokens does PokerData add to my context?
Its tool definitions total about 11,149 tokens, resent on every turn.
Sources and method
- Official MCP Registry entry
- updated 2026-10-17
- GitHub repository
- fetched 2026-10-19
- Package registry (npm / PyPI)
- listed
- Tool list (tools/list), measured by us
- 2026-10-19
- Last checked against all sources
- 2026-10-19
The description, packages and links come from the maintainer's own published metadata. Token cost, security signals, freshness and the reading above are MCPSkillHub's own measurements; see the methodology. Spot an error? Request a correction or claim the listing.