poker-bankroll-tracker-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@poker-bankroll-tracker-mcpget my cash game stats for March 2026"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Poker Bankroll Tracker MCP + CLI
Low-context command-line interface and MCP (Model Context Protocol) server for the Poker Bankroll Tracker API.
The CLI is the preferred agent surface: it exposes the same sessions and stats capabilities without loading MCP tool schemas into context. The MCP server remains available for MCP clients.
Install
npm install -g poker-bankroll-tracker-mcpOr run directly with npx:
PBT_API_KEY="your-api-key" npx poker-bankroll-tracker-mcpAfter global install, both binaries are available:
poker-bankroll-tracker --help
poker-bankroll-tracker-mcpRelated MCP server: Intervals.icu MCP Server
Configuration
Environment Variable
Both the CLI and MCP server require PBT_API_KEY with your Poker Bankroll Tracker API key. The API uses Bearer auth and is rate-limited to 20 requests per 15 minutes.
export PBT_API_KEY="your-api-key"CLI
Command name: poker-bankroll-tracker
The CLI rejects unknown flags/arguments and validates every filter. Errors go to stderr with non-zero exit codes. --json emits strict JSON to stdout and no extra output.
sessions
Fetch poker sessions with calculated profit/loss.
poker-bankroll-tracker sessions [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--currency USD,EUR] [--type cashgame,tournament,...] [--staking] [--json]Flags:
Flag | Type / Format | Description |
|
| Start date filter, example |
|
| End date filter, example |
| comma-separated 3-letter ISO codes | Currency filter, example |
| comma-separated enum values | One or more of |
| boolean flag | Filter to staking sessions |
| boolean flag | Emit machine-parseable JSON |
Examples:
poker-bankroll-tracker sessions --start 2026-03-01 --end 2026-03-31
poker-bankroll-tracker sessions --type cashgame,tournament --currency USD,EUR
poker-bankroll-tracker sessions --staking --jsonstats
Compute aggregate statistics: total profit, win rate, average session profit, total sessions, breakdowns by location/stakes/month.
poker-bankroll-tracker stats [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--currency USD,EUR] [--type cashgame,tournament,...] [--staking] [--json]Flags are identical to sessions.
Examples:
poker-bankroll-tracker stats --start 2026-01-01
poker-bankroll-tracker stats --type cashgame --currency USD
poker-bankroll-tracker stats --staking --jsonCLI JSON Output
sessions --json returns the same formatted session objects as the MCP get_sessions tool, including computed profit and cash-game stakes when available.
stats --json returns the same aggregate object as the MCP get_stats tool:
totalSessionstotalProfitwinRateavgSessionProfitcurrenciesbyLocationbyStakesbyMonth
MCP Configuration
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"poker-bankroll-tracker": {
"command": "npx",
"args": ["-y", "poker-bankroll-tracker-mcp"],
"env": {
"PBT_API_KEY": "your-api-key-here"
}
}
}
}Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"poker-bankroll-tracker": {
"command": "npx",
"args": ["-y", "poker-bankroll-tracker-mcp"],
"env": {
"PBT_API_KEY": "your-api-key-here"
}
}
}
}Other MCP Clients
Run the server over stdio:
PBT_API_KEY="your-api-key" poker-bankroll-tracker-mcpAvailable MCP Tools
get_sessions
Fetch poker sessions with optional filters. Returns session data with calculated profit/loss.
Broad date ranges may return many sessions and consume significant tokens. Use narrow date ranges when possible.
Parameters:
Name | Type | Description |
| string | Start date ( |
| string | End date ( |
| string | Session type: |
| string | ISO currency codes (comma-separated) |
| boolean | Filter by staking sessions |
All parameters are optional.
Example:
get_sessions({ start: "2026-03-01", end: "2026-03-31", type: "cashgame" })get_stats
Compute aggregate statistics: total profit, win rate, average session profit, total sessions, breakdowns by location/stakes/month.
Takes the same filter parameters as get_sessions.
Example:
get_stats({ start: "2026-01-01", type: "cashgame" })API Notes
Rate limit: 20 requests per 15 minutes.
Base URL:
https://api.pokerbankrolltracker.net/v1Auth: Bearer token via
PBT_API_KEYClient cache: responses cached for 10 seconds to reduce API usage.
Development
git clone https://github.com/0xAndoroid/poker-bankroll-tracker-mcp.git
cd poker-bankroll-tracker-mcp
npm install
npm run buildnpm run dev # Watch mode
npm test # Run tests
npm run lint # Lint with oxlint
npm run format # Format with oxfmtLicense
MIT
Available Tools
2 toolsget_sessionsARead-only
Fetch poker sessions with optional filters. Returns session data with calculated profit/loss. WARNING: broad date ranges may return many sessions and consume significant tokens. Use narrow date ranges when possible.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End date (YYYY-MM-DD) | |
| type | No | Session type: cashgame, tournament, payout, costs, casinogame, jackpot (comma-separated) | |
| start | No | Start date (YYYY-MM-DD) | |
| staking | No | Filter by staking sessions | |
| currency | No | Currency filter: ISO codes (comma-separated) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that results include calculated profit/loss and warns about significant token consumption for broad date ranges. This adds useful behavioral context about return values and cost implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the core purpose, then immediately provides a critical usage warning. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 5 optional parameters and full schema coverage, the description adequately explains the purpose, mentions the return includes profit/loss (since no output schema exists), and adds the token warning. It omits potential details like response structure or pagination, but the essential context is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all 5 parameters with descriptions (100% coverage). The tool description only generically mentions 'optional filters' and adds a date-range warning, without adding new parameter-level meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches poker sessions with optional filters and notes it returns calculated profit/loss. This distinguishes it from the sibling get_stats by implying raw session data rather than aggregated statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on when to use the tool (fetching sessions) and includes a practical warning about broad date ranges consuming tokens, advising narrow ranges. However, it doesn't explicitly compare to the sibling tool get_stats, so no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsARead-only
Compute aggregate statistics from poker sessions: total profit, win rate, average session profit, total sessions, breakdowns by location/stakes/month.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End date (YYYY-MM-DD) | |
| type | No | Session type: cashgame, tournament, payout, costs, casinogame, jackpot (comma-separated) | |
| start | No | Start date (YYYY-MM-DD) | |
| staking | No | Filter by staking sessions | |
| currency | No | Currency filter: ISO codes (comma-separated) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds no additional behavioral context beyond the aggregation logic described in the output list (e.g., grouping by location/stakes/month), which is more about output structure than side effects. No contradiction, but no extra transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
This is a single sentence that front-loads the verb 'Compute' and immediately specifies the resource and outputs. The list of breakdowns is concise and useful, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and only a readOnly annotation, the description adequately explains what the tool returns (total profit, win rate, etc.) and the grouping dimensions. However, it omits default behavior when optional parameters are omitted (e.g., whether stats cover all time or all sessions), leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for all five parameters, including date range, type, staking, and currency. The description does not add any detail about parameter formats or defaults beyond what the schema already gives, so it adds no incremental value here (baseline 3).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Compute aggregate statistics from poker sessions,' a specific verb+resource that clearly distinguishes this from the sibling get_sessions tool, which presumably returns raw session data. It enumerates specific outputs (total profit, win rate, etc.), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for aggregate/statistical queries, contrasting with get_sessions for raw data, but it does not explicitly state when to use one versus the other or provide exclusions. The context is clear, but there is no direct mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.2.0- First observed
get_sessions - First observed
get_stats
TDQS
Scored across 2 tools
get_sessions retrieves individual session records with filters, while get_stats computes aggregate metrics. Their purposes are clearly distinct and unlikely to be confused.
Both tools follow a consistent get_<plural> pattern, which is predictable and easy to understand. There's no mixing of styles or vague verbs.
With only 2 tools, the server feels thin for a tracker. While the two tools are well-focused, the small number suggests the surface may be underdeveloped for broader use.
The tool surface only supports reading and analysis of sessions. There are no tools to create, update, or delete sessions, which are core to managing a bankroll. This is a significant gap that prevents agents from maintaining data.
Maintenance
Related MCP Connectors
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Access SEC filings, insider transactions, and financial data via the ShareSEER API.
Query site stats, realtime visitors, breakdowns and goals from Plausible Analytics.
Trades, stats, playbooks and notes from your Trandence trading journal. Read-only by default.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with Chess.com's public API to retrieve player profiles and statistics including rating history and performance metrics for any Chess.com username.2-
- AlicenseNot gradedqualityDmaintenanceProvides access to the Intervals.icu API for interacting with training data, activities, events, and wellness information.12 npm7GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables querying portfolio data, positions, balances, quotes, price history, orders, and account activity through the Questrade API.21 npm1MIT
- FlicenseBqualityDmaintenanceEnables querying Chess.com player profiles and stats using the Chess.com API.2-