# io.github.mbrionesalvarez/caddie-mcp (pypi · caddie-mcp)

Your Garmin golf data in Claude: GPS shots, strokes gained, club distances, health context

- Trust score: 68/100 (medium)
- Change this week: +15
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-18

## Components

- pypi · `caddie-mcp`: 68/100 (this document), [markdown](https://verifymcp.io/servers/mbrionesalvarez-caddie-mcp/caddie-mcp.md), [page](https://verifymcp.io/servers/mbrionesalvarez-caddie-mcp/caddie-mcp)

## Channel facts

- Registry: `pypi`
- Package: `caddie-mcp`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-18.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - 2 of 41 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 6 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1509 tokens (~94/item across 16 items; 13 tools + 3 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add mbrionesalvarez-caddie-mcp -- uvx caddie-mcp
```

### Codex

```bash
codex mcp add mbrionesalvarez-caddie-mcp -- uvx caddie-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mbrionesalvarez-caddie-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "caddie-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mbrionesalvarez-caddie-mcp --command uvx --arg caddie-mcp
```

### Hermes

```yaml
mcp_servers:
  mbrionesalvarez-caddie-mcp:
    command: "uvx"
    args: ["caddie-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "mbrionesalvarez-caddie-mcp": {
      "command": "uvx",
      "args": [
        "caddie-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-12 (score 68, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-08-11 (score 53)

First indexed and scored.

## MCP tools (13)

### `garmin_status` (~42 tokens)

Check connector health: Garmin auth state, last sync, cached data
coverage (rounds, shots, GPS %, club %). Call this first in a session.

### `sync_garmin_data` (~226 tokens)

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: `caddie-mcp sync` in a terminal does
it in one go.)

Input parameters:

- `full` (boolean)
- `include_health` (boolean)
- `max_rounds`

### `list_rounds` (~85 tokens)

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.

Input parameters:

- `course`
- `end_date`
- `limit` (integer)
- `start_date`

### `get_round` (~83 tokens)

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.

Input parameters:

- `include_holes` (boolean)
- `include_shots` (boolean)
- `round_id` (integer, required)

### `get_shots` (~127 tokens)

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.

Input parameters:

- `club`
- `format` (string)
- `holes`
- `limit` (integer)
- `round_id`
- `shot_type`

### `get_club_stats` (~77 tokens)

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.

Input parameters:

- `last_n_rounds` (integer)

### `get_strokes_gained` (~130 tokens)

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.

Input parameters:

- `baseline` (string)
- `last_n_rounds` (integer)
- `round_id`

### `get_performance_stats` (~111 tokens)

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.

Input parameters:

- `benchmark_handicap`
- `category` (string)
- `last_n_rounds` (integer)

### `get_handicap` (~59 tokens)

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_intel` (~79 tokens)

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?'.

Input parameters:

- `course` (string, required)
- `last_n_rounds` (integer)

### `get_health_context` (~97 tokens)

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.

Input parameters:

- `date`
- `round_id`

### `correlate_health_performance` (~171 tokens)

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.

Input parameters:

- `health_metric` (string)
- `last_n_rounds` (integer)
- `performance_metric` (string)

### `query_golf_data` (~88 tokens)

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.

Input parameters:

- `sql` (string, required)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/mbrionesalvarez-caddie-mcp/caddie-mcp#diagnostics

## Score history

- 2026-08-18: 68
- 2026-08-17: 68
- 2026-08-16: 68
- 2026-08-15: 68
- 2026-08-14: 68
- 2026-08-13: 68
- 2026-08-12: 68
- 2026-08-11: 53

## Links

- PyPI project: https://pypi.org/project/caddie-mcp/
- Socket report: https://socket.dev/pypi/package/caddie-mcp
- Repository: https://github.com/mbrionesalvarez/caddie-mcp
- Changelog RSS feed: https://verifymcp.io/servers/mbrionesalvarez-caddie-mcp/caddie-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/mbrionesalvarez-caddie-mcp/caddie-mcp.json
- HTML version of this page: https://verifymcp.io/servers/mbrionesalvarez-caddie-mcp/caddie-mcp
