# GolfData

> Golf equipment catalog, live retailer prices and daily price history. Keyless search, free key.

- name: co.golfdata/golfdata
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 63/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/co.golfdata%2Fgolfdata
- tools: https://api.protogrid.dev/v1/servers/co.golfdata%2Fgolfdata/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "golfdata": {
      "type": "http",
      "url": "https://golfdata.co/mcp",
      "headers": {
        "x-api-key": "${X_API_KEY}"
      }
    }
  }
}
```

Placeholders to fill: `${X_API_KEY}`.

## Trust

- hygiene: 80
- liveness: 99
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-97% ~updated-34d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 63/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_buy_link (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_verified_offer (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); search_products (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,370 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 8 tool changes in 30 days
- fail `stability.rug_pull`: 2 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 1,370 tokens to load them all
- tool set hash: e102a99260e294aaefd06eac62bd44ed
- tools last changed: 2026-10-10T18:24:11.363Z
- badge: [![protogrid quality](https://protogrid.dev/badge/co.golfdata/golfdata.svg)](https://protogrid.dev/servers/co.golfdata/golfdata)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-10 `compare_prices` changed (description)
  - before: Dated advertised retailer observations for one product plus min, max and median, and recorded 30 and 90 day lows. Coverage varies; these are not exact-variant verified purchase quotes.
  - after: Dated advertised retailer observations for one product plus min, max and median, and recorded 30 and 90 day lows. Coverage varies; these are not exact-variant verified purchase quotes. Every price carries observed_at and expires_at; do not quote after expires_at.
- 2026-10-10 `get_price_history` changed (description)
  - before: Dated price observations per retailer, where available. Coverage and refresh times vary by source. These rows are asking prices, not proof that a discount or stock state is current.
  - after: Dated price observations per retailer, where available. Coverage and refresh times vary by source. These rows are asking prices, not proof that a discount or stock state is current. Every price carries observed_at and expires_at; do not quote after expires_at.
- 2026-10-10 `get_current_prices` changed (description)
  - before: Latest stored advertised prices for one canonical product, with stock observations and stored affiliate links. These are not exact-variant verified buyable offers; use get_verified_offer when a marketplace source ID is known.
  - after: Latest stored advertised prices for one canonical product, with stock observations and stored affiliate links. These are not exact-variant verified buyable offers; use get_verified_offer when a marketplace source ID is known. Every price carries observed_at and expires_at; do not quote after expires_at.
- 2026-10-10 `get_verified_offers` changed (description)
  - before: Discover admitted marketplace sources for a canonical product ID from search_products, then verify each returned offer through Chip's exact-source commerce gate. If variant_id is omitted or null on a variant-bearing product, returns selection_metadata_not_offer options; unsourced specs stay unknown. Supply the exact variant UUID to get offers. Two sources checked per page within a bounded 16-source live window, use next_offset; this is not exhaustive catalog coverage or a stable snapshot. Results retain golf-offer.v1, including check_price and unknown currency. No member actions or click attribution. Deployment may be disabled (503).
  - after: Discover admitted marketplace sources for a canonical product ID from search_products, then verify each returned offer through Chip's exact-source commerce gate. If variant_id is omitted or null on a variant-bearing product, returns selection_metadata_not_offer options; unsourced specs stay unknown. Supply the exact variant UUID to get offers. Two sources checked per page within a bounded 16-source live window, use next_offset; this is not exhaustive catalog coverage or a stable snapshot. Results retain golf-offer.v1, including check_price and unknown currency. No member actions or click attribution. Deployment may be disabled (503). Every price carries observed_at and expires_at; do not quote after expires_at.
- 2026-10-10 `get_verified_offer` changed (description)
  - before: Read-only golf-offer.v1 using Chip's admission, exact-variant and live redirect gate. Requires a known 27aDay marketplace deal/product source UUID; search_products returns canonical IDs, not these source IDs. Explicit variant_id null means no selectable variant. Returns verified_offer, check_price or unavailable; unknown currency/ratings stay unknown. No account actions, click attribution or purchase is performed. Deployment may be disabled (503).
  - after: Read-only golf-offer.v1 using Chip's admission, exact-variant and live redirect gate. Requires a known 27aDay marketplace deal/product source UUID; search_products returns canonical IDs, not these source IDs. Explicit variant_id null means no selectable variant. Returns verified_offer, check_price or unavailable; unknown currency/ratings stay unknown. No account actions, click attribution or purchase is performed. Deployment may be disabled (503). Every price carries observed_at and expires_at; do not quote after expires_at.
- 2026-10-10 `get_buy_link` added
  - Tracked 27aDay buy link for one marketplace source (source_kind and source_id from get_verified_offer(s), the offer's source ids). Returns a members.27aday.com/go URL carrying a one time ticket issued to your API key; hand it to the shopper unchanged. The link opens the retailer; no purchase or account action happens here. Free with a key. May return 503 when disabled.
- 2026-09-26 `compare_prices` changed (description) **meaning changed**
  - before: Current retailer prices for one product plus min, max and median, and the 30 and 90 day lows. The single call to answer 'is this a good price right now'.
  - after: Dated advertised retailer observations for one product plus min, max and median, and recorded 30 and 90 day lows. Coverage varies; these are not exact-variant verified purchase quotes.
- 2026-09-24 `get_price_history` changed (description) **meaning changed**
  - before: Daily price snapshot series per retailer. Snapshots run unbroken across retailers, so this answers whether a discount is genuine rather than a marked-up list price.
  - after: Dated price observations per retailer, where available. Coverage and refresh times vary by source. These rows are asking prices, not proof that a discount or stock state is current.

Full history: https://api.protogrid.dev/v1/servers/co.golfdata%2Fgolfdata/changes

## Remotes

- https://golfdata.co/mcp (streamable-http, auth none, reachable true, uptime30d 0.9745763)

## Packages

_none_

## Tools (8)

- `compare_prices`: Dated advertised retailer observations for one product plus min, max and median, and recorded 30 and 90 day lows. Coverage varies; these are not exact-variant verified purchase quotes. Every price carries observed_at and expires_at; do not quote after expires_at.
- `get_buy_link`: Tracked 27aDay buy link for one marketplace source (source_kind and source_id from get_verified_offer(s), the offer's source ids). Returns a members.27aday.com/go URL carrying a one time ticket issued to your API key; hand it to the shopper unchanged. The link opens the retailer; no purchase or account action happens here. Free with a key. May return 503 when disabled.
- `get_current_prices`: Latest stored advertised prices for one canonical product, with stock observations and stored affiliate links. These are not exact-variant verified buyable offers; use get_verified_offer when a marketplace source ID is known. Every price carries observed_at and expires_at; do not quote after expires_at.
- `get_price_history`: Dated price observations per retailer, where available. Coverage and refresh times vary by source. These rows are asking prices, not proof that a discount or stock state is current. Every price carries observed_at and expires_at; do not quote after expires_at.
- `get_product`: One product plus its enrichment_sources provenance rows. Every enriched field carries the source URL, confidence and checked_at it came from. Check enrichment_status before relying on specs: 'enriched' means model, release_year, msrp, description and specs are all sourced; 'partial' means some are missing.
- `get_verified_offer`: Read-only golf-offer.v1 using Chip's admission, exact-variant and live redirect gate. Requires a known 27aDay marketplace deal/product source UUID; search_products returns canonical IDs, not these source IDs. Explicit variant_id null means no selectable variant. Returns verified_offer, check_price or unavailable; unknown currency/ratings stay unknown. No account actions, click attribution or purchase is performed. Deployment may be disabled (503). Every price carries observed_at and expires_at; do not quote after expires_at.
- `get_verified_offers`: Discover admitted marketplace sources for a canonical product ID from search_products, then verify each returned offer through Chip's exact-source commerce gate. If variant_id is omitted or null on a variant-bearing product, returns selection_metadata_not_offer options; unsourced specs stay unknown. Supply the exact variant UUID to get offers. Two sources checked per page within a bounded 16-source live window, use next_offset; this is not exhaustive catalog coverage or a stable snapshot. Results retain golf-offer.v1, including check_price and unknown currency. No member actions or click attribution. Deployment may be disabled (503). Every price carries observed_at and expires_at; do not quote after expires_at.
- `search_products`: Search the canonical golf equipment catalog by brand, category, or free text. Call this first to resolve a product_id for the other tools. Categories: drivers, iron-sets, wedges, putters, fairway-woods, hybrids, balls, bags, shoes, gloves, apparel, headcovers, complete-sets, accessories, tech, rangefinders, grips.
