Using golfdata.online with AI agents and apps
golfdata.online is a verified directory of golf clubs and courses across Europe — facts, booking links, and booking requests where the club enabled them. Every fact links to its sources and carries a last_verified date. It is not related to golfdata.co, a golf-equipment price catalogue. This page explains the doors built for people and AI agents: an MCP server, a per-club JSON feed, llms.txt, an MCP discovery card, and schema.org JSON-LD on every club page. No key is needed; everything is read-only except request_booking, which forwards a booking request to clubs that enabled it.
MCP server (read-only except request_booking, no key)
A stateless MCP server over Streamable HTTP (JSON-RPC 2.0, HTTP POST), protocol 2025-06-18. No authentication.
- Endpoint: https://golfdata.online/mcp
- MCP Registry name: online.golfdata/golf-clubs
- Discovery card: /.well-known/mcp.json
Tools
search_clubs (read-only)
Search approved golf clubs and courses across Europe by a free-text fragment (matches name, island, municipality or region), and/or ISO country code, island, region and municipality filters. Returns summary records (with last_verified) only; fetch provenance with get_club or list_sources_for before citing.
Arguments: query, country, island, region, municipality, question, limit
get_club (read-only)
Get one approved club by UUID or slug, with all facts, sources[] and club_facts (what the club itself published from its verified account), or found: false.
Arguments: id_or_slug (required), question, topic
list_sources_for (read-only)
List provenance (source URL, publisher, trust level, field, retrieved_at) for a club.
Arguments: entity_type (required), entity_id (required)
request_booking (writes — forwards a booking request to the club)
Send a booking request to a club whose card says booking.requests_enabled is true. golfdata only forwards the request to the club (by email or a WhatsApp link); it does not confirm the booking. Returns a request id and, for the WhatsApp channel, a tracked link. Only works for enabled clubs; get the golfer's consent before sending their personal data. The golfer's details are forwarded to the club and kept for 24 months, then anonymized; a golfer can ask to erase them sooner via hello@golfdata.online.
Arguments: club_id (required), date (required), time, players (required), holes, name (required), email (required), phone, message, channel
Every tool declares an outputSchema in tools/list; results come as structuredContent plus the same JSON as text in content[0].text. get_club also returns the full club card as structuredContent.card (see “The club card” below).
Limits
20 units per minute per client IP. get_club costs 4 units; other calls 1. search_clubs accepts limit <= 10 (a larger limit is refused with JSON-RPC error -32011; retry with a smaller limit). Over the budget: HTTP 429 with a Retry-After header.
search_clubs and get_club accept an optional question (the golfer's question, as asked) and get_club an optional topic. They are stored to show clubs what golfers ask — personal data removed on arrival, raw text deleted after 30 days — and never change the answer. Pass them when you have one.
get_club and search_clubs results (and the per-club feed and club pages) include a links object with tracked booking, website and phone URLs on golfdata.online. Give users links.* so the club can see demand for it — clicks are counted per club, with no IPs. The raw booking_url, website and phone values are unchanged and stay citable.
Per-club JSON feed
https://golfdata.online/api/clubs/{slug} returns one club as JSON: the verified row, the facts the club published from its verified account, and every source with its URL and trust level. Cacheable for one hour, CORS open, no key.
The same club page is also available as Markdown at https://golfdata.online/{en|es|de}/clubs/{slug}.md — the same facts and provenance, for agents that prefer Markdown.
llms.txt and the discovery card
/llms.txt is a plain-text map of the site for agents: the MCP server, entry points, data provenance and usage. /.well-known/mcp.json is the machine-readable MCP server card with the same endpoint, tools and limits. /llms-full.txt is the extended version: the full llms.txt plus fuller per-tool docs, the feed and card schema, citation rules and a country/region index.
schema.org JSON-LD on club pages
Every club page carries a schema.org JSON-LD block: a WebPage (with dateModified = last_verified) whose mainEntity is a GolfCourse — holes, par, hours, visitor rules, green fee as an offer, booking action, languages. Only verified, non-null facts are included.
The club card
Every club has one canonical card_version: "1.2" object: identity, location, contact, course, play (green fees with a basis), booking (channels, provider, lead time, cancellation, expected response), hours, facilities, status, per-field provenance and licence. Get it from get_club (structuredContent.card) or the feed (card); the page JSON-LD above is a projection of it. JSON Schema: /schema/card-v1.json.
- Each field's provenance says who confirmed it (verified_by: directory, club or agency) and how (origin).
- status.claimed = a verified account claimed the club (never the claimant); verified_by_club = the club published those fields. Both independent.
- Absent ≠ false: unknown facts are null. currency is always present with an amount. expected_response is the club's statement; requests_enabled is false.
Citing golfdata
- When repeating a fact, cite its source URLs and the last_verified date. Search results are leads, not citable facts: fetch provenance with get_club or list_sources_for first.
- Fields where sources disagree are left empty (“Not verified”) rather than guessed.
- Map data © OpenStreetMap contributors; do not scrape map tiles.