Skip to main content
Glama
bjornj12

golf-coach

Golf Coach

A golf coach that trains you purely on your stats — round after round, closer to scratch.

Golf Coach logs into Trackman Golf with your own account and turns your stats — course rounds, practice sessions, shot-level launch-monitor data, club gapping, and handicap — into a diagnosis of where you're losing strokes, then hands you a specific practice plan with drills and YouTube links for your next session and grades your progress over time. It ships as an MCP server (the data tools) plus Claude skills (the coaching brain).

What you get

You don't read the charts — you get a coach. Point it at your Trackman data and it:

  • Finds where you're actually losing strokes — not "work on your irons," but "your driver has a two-way miss spreading landings across a ~115 m corridor — the speed is real, the face isn't yet."

  • Hands you one specific session — clubs, distances, reps, a Trackman target, and a drill with a real YouTube link. Stuck indoors? It has an at-home, no-ball routine too.

  • Grades your progress — it saves the plan and checks your next session against it, so you actually know whether it worked.

  • Shows you the picture — an animated view of your ball flight, the swing path behind the miss, and how close you are to each target.

A Golf Coach session — driver-dispersion diagnosis with the swing-path cause, progress-vs-target bars, and drills to fix it

A real session diagnosis: what's wrong, why, how close you are to your targets, and exactly what to practice next.

Name note. "Golf Coach" is the product name. The technical ids stay golf-coach (MCP server / plugin) and golf-coach (the published package), so existing installs keep working.

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.

Related MCP server: Race MCP Server

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

Pick the path for how you use Claude. Each takes about two minutes, then do the one-time Authentication step.

  1. Download golf-coach.mcpb (from the latest release).

  2. Open Claude Desktop → Settings → Extensions, drag the file in (or double-click it), and click Install. Leave the token field blank.

  3. In a chat, say "log in to Trackman" → a browser window opens → sign in once with your Trackman email + password (Apple / Google sign-in works too). The window stays open until you finish — take your time, it won't close on its own. When you're done, tell Claude and it confirms you're signed in.

  4. Ask Claude: "What's my Trackman handicap?"

Nothing to install and no config to edit — Claude Desktop runs everything and opens the sign-in browser for you. (First sign-in may take a moment if it needs to fetch a browser. You may also see an "unsigned extension" note — expected for one installed from a file.)

Platforms: macOS, Linux, and Windows — Claude Desktop runs the server via uv on all three, and the browser sign-in uses Playwright (cross-platform). One caveat on Windows: the local token/data files are protected by your Windows user profile (ACLs) rather than POSIX 0600 modes. The optional cron/launchd auto-refresh script is macOS/Linux only — on Windows use Task Scheduler, or just re-run the in-app "log in to Trackman" when the ~7-day token lapses.

⌨️ Claude Code — plugin (server and coaching skills)

/plugin marketplace add bjornj12/golf-coach
/plugin install golf-coach@golf-coach

Installs the MCP server (run via uvx) and all ten coaching skills.

🔌 Other MCP clients (or Claude Desktop without the extension)

Requires uv (curl -LsSf https://astral.sh/uv/install.sh | sh). Add this to your client's MCP config:

{
  "mcpServers": {
    "golf-coach": { "command": "uvx", "args": ["golf-coach"] }
  }
}

For Claude Desktop's manual config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS), use the absolute path to uvx — e.g. /opt/homebrew/bin/uvx — because the app doesn't inherit your shell PATH. The .mcpb install above avoids this entirely.

Authentication (one-time)

The server needs to sign in to your Trackman account. Trackman has no public login API, so it captures a token from a real signed-in browser session once; it's then cached locally and refreshes itself. Your password is never seen or stored by the tool, and nothing leaves your machine.

Easiest — just ask Claude to log in (Claude Desktop / Claude Code)

Say "log in to Trackman." A browser window opens (an isolated profile, not your normal Chrome); sign in once, at your own pace — the window is driven by a background task, so it stays open until you're done and won't be closed out from under you (even a slow Apple/Google 2FA is fine). When you've finished, tell Claude and it confirms. The token caches at ~/.golf-coach/token.json (mode 0600) and the MCP uses it automatically from then on. No terminal, no token to copy — the extension fetches a browser itself if you don't have one.

Terminal alternative (CLI users)

uv tool install "golf-coach[login]"
golf-coach login              # opens a browser; sign in once
golf-coach login --headless   # silent refresh later (tokens last ~7 days)
scripts/install-refresh-schedule.sh   # optional: auto-refresh twice weekly

Advanced — paste a token

portal.trackmangolf.com → DevTools → Network → a graphql request → copy the Authorization: Bearer … value → paste into the extension's Trackman token field (or set TRACKMAN_TOKEN). Tokens expire after ~7 days, so the sign-in flows above are easier.

Verify it worked

Ask Claude "Am I signed in to Trackman?" — it runs auth(action="status") and replies with your name (never the token).

MCP tools

All tools return raw data only; the skills interpret it.

8 tools. trackman and gamebook each take an action (so the agent picks one tool with a mode rather than many near-identical tools).

Setup: setup — one call returns an always-on coach system prompt (for a Project), the skills as upload-ready files, and per-client steps. There's a matching setup prompt in the picker.

Auth: auth(action: status | login, source?)

Trackman data (read-only): trackman(action: profile | handicap | sessions | session | rounds | clubs | summary) — profile+handicap, handicap history, activity list, one activity in full (incl. shot-level metrics), course rounds, club gapping, activity counts.

Gamebook rounds (local, deterministic): gamebook(action: save | list | get | compare) — on-course rounds ingested from Golf GameBook screenshots, rolling last 5, coverage-aware (only score-per-hole is trusted).

Cross-source synthesis (local, deterministic): synthesize() — aligns Trackman's and GameBook's per-source Findings by skill area (no verdict; see CLAUDE.md's "Sources & normalization").

Session analysis (local, deterministic): session_analysis(action: analyze | get | list)

Training-plan memory: training_plan(action: save | next | list | done | verify)

Visualization: build_visualization (self-contained animated HTML artifact)

See CLAUDE.md for the full table and backing GraphQL.

Skills (coaching brain)

The skills under skills/ are delivered two ways:

  • Claude Code: installed automatically with the plugin.

  • Any MCP client (incl. Claude Desktop): the server serves them as MCP prompts, so they show up in your client's prompt picker — no separate install.

Skill

What it does

trackman-stats-analysis

Diagnose weaknesses from the data

golf-coaching

Turn the diagnosis into an actionable practice plan (visual-first; auto-grades progress)

drill-library

Curated drills + vetted links — incl. at-home / no-ball drills — plus live search

golf-practice-at-home

Build a daily no-ball routine for a diagnosed fault, animated per drill

at-home-practice-feedback

A single mobile-first drill card with built-in feedback: prop, validation checkpoint, budget tier, video

trackman-session-analyzer

Ingest + normalize recent sessions

gamebook-screenshot-analysis

Ingest GameBook round screenshots into a coverage-aware round record; scoring-led progress that feeds the coach

swing-video-check

Frame-by-frame visual check of a filmed swing (one angle per clip) against the current practice card

grip-check

Grade the grip (too weak / too strong) from two face-forward photos — the coach's gate before any new prescription

trackman-visualizer

Animate a diagnosis (or a single drill's mechanics) as an HTML artifact

To check a filmed swing: drop a clip named DATE_CLUB_ACTION.mp4 (e.g. 2026-07-17_driver_grip-reset.mp4) into the project in Claude Code and say "check my swing" — you get an angle-scoped checklist and one swing thought (needs ffmpeg).

(trackman-api-discovery is a project/dev skill and isn't served as a prompt.)

Development

uv venv && uv pip install -e '.[login,dev]'   # [login] = Playwright, [dev] = test/lint tools

golf-coach                       # run the MCP server (stdio)
uv run python scripts/validate.py  # sanity-check stats coverage with your token

uv run pytest        # tests
uv run ruff check    # lint
uv run mypy          # type-check

Releasing (PyPI + MCP Registry + the Desktop .mcpb) is one command — scripts/release.sh patch — see PUBLISHING.md.

License

MIT

Available Tools

8 tools
authA

Check or (re)establish your Trackman sign-in.

Actions:

  • status (default): report whether the current token works and who you're signed in as. Use this first; it never opens anything.

  • login: (re)authenticate. If already signed in, confirms instantly. If the saved session expired and open_browser is true, it opens a sign-in window and returns immediately with pending: true — the window stays open for a few minutes and the user signs in at their own pace (the browser is driven by a background task, so it won't close on its own). After the user says they've finished, call auth(action='status') to confirm. Do NOT re-call login while one is pending — it won't open a second window.

source selects the data source to authenticate; only trackman needs auth (other sources, e.g. GameBook, are local). Never echoes the token.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNostatus
sourceNotrackman
open_browserNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses detailed behavioral traits beyond the annotations: it opens a browser window, returns immediately with `pending: true`, runs a background task that won't close on its own, and never echoes the token. This adds significant context about side effects and workflow that the annotations (readOnlyHint, openWorldHint, idempotentHint) only hint at abstractly.

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 well-structured with a clear lead sentence followed by bulleted action explanations and parameter notes. Every sentence contributes necessary operational detail, and the formatting (bold, code, parentheses) aids readability without being wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-action, side effects, pending state) and the presence of an output schema, the description is remarkably complete. It explains the full lifecycle, error scenarios (expired session), and user-interaction flow, making it fully sufficient for an agent to use correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description fully explains each parameter: `action` (status vs login, with default), `source` (only trackman needs auth), and `open_browser` (controls whether a sign-in window opens). This provides semantic meaning beyond the raw schema, covering all three parameters effectively.

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's purpose: 'Check or (re)establish your Trackman sign-in.' It goes beyond a simple verb by detailing the two actions (`status` and `login`) and their distinct functions, making it unambiguous and distinguishing it from sibling tools which are all data/analysis oriented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'Use this first' for `status`, instructs to call `status` after login to confirm, and warns against re-calling `login` while pending. It also notes that only `trackman` needs auth, implying when the tool is not needed. This is comprehensive and highly actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_visualizationA
Read-onlyIdempotent

Render a coaching diagnosis into a self-contained animated HTML page.

Returns {html} — one standalone document (inline canvas/JS, no network, no external resources) ready to drop straight into a Claude HTML artifact.

data shape (all optional; the viz adapts): {title, subtitle, diagnosis, handedness "RH"|"LH", shots:[{launchDirection,launchAngle,carry,total, totalSide,curve,maxHeight,landingAngle,hangTime}], swing:{clubPath,faceAngle,faceToPath}, targets:[{label,value,target,low, high,met}], blocks:[{name,detail,goal,where "range"|"home", links:[{label,url}]}]}. Renders the measured flight (side view + top-down, animated) and drills grouped range/home. See the trackman-visualizer prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint), the description discloses key behaviors: the output is self-contained with no network/external resources, the visualization adapts because all data is optional, and it renders specific components (measured flight, drills grouped by range/home). This gives the agent a solid mental model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and returns format, then dives into data shape. While lengthy, the detail is necessary for a single complex parameter. The reference to a 'trackman-visualizer prompt' is slightly cryptic but does not undermine clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter with poor schema coverage, the description fully defines the input structure and output format. Annotations already cover safety, so no extra behavioral safety info is needed. The tool is complex, and the description leaves no critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only describes 'data' as an object with additionalProperties true, giving zero field-level detail. The description compensates fully by enumerating the complete data shape, including nested shots, swing, targets, and blocks arrays with their fields. This is essential for the agent to construct valid input.

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 a specific verb+resource: 'Render a coaching diagnosis into a self-contained animated HTML page.' This clearly distinguishes it from sibling tools like trackman or session_analysis by focusing on visualization output. The return type and artifact context further clarify its unique role.

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: use this when you have a coaching diagnosis and need a standalone HTML page ready for an artifact. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gamebookA

On-course rounds ingested from Golf GameBook screenshots (local, last 5).

The gamebook-screenshot-analysis skill extracts a round from screenshots and saves it here. Only score-per-hole is trusted; every other dimension carries a coverage flag (full|partial|none) and analysis respects it.

Actions:

  • save (needs round): a coverage-aware record — {date, course:{par,cr,slope}, result:{gross,net,to_par,position}, holes:[{hole,par,score,putts?,fairway?, gir?,bunkers?,chips?,penalties?}], coverage:{...}, dimensions:{...}}. Runs a self-check (hole sums vs gross/par); refuses inconsistent reads. Computes the scoring block, stores it (last 5), returns the stored record.

  • list: index of stored rounds (id, date, gross, net, to_par, coverage), newest first.

  • get (needs round_id): one full stored round.

  • compare (optional round_id, default latest): deterministic deltas vs the rounds before it — scoring always, other dimensions only where both tracked them. Returns measurement; the coach narrates progress from it.

ParametersJSON Schema
NameRequiredDescriptionDefault
roundNo
actionYes
round_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the self-check mechanism ('refuses inconsistent reads'), the coverage flags on unverified dimensions, and the last-5 retention policy. This goes well beyond the minimal annotations and manages expectations about data trustworthiness.

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 compact yet information-dense, using a bulleted action list to organize functional details. The opening sentence and parentheses efficiently convey scope and storage limits.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All four actions have stated behavior and return values, and the nested round structure is fully documented. The existence of an output schema also covers response details, making this complete for a tool with this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though the schema's parameters have no descriptions, the tool description explains each action's required parameters ('save' needs `round`, 'get' needs `round_id`) and provides an inline schema for the round object. This fully compensates for the 0% schema coverage.

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 a specific resource ('On-course rounds ingested from Golf GameBook screenshots') and enumerates four concrete actions (save, list, get, compare). It clearly distinguishes from sibling tools by scoping to GameBook screenshot data rather than Trackman or session analysis.

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 when to use the tool by noting that the `gamebook-screenshot-analysis` skill extracts and saves rounds here. However, it does not explicitly mention alternatives or exclusions, so users must infer that Trackman/session data goes elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_analysisA

Per-session analysis (deterministic classification + metrics, stored locally).

Actions:

  • analyze (needs activity_id): fetch a session, classify it (warm-up vs serious practice vs game), compute metrics, normalize vs prior stored sessions, store the record (last 30 kept), and return it.

  • get (needs activity_id): return one stored analysis record.

  • list: return the index of stored analyses (most recent first).

Drive this with the trackman-session-analyzer prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
activity_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors beyond annotations: it stores records locally, keeps only the last 30, and mentions deterministic classification. This adds context to the non-read-only annotation by explaining side effects, though it could be richer (e.g., permissions, error behavior).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a concise bullet list of actions. The final instruction about the prompt adds some ambiguity but the overall length and organization are effective and mostly earn their place.

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 presence of an output schema and clear action structures, the description provides sufficient context for a two-parameter tool. It covers storage behavior, action variants, and parameter requirements, though it could mention how to obtain activity_id or handle errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the 'action' enum values and specifying that analyze and get require 'activity_id'. It could further define what activity_id represents, but the usage context is reasonably clear.

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 it performs per-session analysis with specific actions (analyze, get, list). It explicitly describes the classification task and storage of results, which distinguishes it from sibling tools like gamebook or training_plan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for session analysis but does not explicitly state when to use this tool versus alternatives. It mentions driving with a specific prompt, but provides no exclusions or comparisons with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setupA
Read-onlyIdempotent

One-call onboarding for the Trackman golf coach.

Returns everything needed to set the coach up in your client:

  • system_prompt: paste into a Claude/ChatGPT Project's custom instructions so every chat in it is the coach (with this MCP connected);

  • skills: upload-ready SKILL.md files (Settings → Capabilities → Skills) for always-on auto-activation;

  • instructions: per-client steps (Claude Projects, Desktop Skills, ChatGPT, Claude Code).

An MCP server can't create the Project or enable Skills itself — this hands you the content + steps. In Claude Code, the assistant can write the files for you directly from this kit. (Pairs with the setup prompt.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint), the description discloses that the tool only returns content and cannot perform external actions like creating Projects. This explains the tool's non-mutating behavior and its limitation, which is valuable context not fully captured by annotations alone.

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 well-structured with a concise opening sentence, a bulleted list of return items, and a short paragraph on limitations. Each sentence serves a purpose—no fluff or redundancy—and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, a detailed output schema, and annotations covering safety, the description fully explains what the tool does, what it returns, and its limitations. It leaves no ambiguity about the tool's role in the overall setup workflow, making it contextually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is trivially 100%. Per the rubric, a baseline of 4 applies for 0-param tools. The description does not need to explain paramet semantics, but it does clarify the returned object structure, which adds useful context.

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 'One-call onboarding for the Trackman golf coach,' which clearly states a specific verb (onboarding) and resource (coach setup). It enumerates concrete outputs (system_prompt, skills, instructions) and thus distinguishes itself from sibling tools like auth or session_analysis by its setup-focused role.

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 explains that the tool returns setup content and explicitly states an MCP server cannot create Projects or enable Skills itself, which clarifies when to use this tool (to get setup material) versus doing manual setup separately. It also notes the alternative of using Claude Code to directly write files, providing contextual usage guidance without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthesizeA
Read-onlyIdempotent

Cross-source, context-aware view: runs each source's expert analyzer and aligns their findings by skill area (no verdicts — the coach interprets).

Also returns two extra FACTUAL sections (measurement-only): delivery — the driver club-delivery facts (path / face-to-path / spin-axis / attack / spin); and leak_ranking — skill areas ordered by measured deviation-from-band severity. If the Trackman token has expired (and a silent refresh failed), this raises loudly rather than returning an empty view — re-auth with auth(action='login') and retry.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only and idempotent, but the description adds valuable behavioral context: it runs expert analyzers, returns specific factual sections, and raises loudly on token expiration rather than returning empty results, with a clear recovery step. This goes beyond the annotations and improves transparency.

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 well-structured with a clear front-loaded purpose, followed by output details and error handling. Every sentence conveys necessary information without repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, its key output sections, and the only notable error condition (token expiry). Since an output schema exists, it need not enumerate all return fields, and the summary is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, so the baseline is 4. The description does not need to explain parameter options, and it appropriately focuses on behavior and output given the empty input schema.

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's function as a cross-source, context-aware view that runs expert analyzers and aligns findings by skill area. It explicitly notes it does not produce verdicts, distinguishing it from other analysis tools and giving it a specific role.

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 when to use this tool (for cross-source synthesis and contextual analysis) but does not explicitly name alternative tools or state 'when not to use'. It does provide a clear recovery instruction for token expiry, which adds usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trackmanA
Read-onlyIdempotent

Trackman data reads (controlled/flat-lie launch-monitor data). Raw only.

Actions:

  • profile: identity + current handicap (hcp.currentHcp, latest record).

  • handicap (paging skip/take default 20, only_in_avg): handicap history — per-round differentials and how the index moved.

  • sessions (skip/take default 25, kinds, time_from/time_to, include_hidden): list activities (practice sessions and course rounds) — totalCount + a page of item summaries. Use session with an item's id for full detail.

  • session (needs activity_id): one activity in full, with shot-level launch metrics (RANGE_PRACTICE strokes) or the scorecard (COURSE_PLAY).

  • rounds (skip/take default 20, completed): course rounds (scorecards) — per-hole scores and round stat aggregates. completed=None returns all rounds regardless of completion state.

  • clubs (include_retired): per-club gapping and dispersion ("My Bag" / Find My Distance) — the source for gapping analysis.

  • summary (time_from/time_to, skip/take default 50): activity counts grouped by kind over an optional time window.

take defaults to each action's own historical default (20 for handicap and rounds, 25 for sessions, 50 for summary) when omitted; pass it explicitly to override.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNo
takeNo
kindsNo
actionYes
time_toNo
completedNo
time_fromNo
activity_idNo
only_in_avgNo
include_hiddenNo
include_retiredNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description aligns by stating 'reads' and 'Raw only.' It adds behavioral detail beyond annotations: per-action `take` defaults, `completed=None` returns all rounds regardless of completion state, and session returns different payloads for RANGE_PRACTICE vs COURSE_PLAY. This contextual information is valuable for invoking the tool correctly.

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 long but well-structured, with a front-loaded purpose and a bulleted list of actions. Every sentence conveys either an action's purpose, its parameters, or behavioral nuances, so nothing feels redundant. Given the tool's complexity (7 sub-actions, 11 params), the length is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all 7 actions, all relevant parameters, default pagination behavior, and the distinction between activity types. It even notes the shape of responses (totalCount + page of summaries for sessions, scorecards for rounds). Since an output schema exists, detailed return-theme documentation is unnecessary, making the description complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description bears the full burden for parameter semantics. It explains each action's relevant parameters, e.g., `handicap` takes `skip`/`take` default 20 and `only_in_avg`; `sessions` takes `kinds`, `time_from`/`time_to`, `include_hidden`; `rounds` takes `completed`; and `clubs` takes `include_retired`. It also clarifies the default `take` values per action, which are not obvious from the schema.

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 defines the tool as 'Trackman data reads' and lists seven specific actions (profile, handicap, sessions, session, rounds, clubs, summary), each with a resource and purpose. It distinguishes itself with 'Raw only,' making clear it provides unprocessed launch-monitor data. Although it doesn't reference sibling tools explicitly, the specificity of actions and raw-only scope makes 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 provides clear context for each sub-action, e.g., 'Use session with an item's id for full detail' and explains when to use sessions vs session vs rounds. However, it never explicitly contrasts the tool with sibling tools or says when not to use it. The 'Raw only' phrase is a subtle exclusion but no named alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

training_planA

The coach's memory: save prescribed practice plans and recall/grade them.

Actions:

  • save (needs plan): persist a prescribed plan to the pending queue. The plan is a structured dict — title, focus, diagnosis, blocks [{name, club, reps, detail, link, goal}], and optional target_specs (machine-readable targets, e.g. {metric:'clubPath', club:'DRIVER', op:'between', low:-1, high:2}) used by verify. Returns the stored plan (with id). Capped at the most recent 50.

  • next: return the next pending plan — the answer to "what's today's training?".

  • list (optional status='pending'|'done'): list plans, oldest→newest.

  • done (needs plan_id, optional result_session_id): mark a plan complete.

  • verify (needs plan_id, optional activity_id): grade a recent session's real shot metrics against the plan's target_specs; returns per-target session-mean vs target, all_met, and a recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
planNo
actionYes
statusNo
plan_idNo
activity_idNo
result_session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false), the description discloses specific behavioral details: the queue is capped at 50 plans, save returns the stored plan with id, verify returns per-target means and all_met, and done optionally links a result_session_id. It also clarifies that verify grades 'a recent session's real shot metrics,' which is not in the schema. No contradictions with 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?

The description is appropriately sized for a five-action tool, with a clear one-line summary followed by a bulleted list. Each action gets a compact, information-dense line. There is no filler or repetition; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all 6 parameters, all 5 actions, return types, state changes, and constraints (cap of 50). It explains the purpose of each action in context and references output behaviors. The existing output schema can further detail return structures, but the description alone is sufficient for an agent to select and invoke the tool correctly for most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries full weight—and it succeeds. It defines the 'plan' parameter as a structured dict with fields (title, focus, diagnosis, blocks, target_specs), gives an example target_specs shape, explains 'needs plan_id' for done and verify, specifies status enum values, and clarifies the meaning of activity_id and result_session_id. This adds profound meaning beyond the bare schema.

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 'The coach's memory: save prescribed practice plans and recall/grade them,' which clearly states the tool's purpose and scope. It then enumerates five specific actions (save, next, list, done, verify) with distinct verbs and resources, distinguishing itself from sibling tools like session_analysis and trackman.

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?

Each action includes contextual usage: save persists to a pending queue, next answers 'what's today's training?', list shows plans oldest→newest, done marks complete, verify grades against target_specs. However, the description does not explicitly mention when to avoid this tool or use an alternative, so it misses full alternative/exclusion guidance.

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. 8 tool updatesv0.7.0
    • First observedauth
    • First observedbuild_visualization
    • First observedgamebook
    • First observedsession_analysis
    • First observedsetup
    • First observedsynthesize
    • First observedtrackman
    • First observedtraining_plan

TDQS

A4.5/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct domain: authentication, Trackman data queries, session analysis, training plan management, visualization rendering, setup/onboarding, cross-source synthesis, and GameBook round management. No two tools have overlapping purposes; the only minor overlap is between `source`'s `rounds` and `gamebook`'s stored rounds, but they are clearly separated by data source.

Naming Consistency3/5

The tool names use inconsistent styles: some are noun-like (`auth`, `source`, `setup`, `gamebook`), some are verb-like (`synthesize`, `build_visualization`), and some are underscore-separated nouns (`session_analysis`, `training_plan`). There is no consistent verb_noun pattern across the set, though each name is self-explanatory and readable.

Tool Count5/5

With 8 tools, the server is well-scoped for a golf coaching workflow. Each tool covers a distinct functional area, and the number falls within the ideal 3-15 range, so the tool count is appropriate.

Completeness5/5

The tool surface covers the full coaching lifecycle: data ingestion (Trackman, GameBook), raw data queries, session analysis, training plan creation and verification, cross-source synthesis, visualization output, and setup/onboarding. There are no obvious dead ends; the only minor gap might be lack of explicit delete/update operations, but the retention caps and completed statuses handle that in practice.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive AI-powered fitness tracking application that enables AI tools to interact intelligently with user fitness data, providing personalized workout plans, nutrition tracking, and progress analysis through natural language.
    15
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Integrates with Garmin Connect to retrieve activity data, health metrics, and provide AI-powered training insights and personalized coaching recommendations based on your fitness activities and performance trends.
    14
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects AI assistants to fitness data from over 150 wearables including Strava, Garmin, and Fitbit through the Model Context Protocol. It provides 47 tools for sports science-based analysis, training load management, recovery tracking, and personalized nutrition planning.
    16
    -