MCP server that fetches a user's Trackman Golf stats (handicap, rounds, practice, shots, club gapping).
Project description
trackman-mcp
An MCP server that logs into Trackman Golf with your own account and exposes your stats — course rounds, practice sessions, shot-level launch-monitor data, club gapping, and handicap — as MCP tools. On top of that, a set of Claude skills act as your golf coach: they diagnose your weaknesses and hand you a specific practice plan with drills and YouTube links for your next session.
[!IMPORTANT] Unofficial. This project is not affiliated with or endorsed by Trackman. It talks to Trackman's private web API using a token from your own authenticated session, and automates a browser login on your behalf. This may conflict with Trackman's Terms of Service — use it on your own account, at your own risk. Never use it to access anyone else's data.
Design boundary
- MCP server = raw data fetch + auth only. No opinions.
- Skills = all the coaching (analysis, plans, drills).
See CLAUDE.md for the full architecture and auth/secret rules.
Install
Option A — Claude Code plugin (server + skills together)
/plugin marketplace add bjornj12/trackman-mcp-client
/plugin install trackman-golf@trackman-golf
This installs the MCP server (run via uvx) and the six coaching skills.
Then sign in once (see Authentication).
Option B — any MCP client (Claude Desktop, etc.)
Once published to PyPI, add this to your client's MCP config (Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"trackman-golf": {
"command": "uvx",
"args": ["trackman-mcp"]
}
}
}
No env is required: after you run trackman-mcp login the server loads the
cached token from ~/.trackman-mcp/token.json automatically. (You can instead
set TRACKMAN_TOKEN to override it — see .env.example.)
To run it straight from a local checkout before publishing, use
"command": "uvx", "args": ["--from", "/abs/path/to/trackman-mcp-client", "trackman-mcp"].
Option C — from source (development)
uv venv && uv pip install -e '.[login,dev]' # [login] adds Playwright, [dev] adds test/lint tools
Authentication
Browser login (recommended)
trackman-mcp login # opens a browser; sign in once with email+password
A browser window opens (an isolated profile, not your normal Chrome). Sign
in once; the MCP captures the access token and caches it at
~/.trackman-mcp/token.json (mode 0600). The session persists, so to refresh
later (tokens last ~7 days) just run:
trackman-mcp login --headless # silent refresh, no window
If you don't have Google Chrome installed, the browser flow falls back to
Playwright's bundled Chromium — install it once with playwright install chromium.
Keep it fresh automatically (optional)
Schedule the headless refresh so you never think about tokens (twice weekly, margin on the ~7-day token). Portable — paths are derived at install time:
scripts/install-refresh-schedule.sh dry-run # preview what gets installed
scripts/install-refresh-schedule.sh # install (macOS launchd / Linux cron)
scripts/install-refresh-schedule.sh uninstall # remove
Run a headed trackman-mcp login once first to establish the browser
session; the schedule then refreshes it silently. Windows: schedule
scripts/refresh-token.sh via Task Scheduler.
Alternative: paste a token manually
Set TRACKMAN_TOKEN (it overrides the cache). Get it from
portal.trackmangolf.com → DevTools → Network → a graphql request → the
Authorization header value. See .env.example.
Run
trackman-mcp # start the MCP (stdio)
uv run python scripts/validate.py # validate stats coverage (uses cached token)
MCP tools
All tools return raw data only; the skills interpret it.
Data (read-only): authenticate · get_profile · get_handicap ·
list_sessions · get_session · get_course_rounds · get_club_stats ·
get_shot_data · get_activity_summary
Auth: login
Session analysis (local store, deterministic): analyze_and_store_session ·
list_session_analyses · get_session_analysis
Training-plan memory: save_training_plan · get_next_training ·
list_training_plans · mark_training_done · verify_training_progress
Visualization: build_visualization (self-contained animated HTML artifact)
See CLAUDE.md for the full table and backing GraphQL.
Skills
Bundled under skills/ (installed automatically with the plugin):
trackman-api-discovery— reverse-engineer the portal's API (Phase 0)trackman-stats-analysis— diagnose weaknesses from the datagolf-coaching— turn the diagnosis into an actionable practice plandrill-library— curated drills + vetted YouTube links, plus live searchtrackman-session-analyzer— ingest + normalize recent sessions (runs forked)trackman-visualizer— animate a diagnosis as an HTML artifact
Development
uv run pytest # tests
uv run ruff check # lint
uv run mypy # type-check
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trackman_mcp-0.1.0.tar.gz.
File metadata
- Download URL: trackman_mcp-0.1.0.tar.gz
- Upload date:
- Size: 174.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b2ab72ef97f00169d228ffb92c86fe2207927e0fc549998a3c89cc5f7cc65b
|
|
| MD5 |
a859b785e4e97252c762c88ef06c1900
|
|
| BLAKE2b-256 |
0fe1ce868e564f22fd692f4ae4374cfd7b35c680a20f000e872f98414a423175
|
Provenance
The following attestation bundles were made for trackman_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on bjornj12/trackman-mcp-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trackman_mcp-0.1.0.tar.gz -
Subject digest:
17b2ab72ef97f00169d228ffb92c86fe2207927e0fc549998a3c89cc5f7cc65b - Sigstore transparency entry: 2006291921
- Sigstore integration time:
-
Permalink:
bjornj12/trackman-mcp-client@52923460430f6fd0c0a4cbec30f178f1b3e64c97 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bjornj12
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@52923460430f6fd0c0a4cbec30f178f1b3e64c97 -
Trigger Event:
push
-
Statement type:
File details
Details for the file trackman_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: trackman_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 39.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee41aa1eee498ac42b3447a24dbd9bf686917fd6789ff70d2fbfc2db3e1215cc
|
|
| MD5 |
5dadaed4d8bb317c32a31e81a323318f
|
|
| BLAKE2b-256 |
7ded98ec12887511fb6270ea5f25dc34be7ddb6dcd29ea25a3fa56f0aa2e502b
|
Provenance
The following attestation bundles were made for trackman_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on bjornj12/trackman-mcp-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trackman_mcp-0.1.0-py3-none-any.whl -
Subject digest:
ee41aa1eee498ac42b3447a24dbd9bf686917fd6789ff70d2fbfc2db3e1215cc - Sigstore transparency entry: 2006292045
- Sigstore integration time:
-
Permalink:
bjornj12/trackman-mcp-client@52923460430f6fd0c0a4cbec30f178f1b3e64c97 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bjornj12
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@52923460430f6fd0c0a4cbec30f178f1b3e64c97 -
Trigger Event:
push
-
Statement type: