caddie-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CADDIEMCP_HOME | No | Base directory for per-user databases and token stores. Defaults to ~/.caddiemcp. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| garmin_statusA | Check connector health: Garmin auth state, last sync, cached data coverage (rounds, shots, GPS %, club %). Call this first in a session. |
| sync_garmin_dataA | Pull golf data from Garmin Connect into the local cache, plus daily health (sleep, HRV, Body Battery, stress, readiness) for round dates. Incremental and CHUNKED: each call syncs up to max_rounds new rounds
(default 25, newest first, ~2-4 minutes) and reports
rounds_remaining. To load a full multi-year history, simply keep calling
this tool until rounds_remaining is 0 — tell the user the total and give a
brief progress update between batches. Nothing is lost between calls; every
batch is permanent. full=True refetches already-cached rounds
(least-recently-synced first; pass max_rounds to bound it, otherwise it
runs unbounded). include_health=False skips the health pass. (Very large
backfills can also run outside chat: |
| list_roundsA | List golf rounds, newest first, as compact summaries (date, course, score, putts, fairways, GIR, ratings). Dates are YYYY-MM-DD; course is a case-insensitive substring match. Use get_round for hole-by-hole detail. |
| get_roundA | Get one round in depth: header, hole-by-hole scorecard, and optionally every shot. round_id comes from list_rounds. Prefer get_shots (with filters or geojson) when the goal is shot analysis or mapping. |
| get_shotsA | Get shot-level data (GPS, club, lie, distance, miss offsets dx/dy). Filter by round_id, holes, club name substring, or shot_type (drive|approach|chip|putt|penalty). format="geojson" returns a FeatureCollection (shot LineStrings + pin Points) ready for Mapbox or Leaflet — ideal for shot maps and dashboards. |
| get_club_statsA | Per-club performance over the last N rounds: measured avg/min/max/ stddev carry distance (excludes putts and penalties), sample size, usage share, lateral miss bias from Garmin's dx offsets, plus Garmin's own average and 'advice' distances for comparison. |
| get_strokes_gainedA | Strokes Gained (Broadie method) per round: total plus off-tee / approach / short-game / putting. baseline: "auto" grades each round against the player's own handicap level; or force one of scratch, 5hcp, 10hcp, 15hcp, 20hcp, bogey (scratch = the number seen on TV). estimated_share > 0 means some shots lacked GPS and used inferred lies/distances — hedge conclusions accordingly. |
| get_performance_statsA | PGA-style performance stats over the last N rounds: driving distance/ accuracy + miss direction, GIR and proximity by distance bucket, scrambling and sand saves, putting (make % by feet, 3-putt avoidance), scoring (par 3/4/5 averages, bounce-back, distribution). Optionally pass benchmark_handicap to compare every metric against that handicap level. |
| get_handicapA | WHS-style Handicap Index: best-N-of-20 differentials, which rounds count, and the index trend over time. Needs rounds with tee rating and slope (Garmin records these when a tee box is selected on the watch). |
| get_course_intelA | Personal course intelligence for one course (name substring match): per-hole scoring average vs par, hardest and easiest holes, most common tee club per hole, and round history there. Use for strategy questions like 'how should I play X next time?'. |
| get_health_contextA | Health context for a round or date (YYYY-MM-DD): sleep score and duration the night before, HRV status, Body Battery range, training readiness, average stress, resting HR, steps. With round_id, also returns the round summary so performance and recovery sit side by side. NULL fields mean the watch/feature didn't record — say so, don't guess. |
| correlate_health_performanceA | Does recovery (or weather) affect your golf? Joins each round to its health/conditions data and computes a Pearson correlation. Daily metrics (sleep_score, hrv, readiness...) come from the night/day around the round; round-window metrics (bb_at_tee, avg_hr_during_round, avg_stress_during_ round, temp_c, wind_speed_mph) are measured DURING the round itself. Returns the paired table, r, and an honest interpretation — small samples are flagged loudly. Remember lower is better for score/putts: a NEGATIVE r between sleep_score and score_to_par means better sleep, better golf. |
| query_golf_dataA | Run a read-only SQL SELECT over the golf database (DuckDB dialect). Tables: rounds, holes, shots, clubs, daily_health. Read the schema://data-dictionary resource for columns, units, and enums. Single statement, SELECT/WITH only, capped at 200 rows — aggregate server-side instead of selecting raw rows when possible. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| post_round_report | Full analysis of one round: scorecard, SG, standouts, what to practice. |
| practice_plan | SG-weighted practice plan from recent weaknesses. |
| course_strategy | Personal game plan for a course from past rounds there. |
| health_check_in | Recovery vs golf performance review. |
| season_review | Long-horizon trends: scoring, SG, handicap, memorable rounds. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| data_dictionary | Tables, columns, units, and enums of the golf database. |
| getting_started | Recommended tool flow for a new session. |
| metric_definitions | How every metric is computed: SG math, stat derivations, benchmarks. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mbrionesalvarez/caddie-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server