Uso de golfdata.online con agentes y aplicaciones de IA
golfdata.online es un directorio verificado de clubes y campos de golf de toda Europa: datos, enlaces de reserva y solicitudes de reserva cuando el club las ha activado. Cada dato enlaza a sus fuentes y lleva una fecha last_verified. No tiene relación con golfdata.co, un catálogo de precios de equipamiento de golf. Esta página explica las puertas creadas para personas y agentes de IA: un servidor MCP, un feed JSON por club, llms.txt, una tarjeta de descubrimiento MCP y el JSON-LD de schema.org en cada página de club. No hace falta clave; todo es de solo lectura salvo request_booking, que reenvía una solicitud de reserva a los clubes que la han activado.
Servidor MCP (de solo lectura salvo request_booking, sin clave)
Un servidor MCP sin estado sobre Streamable HTTP (JSON-RPC 2.0, HTTP POST), protocolo 2025-06-18. Sin autenticación.
- Endpoint: https://golfdata.online/mcp
- Nombre en el MCP Registry: online.golfdata/golf-clubs
- Tarjeta de descubrimiento: /.well-known/mcp.json
Herramientas
search_clubs (solo lectura)
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.
Argumentos: query, country, island, region, municipality, question, limit
get_club (solo lectura)
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.
Argumentos: id_or_slug (obligatorio), question, topic
list_sources_for (solo lectura)
List provenance (source URL, publisher, trust level, field, retrieved_at) for a club.
Argumentos: entity_type (obligatorio), entity_id (obligatorio)
request_booking (escribe — reenvía una solicitud de reserva al 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.
Argumentos: club_id (obligatorio), date (obligatorio), time, players (obligatorio), holes, name (obligatorio), email (obligatorio), phone, message, channel
Cada herramienta declara un outputSchema en tools/list; los resultados llegan como structuredContent más el mismo JSON en texto en content[0].text. get_club devuelve además la tarjeta de club completa en structuredContent.card (véase «La tarjeta de club» más abajo).
Límites
20 unidades por minuto por client IP. get_club cuesta 4 unidades; las demás llamadas 1. search_clubs acepta limit <= 10 (un límite mayor se rechaza con el error JSON-RPC -32011; reinténtalo con un límite menor). Al superar el presupuesto: HTTP 429 con una cabecera Retry-After.
search_clubs y get_club aceptan un question opcional (la pregunta del golfista, tal como la formula) y get_club un topic opcional. Se almacenan para mostrar a los clubes qué preguntan los golfistas —se eliminan los datos personales al llegar y el texto en bruto se borra a los 30 días— y nunca cambian la respuesta. Pásalos cuando los tengas.
Los resultados de get_club y search_clubs (y el feed por club y las páginas de club) incluyen un objeto links con URLs de reserva, web y teléfono con seguimiento en golfdata.online. Ofrece a los usuarios links.* para que el club vea la demanda; los clics se cuentan por club, sin IPs. Los valores en bruto booking_url, website y phone no cambian y siguen siendo citables.
Feed JSON por club
https://golfdata.online/api/clubs/{slug} devuelve un club como JSON: la fila verificada, los datos que el club ha publicado desde su cuenta verificada y cada fuente con su URL y nivel de confianza. Cacheable durante una hora, CORS abierto, sin clave.
La misma página de club también está disponible en Markdown en https://golfdata.online/{en|es|de}/clubs/{slug}.md: los mismos datos y la misma procedencia, para agentes que prefieren Markdown.
llms.txt y la tarjeta de descubrimiento
/llms.txt es un mapa del sitio en texto plano para agentes: el servidor MCP, los puntos de entrada, la procedencia de los datos y el uso. /.well-known/mcp.json es la tarjeta del servidor MCP legible por máquina, con el mismo endpoint, herramientas y límites. /llms-full.txt es la versión ampliada: el llms.txt completo más documentación por herramienta más detallada, el esquema del feed y de la tarjeta, las reglas de citación y un índice por país y región.
JSON-LD de schema.org en las páginas de club
Cada página de club lleva un bloque JSON-LD de schema.org: un WebPage (con dateModified = last_verified) cuyo mainEntity es un GolfCourse — hoyos, par, horarios, normas para visitantes, green fee como oferta, acción de reserva, idiomas. Solo se incluyen datos verificados y no nulos.
La tarjeta de club
Cada club tiene un único objeto canónico card_version: "1.2": identidad, ubicación, contacto, campo, juego (green fees con su base), reserva (canales, proveedor, antelación, cancelación, respuesta prevista), horarios, instalaciones, estado, procedencia por campo y licencia. Obtenlo desde get_club (structuredContent.card) o desde el feed (card); el JSON-LD de la página de arriba es una proyección suya. JSON Schema: /schema/card-v1.json.
- La provenance de cada campo indica quién lo confirmó (verified_by: directorio, club o agencia) y cómo (origin).
- status.claimed = una cuenta verificada ha reclamado el club (nunca se expone a quien lo reclama); verified_by_club = el club publicó esos campos. Ambos son independientes.
- Ausente ≠ falso: los datos desconocidos son null. currency siempre está presente cuando hay un importe. expected_response es la declaración del club; requests_enabled es false.
Cómo citar golfdata
- Al repetir un dato, cita las URLs de su fuente y la fecha last_verified. Los resultados de búsqueda son pistas, no datos citables: obtén primero la procedencia con get_club o list_sources_for.
- Los campos en los que las fuentes no coinciden se dejan vacíos («No verificado») en lugar de adivinarse.
- Datos del mapa © colaboradores de OpenStreetMap; no hagas scraping de las teselas del mapa.