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. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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