Skip to main content
Glama
0xAndoroid

poker-bankroll-tracker-mcp

by 0xAndoroid

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-mcp

Or run directly with npx:

PBT_API_KEY="your-api-key" npx poker-bankroll-tracker-mcp

After global install, both binaries are available:

poker-bankroll-tracker --help
poker-bankroll-tracker-mcp

Related 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

YYYY-MM-DD

Start date filter, example 2026-01-01

--end

YYYY-MM-DD

End date filter, example 2026-03-31

--currency

comma-separated 3-letter ISO codes

Currency filter, example USD,EUR

--type

comma-separated enum values

One or more of cashgame, tournament, payout, costs, casinogame, jackpot

--staking

boolean flag

Filter to staking sessions

--json

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 --json

stats

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 --json

CLI 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:

  • totalSessions

  • totalProfit

  • winRate

  • avgSessionProfit

  • currencies

  • byLocation

  • byStakes

  • byMonth

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-mcp

Available 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

start

string

Start date (YYYY-MM-DD)

end

string

End date (YYYY-MM-DD)

type

string

Session type: cashgame, tournament, payout, costs, casinogame, jackpot (comma-separated)

currency

string

ISO currency codes (comma-separated)

staking

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/v1

  • Auth: Bearer token via PBT_API_KEY

  • Client 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 build
npm run dev        # Watch mode
npm test           # Run tests
npm run lint       # Lint with oxlint
npm run format     # Format with oxfmt

License

MIT

Available Tools

2 tools
get_sessionsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd date (YYYY-MM-DD)
typeNoSession type: cashgame, tournament, payout, costs, casinogame, jackpot (comma-separated)
startNoStart date (YYYY-MM-DD)
stakingNoFilter by staking sessions
currencyNoCurrency filter: ISO codes (comma-separated)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_statsA
Read-only

Compute aggregate statistics from poker sessions: total profit, win rate, average session profit, total sessions, breakdowns by location/stakes/month.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd date (YYYY-MM-DD)
typeNoSession type: cashgame, tournament, payout, costs, casinogame, jackpot (comma-separated)
startNoStart date (YYYY-MM-DD)
stakingNoFilter by staking sessions
currencyNoCurrency filter: ISO codes (comma-separated)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 2 tool updatesv1.2.0
    • First observedget_sessions
    • First observedget_stats

TDQS

A4/5.0

Scored across 2 tools

Disambiguation5/5

get_sessions retrieves individual session records with filters, while get_stats computes aggregate metrics. Their purposes are clearly distinct and unlikely to be confused.

Naming Consistency5/5

Both tools follow a consistent get_<plural> pattern, which is predictable and easy to understand. There's no mixing of styles or vague verbs.

Tool Count3/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers