PokerData

io.github.hft-studio由 GitHub 帳號 hft-studio 發布v1.0.4更新於 Oct 24, 2026

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

已驗證Streamable HTTP可網頁執行金融資料與分析AI 與機器學習

概覽

AI 產生的概覽

提供 GTO 撲克求解器資料——NLHE 與 PLO 翻前範圍、翻後策略與 EV,讓助理用真實頻率回答撲克策略問題。

可以做什麼
  • 查詢涵蓋範圍、資料集、樹狀文件與翻後牌組,並確認是否公布可利用度
  • 查詢 NLHE 與 PLO 各遊戲與籌碼深度的翻前範圍、決策節點、局面與牌桌設定
  • 走訪已求解的翻後節點與範圍,解釋特定組合、彙整牌面結構並比較兩種策略
  • 檢視已上傳的牌局、場次、錦標賽成績與對手資料,含 HUD 比率與漏洞筆記
  • 提出並查看資料或功能請求,排入單挑翻後求解工作
  • 取得託管上傳連結,或上傳少量牌譜文字
適用情境
適合希望助理回答具體撲克策略問題(開池範圍、防守頻率、翻後路線),或想用求解器結果檢視自己上傳的牌局與場次的情況。
執行需求
使用遠端 Streamable HTTP 端點,或對僅支援 stdio 的用戶端以 npx 執行 npm 套件 pokerdata-mcp。策略與牌局工具需要 pdk_ API 金鑰,透過 POKERDATA_API_KEY 環境變數或 Authorization Bearer 標頭提供,也支援 OAuth 登入。沒有金鑰時僅工具清單與涵蓋/文件工具可用。有免費 Starter 金鑰;付費方案依呼叫次數或資料量計費。
安裝前請注意
策略、翻後、教練與求解佇列工具需要 POKERDATA_API_KEY 或 Authorization 憑證,用量與 REST 共用同一額度。上傳牌譜會把個人對局資料送到託管服務。求解工作因未設定派送與計費而一直維持待處理。部分工具在資料不足時會明確表示無法提供,而非估算。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 PokerData,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.hft-studio%2Fpokerdata/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "pokerdata": {
      "type": "http",
      "url": "https://pokerdata.io/api/mcp"
    }
  }
}

README

PokerData MCP: GTO poker solver data for AI agents

PokerData serves GTO solver strategy for no-limit hold'em and pot-limit Omaha as JSON, over an MCP server and a REST API. Point Claude, Cursor or any MCP client at it and ask "what does UTG open at 100bb?" or "how does the BB defend vs a BTN open?" and the agent gets the solver's real frequencies and EVs, not a guess.

  • Endpoint: https://pokerdata.io/api/mcp (Streamable HTTP, stateless)
  • Free without a key: the tool list and the coverage and docs tools
  • Strategy data: a pdk_ key from pokerdata.io/app/api. A free Starter key (25 calls or 50 MB a month, no card) unlocks every data tool. Claude and other OAuth clients can sign in instead of pasting a key.

This repository holds setup instructions, a small stdio bridge for clients that only speak stdio, examples and sample data. The data and the server are hosted at pokerdata.io.

What's covered

GameFormatStacksData
No-limit hold'em 6-max (nl)Cash, 5% rake, 0.5bb cap20, 30, 40, 50, 70, 100, 150, 200bbEvery preflop decision node, frequency and EV per hand class (169)
NLHE tournament 8-max (nlmtt8)Chip EV, 1bb BB ante10 to 300bbPreflop
NLHE tournament 8-max, classic ante (nlh8-hydra)Chip EV, 0.1bb ante10, 20, 30, 60bbPreflop
Pot-limit Omaha 6-max (plo)Cash12 to 200bbPreflop, suit-grouped classes
PLO 9-max (plo9)Cash60, 100bbPreflop
PLO5 6-max (plo5)Cash, 1.2bb ante100bbPreflop and postflop
NLHE heads-up postflopSingle-raised, 3-bet and 4-bet pots100bbSolved flops with turns and rivers, per-combo strategy and EV, two bet-size trees

list_games and list_postflop_packs return the live coverage, so an agent never has to trust this table. Not covered: ICM, PKO, multiway postflop, tournament postflop. Those requests come back as explicit "unsupported" rather than a cash-game stand-in.

Set it up

[Add to Cursor] [Install in VS Code] [Install in VS Code Insiders]

The buttons install the hosted server. Strategy tools need a pdk_ key (the free Starter key works): VS Code asks for it when it starts the server, and Cursor reads it from the POKERDATA_API_KEY environment variable.

Claude (claude.ai and Claude Desktop)

Open Settings → Connectors → Add custom connector, name it PokerData and paste https://pokerdata.io/api/mcp as the URL, then sign in with your PokerData account when Claude asks. Your plan's allowance applies, the free Starter allowance included.

Claude Code

sh
claude mcp add --transport http pokerdata https://pokerdata.io/api/mcp \  --header "Authorization: Bearer pdk_YOUR_KEY"

Cursor (~/.cursor/mcp.json)

This is the same config the button installs, and the one in .mcp.json. Set POKERDATA_API_KEY in your environment, or replace ${env:POKERDATA_API_KEY} with your key.

json
{  "mcpServers": {    "pokerdata": {      "url": "https://pokerdata.io/api/mcp",      "headers": { "Authorization": "Bearer ${env:POKERDATA_API_KEY}" }    }  }}

Claude Desktop and other stdio clients

json
{  "mcpServers": {    "pokerdata": {      "command": "npx",      "args": ["-y", "pokerdata-mcp"],      "env": { "POKERDATA_API_KEY": "pdk_YOUR_KEY" }    }  }}

Without env, only the tool list and the coverage and docs tools answer. The bridge in bin/pokerdata-mcp.js has no dependencies and only forwards JSON-RPC to the hosted endpoint. Claude Desktop can also add https://pokerdata.io/api/mcp directly as a custom connector.

Plain HTTP

sh
curl -s https://pokerdata.io/api/mcp -H 'Content-Type: application/json' \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_node","arguments":{"game":"nl","stack":100,"history":"UTG"}}}'

More in examples/: a live example for every MCP tool, real-world scenarios (NL and PLO ranges, the npm bridge, raw JSON-RPC, Node, Python, client configs, REST) and a smoke test, all with captured responses.

Tools

GroupToolsKey
Coverage and docsget_started, list_games, list_postflop_packs, list_datasets, get_tree_docs, get_exploitabilityNot needed
Preflopget_range, get_node, list_spots, get_config, get_range_metadataNeeded, 6-max NL included; the free Starter key works
Postflopget_postflop_node, get_postflop_rangeNeeded
Coachingexplain_combo, get_board_report, compare_strategiesNeeded
Your handshand, session and opponent tools, hand uploadAny key, free trial included; never counts against your allowance
Solve queueenqueue_solve, get_queued_solve, list_queued_solves, list_library_solutionsNeeded

Preflop spots are action paths such as UTG_60%_HJ_Call (NLHE) or UTG_Open_HJ_3B (PLO). EVs are in small blinds. Responses are compact by default; pass detail: "full" for complete maps. Full contract: docs.pokerdata.io/ranges.

Every tool's full definition — name, title, description, input schema, output schema and behaviour annotations — exactly as the server returns it from tools/list, is in tools.json. Every tool also returns structuredContent matching its output schema alongside the text result.

Plans

PlanPriceWhat you get
No keyFreeTool list, coverage and docs tools
StarterFree key, no cardEvery data tool, 25 calls or 50 MB a month. Personal use
Hobbyist$10/monthEvery data tool, 10,000 calls or 200 MB a month, 5 requests a second. Personal use
Pro$100/monthEvery game and all postflop, 250,000 calls or 5 GB a month. Personal use
Enterprise$250/monthEverything in Pro, commercial use allowed, 5 million calls or 100 GB a month, higher rate limit
CustomContact usRedistribution, bulk export, licences for model training, SLAs

REST and MCP share one meter. Keys and plans: pokerdata.io/app/api.

Sample data

samples/ has two real responses, so you can check the format before connecting anything:

  • nl-6max-100bb-utg-first-in.json: UTG's first decision at 100bb, every action with per-hand frequency and EV.
  • nl-6max-100bb-utg-open-range.json: UTG's opening range at 100bb.

How the solves were made

Preflop cash trees come from established commercial solver packs. The tournament and postflop solves come from our own engine, validated against an independent reference solve of the same game tree — the comparison, position by position, is at pokerdata.io/methodology.

Nothing is estimated to fill a gap. Postflop exploitability is published per board (list_postflop_packs with a pack) and omitted where the solve does not carry it. No preflop dataset publishes exploitability, convergence or iteration counts, and get_exploitability says so instead of returning a number.

Related

  • pokerdata.io: download the raw solver packs, browse ranges free
  • Poker Study AI: an AI coach that reviews your hands against the same solves

Code in this repository is MIT licensed. Sample data is provided for evaluation under the pokerdata.io terms; see samples/LICENSE.md.

來源:README.md,提交 6103aef

工具

32

get_started

Get started

Start here with a new user. Returns the short set of questions to ask them (game, format, stakes, goal), a menu of what PokerData can do with the tools for each, what is free without a key, and how to file a feature or data request. Free, no key needed.

無需輸入參數。

submit_request

File a feature or data request

File a feature request or data request for the user, after telling them their question isn't covered and they agree. kind "data" is missing coverage (a game, format, stack depth, spot, or solve); kind "feature" is a missing capability (a tool, filter, export, or endpoint). Free with any key; the PokerData team reads every one.

輸入參數kind必填detailssummary必填question

list_my_requests

List my requests

List the feature and data requests this account has filed, newest first, with their status. Free with any key.

輸入參數limit

list_games

List covered games

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.

輸入參數detail

get_range

Get preflop range

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).

輸入參數game必填handspot必填limitstack必填detailminFreq

get_node

Get preflop decision node

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.

輸入參數fullgame必填handstack必填detailhistory必填minFreq

get_config

Get table configuration

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 }).

輸入參數game必填stack必填

list_spots

Search preflop spots

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".

輸入參數game必填depthlimitstack必填detailoffsetcontains

list_postflop_packs

List postflop packs

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.

輸入參數packdetailvariant

get_postflop_node

Get postflop solver node

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`.

輸入參數pack必填pathboard必填combolimitdetail

explain_combo

Explain a postflop combo

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.

輸入參數pack必填pathboard必填combo必填anteBbformatobjectivecomparisonLimit

get_board_report

Report on board textures

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.

輸入參數pack必填pathanteBbformatfiltersobjectiveboardLimitrepresentativeLimit

compare_strategies

Compare two strategies

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.

輸入參數anteBbdomain必填formatbaseline必填objectivecomboLimitcomparison必填

list_datasets

List solved datasets

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

無需輸入參數。

get_tree_docs

Get tree documentation

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.

輸入參數dataset必填

get_range_metadata

Get range index metadata

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.

輸入參數game必填path必填stack必填

get_exploitability

Get preflop exploitability

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.

輸入參數game必填

get_postflop_range

Get postflop action range

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.

輸入參數handpack必填path必填tree必填board必填minFreq

find_hands

Find my hands

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.

輸入參數sort必填limit必填filtergame_typesession_idtable_sizegto_vs_3bet_bucketgto_plo5_rfi_bucket

get_hand_results

Get my results curve

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.

輸入參數max_points必填session_id

get_session_summary

Summarize a session

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.

輸入參數session_id必填

list_my_sessions

List my sessions

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.

輸入參數limit必填game_type

get_tournament_results

Get my tournament results

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.

輸入參數limit必填

list_my_opponents

List my opponents

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

輸入參數heronamesort必填limit必填game_typemin_hands必填

get_opponent_notes

Get opponent notes

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

輸入參數opponent_id必填

get_opponent_limp_range

Get an opponent's limp range

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.

輸入參數limit必填positiongame_typesession_idtable_sizeopponent_id

enqueue_solve

Record a solve request

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.

輸入參數pot必填tagsboard必填title必填ip_rangeadd_allinbet_sizesoop_rangeiterationseffective_stack必填max_aggressions

get_queued_solve

Get a queued solve

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

輸入參數queue_id必填

list_queued_solves

List my queued solves

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

輸入參數limit必填

list_library_solutions

List my saved solutions

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

輸入參數limit必填

upload_hand_history

Upload a hand history

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.

輸入參數text必填filename

版本歷史

2
  1. v1.0.4最新Oct 17, 2026
  2. v1.0.1Oct 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分