Golf Intelligence, by Stracka

El conjunto de datos de campos de golf de mayor calidad para desarrolladores que crean una aplicación de golf: 20 años de mapeo propietario, actualizado a diario, con tarjetas de puntuación, GPS y greens en 3D vía API.

Documentación

Golf Intelligence, by Stracka

Golf Intelligence, by Stracka. Datos de campos de golf propietarios de StrackaGolf para desarrolladores que crean una aplicación de golf, actualizados diariamente. La búsqueda es gratuita. Tarjetas de puntuación, GPS y greens en 3D están disponibles a través de la API.

Golf Intelligence proporciona datos de campos de golf propietarios de StrackaGolf, actualizados diariamente. Obtén más información en golfintelligence.com.

Este repositorio es el plugin instalable de Cursor / Grok Bot con el identificador golf. El código fuente de la aplicación del marketplace de Cursor es la URL pública de GitHub:

https://github.com/golf-data/golf

Los revisores del marketplace pueden enviar esa URL en cursor.com/marketplace/publish. El título del catálogo es Golf Intelligence, by Stracka.

El mcp.json incluido se conecta al MCP alojado en https://mcp.golfintelligence.com/mcp a través de Streamable HTTP, por lo que instalar el plugin nunca depende de una compilación local de Node. Tus credenciales de consola viajan como los encabezados X-GI-Client-ID y X-GI-Active-Token, completados desde las variables del plugin declaradas en .cursor-plugin/plugin.json.

Las versiones anteriores lanzaban node contra un dist/index.js relativo al plugin. Cursor no expande la variable ${PLUGIN_ROOT} de Agent Plugins, por lo que ese marcador de posición llegaba a Node literalmente y el conector fallaba con Cannot find module '.../${PLUGIN_ROOT}/dist/index.js'. El conector alojado elimina ese modo de fallo por completo.

mcp.stdio.json mantiene el servidor stdio local para uso sin conexión y de desarrollo. No se detecta automáticamente; copia su entrada golf en .cursor/mcp.json (usando ${workspaceFolder} en un checkout) o apunta mcpServers a él. Cualquier configuración stdio local debe usar ${CURSOR_PLUGIN_ROOT}, nunca ${PLUGIN_ROOT}. El paquete dist/index.js confirmado se incluye en el repositorio y en el paquete MCPB, por lo que la ruta stdio funciona sin ejecutar una compilación primero.

El nombre oficial del Registro MCP es io.github.golf-data/golf. El registro no acepta un nombre golf simple. Los identificadores de plugin de Cursor, Agent Plugins y Claude Code siguen siendo golf.

Obtén acceso a la API

Inicia sesión en console.golfintelligence.com sin contraseña: ingresa tu correo electrónico en la página de inicio de sesión, solicita un código de verificación y luego ingresa el código después de que se envíe. Crea una Cuenta de API y configura las dos variables requeridas del plugin:

  • GI_CLIENT_ID: tu ID de Cliente
  • GI_ACTIVE_TOKEN: tu Token Activo

El Token Activo se intercambia por un token de portador de corta duración. No es un token de portador; no pegues un token de portador en GI_ACTIVE_TOKEN.

Usa credenciales de tu propia cuenta de consola. Este proyecto no proporciona tokens de demostración.

Los planes son mensuales y se pueden actualizar o degradar de forma autónoma en la consola:

  • Tester: $49/mes por 100 créditos/mes.
  • Starter: $399/mes por 10,000 créditos/mes.

Para facturación, créditos, planes, inicio de sesión o ayuda con credenciales, envía un correo a support@golfintelligence.com. Para actualizaciones de datos de campos, envía un correo a data@golfintelligence.com.

Herramientas y créditos

Busca siempre primero. search_course_groups es gratuito. Antes de cada llamada de pago, el usuario debe confirmar explícitamente el costo indicado; el servidor rechaza herramientas de pago a menos que confirm_spend=true.

HerramientaQué devuelveCréditos
search_course_groupsResultados de búsqueda de grupos de campos0
get_course_group_scorecardDatos de tarjeta de puntuación1
get_course_group_gpsGeometría y coordenadas de campos mapeados2
get_course_group_detailDatos detallados de grupos de campos3
get_green_slope_imageImagen de pendiente de green vertical o cuadrada1

Autenticación

El servidor stdio local y los encabezados de credenciales HTTP heredados por usuario intercambian las credenciales configuradas con:

POST https://api.golfintelligence.com/auth/authenticateToken
grant_type=client_credentials
code=<GI_ACTIVE_TOKEN>
client_id=<GI_CLIENT_ID>

Envía el access_token devuelto como Authorization: Bearer <access_token>, lo almacena en caché solo en memoria y lo actualiza una vez después de un HTTP 401. Las credenciales nunca se registran.

El MCP alojado además implementa el flujo de código de autorización OAuth 2.1 con S256 PKCE para ChatGPT. Su página de autorización dedicada acepta el ID de Cliente y el Token Activo de la consola de cada usuario, los valida con Golf Intelligence y vincula esa cuenta a tokens de acceso y actualización cifrados. Consulta docs/OPENAI-CHATGPT-OAUTH.md para las URL de descubrimiento, la configuración del portal de OpenAI, los pasos para revisores y los secretos de implementación.

Streamable HTTP

El MCP alojado está disponible a través del transporte oficial MCP Streamable HTTP en:

https://mcp.golfintelligence.com/mcp

El punto de entrada HTTP de producción sirve ese transporte en /mcp y una verificación de salud en /health. Para la verificación de dominio de OpenAI Apps, también sirve GET /.well-known/openai-apps-challenge como text/plain cuando OPENAI_APPS_CHALLENGE_TOKEN (o OPENAI_APPS_CHALLENGE) está configurado; de lo contrario, esa ruta devuelve 404. Inicia el servidor HTTP localmente con:

npm run build
PORT=3000 npm run start:http

Se vincula a 0.0.0.0:$PORT. El punto de entrada stdio node dist/index.js existente y todos los paquetes de plugins permanecen sin cambios.

El servicio HTTP acepta la identidad de Golf Intelligence en cualquiera de estas formas:

  1. Un token de portador OAuth emitido por este servicio después de que el usuario inicie sesión con su propia cuenta de GI.
  2. Encabezados heredados X-GI-Client-ID y X-GI-Active-Token proporcionados juntos en cada solicitud MCP por instalaciones de plugins existentes.

Deliberadamente no hay un respaldo GI_CLIENT_ID / GI_ACTIVE_TOKEN a nivel de servidor. El punto de entrada HTTP ignora esas variables de entorno, por lo que un llamante anónimo no puede heredar una cuenta de implementación ni gastar sus créditos. Un OAuth faltante o inválido devuelve HTTP 401 con un desafío de recurso protegido OAuth. El Token Activo es una credencial de intercambio y no debe enviarse como un valor Authorization: Bearer.

Cada herramienta anuncia explícitamente estas anotaciones MCP:

  • readOnlyHint: true — cada herramienta solo recupera datos de campos.
  • openWorldHint: false — ninguna herramienta escribe en sistemas públicos o externos.
  • destructiveHint: false — ninguna herramienta elimina, sobrescribe, publica o envía nada.
  • idempotentHint: true para búsqueda gratuita.
  • idempotentHint: false para herramientas de pago porque cada invocación de pago repetida puede consumir créditos nuevamente.

Estas frases también se pueden usar como justificaciones de anotación en el formulario de envío de OpenAI. Las consultas de pago aún requieren confirm_spend=true con los mismos costos de crédito documentados anteriormente.

Implementación en contenedor

Dockerfile compila ambos transportes sin incrustar credenciales. fly.toml configura un pequeño servicio de Fly.io y verifica /health. Antes de la primera implementación, confirma que el nombre de la aplicación de Fly globalmente único esté disponible (o cambia app), luego configura los secretos de OAuth documentados en docs/OPENAI-CHATGPT-OAUTH.md e implementa. Como mínimo:

fly volumes create oauth_state --region ord --size 1
fly secrets set OAUTH_ENCRYPTION_KEY="$(openssl rand -base64 32)"
fly secrets set OAUTH_ISSUER=https://mcp.golfintelligence.com
fly secrets set OPENAI_APPS_CHALLENGE_TOKEN=...
fly deploy

El volumen montado almacena el estado de reproducción/rotación de OAuth, no las credenciales de GI. Ejecuta una Máquina para este almacén de estado respaldado por archivos.

No configures una cuenta de GI compartida para llamantes HTTP alojados. Si GI_CLIENT_ID / GI_ACTIVE_TOKEN existen para un flujo de trabajo de arranque o stdio separado, no autorizan solicitudes HTTP.

Configura OPENAI_APPS_CHALLENGE_TOKEN con el token que se muestra en la verificación de dominio de OpenAI Platform. No confirmes ese token. Después de la implementación, GET https://mcp.golfintelligence.com/.well-known/openai-apps-challenge debería devolver el token como text/plain.

Los nombres y descripciones de las herramientas están integrados en el paquete implementado, por lo que el MCP alojado sigue sirviendo la copia anterior hasta que se vuelva a implementar. Vuelve a implementar antes de actualizar la lista del marketplace y sigue docs/RELEASE.md para el orden completo entre Fly, el marketplace y el Registro MCP.

Estructura del repositorio

  • .cursor-plugin/plugin.json — manifiesto del marketplace de Cursor y variables requeridas
  • plugin.json — manifiesto de estándar abierto de Agent Plugins (identificador golf)
  • .claude-plugin/plugin.json — manifiesto de plugin de Claude Code / Cowork (identificador golf)
  • server.json — metadatos oficiales del Registro MCP (io.github.golf-data/golf)
  • manifest.json — manifiesto del paquete MCPB para el servidor Node stdio
  • .github/workflows/publish-mcp.yml — publica io.github.golf-data/golf en el Registro MCP oficial a través de GitHub OIDC
  • mcp.json — conector golf incluido que apunta al punto final MCP alojado
  • mcp.stdio.json — configuración stdio local opcional para desarrollo sin conexión
  • skills/golf/SKILL.md — guía de flujo de trabajo y confirmación de gastos
  • docs/SMOKE-CHECKLIST.md — pasos de verificación posteriores a la implementación y publicación
  • docs/RELEASE.md — manual de operaciones de reimplementación de Fly, lanzamiento de GitHub y publicación en el registro
  • src/ — servidor MCP TypeScript y cliente de API
  • dist/index.js — paquete ESM stdio confirmado utilizado por los instaladores
  • dist/http.js — paquete ESM Streamable HTTP confirmado utilizado por el contenedor
  • Dockerfile y fly.toml — contenedor HTTP de producción y servicio de Fly.io

Para desarrollo con Node.js 18 o más reciente:

npm install
npm test
npm run build
npm run pack:mcpb

pack:mcpb usa la CLI oficial @anthropic-ai/mcpb pack para producir golf.mcpb y escribe su SHA-256 en server.json. Los lanzamientos de GitHub alojan ese activo en https://github.com/golf-data/golf/releases/download/v1.0.2/golf.mcpb.

El código del plugin está disponible bajo la Licencia MIT. Los datos de la API de Golf Intelligence siguen sujetos a los términos en golfintelligence.com.