Give your AI agent real poker solver data with MCP A developer on the Pokerai API team released @pokerai/mcp, an MCP server that connects AI chat clients to presolved poker strategy data for 6-max No-Limit Hold'em, so models explain solver output rather than inventing advice. The server runs over stdio via npx and exposes five tools — preflop_versions, preflop_strategy, preflop_range, flop_tree and flop_node — returning action frequencies and decision trees for spots like ace-king on a queen-high flop. The developer notes the tool is intended for study and post-hand review, since real-time assistance at live tables is prohibited. Ask a chat model what to do with ace-king on a queen-high flop and you get a confident paragraph. It might even be right, but you can't tell where the numbers came from, because there aren't any. In this tutorial we connect an MCP client to a presolved strategy API, so the frequencies come from solver output and the model's job is to explain them. We'll use @pokerai/mcp , a small MCP server for 6-max No-Limit Hold'em. Disclosure: I work on Pokerai API, the product used here. This post was drafted with AI assistance, and I checked it against real tool output. What this is for: studying, training tools and reviewing hands that have ended. Real-time assistance RTA at real-money tables is prohibited, so keep it away from live games. The server runs over stdio through npx , so there's nothing to install globally. In Claude Code: claude mcp add pokerai -e POKERAI API KEY=gto your key here -- npx -y @pokerai/mcp In Claude Desktop or Cursor, use the same command in your MCP config: { "mcpServers": { "pokerai": { "command": "npx", "args": "-y", "@pokerai/mcp" , "env": { "POKERAI API KEY": "gto your key here" } } } } You get five tools: | Tool | What it returns | Cost | |---|---|---| | preflop versions | available strategy sets | free | | preflop strategy | action frequencies for one hand | 1 lookup | | preflop range | the whole 169-hand range for a spot | 1 lookup | | flop tree | starting ranges and every decision node | 1 lookup | | flop node | the strategy at one node | free | The outputs below are from calling the published package with an MCP client, not from a model transcript. What your model writes around them will vary. The tool results won't change unless the data does. The spot: 100bb, 6-max. The button opens, the big blind calls, and the flop is Q♠ 7♣ 2♦. We hold A♥ K♦. { "tool": "preflop strategy", "arguments": { "hole cards": "AhKd", "hero": "BTN", "preflop actions": { "position": "SB", "action": "small blind", "amount": 0.5 }, { "position": "BB", "action": "big blind", "amount": 1 } , "preflop version": "6max RC 100bb 200NL" } } { "hole cards": "AhKd", "situation": "RFI", "strategy": { "action": "raise", "frequency": 1, "amount bb": 3, "sizing pot": 0.8 } } Always raise, to 3bb. Not much to discuss, so on to the flop. { "tool": "flop tree", "arguments": { "board": "Qs7c2d", "pot type": "SRP", "positions": { "hero": "BTN", "raiser": "BTN", "caller": "BB" }, "flop version": "6max RC 100bb 200NL" } } The response gives the pot 6.5bb , the effective stack 97bb , both starting ranges and 16 nodes. Trimmed: { "pot": 6.5, "effective stack": 97, "node count": 16, "nodes": { "node": "root", "is hero": false, "token": "eyJ..." }, { "node": "root/CHECK", "is hero": true, "token": "eyJ..." }, { "node": "root/CHECK/BET 2", "is hero": false, "token": "eyJ..." } } Note the two fields, because this is the easiest mistake to make: node is the path, such as root/CHECK . BB acts first, so root is BB's decision and token is what you pass to flop node , in its argument called { "tool": "flop node", "arguments": { "node": "