Golf Intelligence, by Stracka

O conjunto de dados de campos de golfe da mais alta qualidade para desenvolvedores que criam um app de golfe: 20 anos de mapeamento proprietário, atualizado diariamente, com placares, GPS e greens em 3D via API.

Documentação

Golf Intelligence, by Stracka

Golf Intelligence, by Stracka. Dados proprietários de campos da StrackaGolf para desenvolvedores que criam um aplicativo de golfe, atualizados diariamente. A busca é gratuita. Scorecards, GPS e greens 3D estão disponíveis via API.

O Golf Intelligence fornece dados proprietários de campos da StrackaGolf, atualizados diariamente. Saiba mais em golfintelligence.com.

Este repositório é o plugin instalável do Cursor / Grok Bot com o identificador golf. O código-fonte do aplicativo do marketplace do Cursor é a URL pública do GitHub:

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

Revisores do marketplace podem enviar essa URL em cursor.com/marketplace/publish. O título do catálogo é Golf Intelligence, by Stracka.

O mcp.json incluído conecta-se ao MCP hospedado em https://mcp.golfintelligence.com/mcp via Streamable HTTP, portanto, instalar o plugin nunca depende de uma compilação Node local. Suas credenciais de console viajam como os cabeçalhos X-GI-Client-ID e X-GI-Active-Token, preenchidos a partir das variáveis do plugin declaradas em .cursor-plugin/plugin.json.

Versões anteriores lançaram node contra um dist/index.js relativo ao plugin. O Cursor não expande a variável ${PLUGIN_ROOT} dos Agent Plugins, então esse placeholder chegava ao Node literalmente e o conector falhava com Cannot find module '.../${PLUGIN_ROOT}/dist/index.js'. O conector hospedado elimina completamente esse modo de falha.

mcp.stdio.json mantém o servidor stdio local para uso offline e de desenvolvimento. Ele não é descoberto automaticamente; copie sua entrada golf para .cursor/mcp.json (usando ${workspaceFolder} em um checkout) ou aponte mcpServers para ele. Qualquer configuração stdio local deve usar ${CURSOR_PLUGIN_ROOT}, nunca ${PLUGIN_ROOT}. O bundle dist/index.js incluído é distribuído no repositório e no pacote MCPB, portanto, o caminho stdio funciona sem executar uma compilação antes.

O nome oficial do MCP Registry é io.github.golf-data/golf. O registry não aceita um nome golf simples. Os identificadores de plugin do Cursor, Agent Plugins e Claude Code permanecem golf.

Obtenha acesso à API

Entre em console.golfintelligence.com sem senha: insira seu e-mail na página de login, solicite um código de verificação e insira o código após ele ser enviado. Crie uma conta de API e configure as duas variáveis obrigatórias do plugin:

  • GI_CLIENT_ID: seu Client ID
  • GI_ACTIVE_TOKEN: seu Active Token

O Active Token é trocado por um token bearer de curta duração. Ele não é um token bearer; não cole um token bearer em GI_ACTIVE_TOKEN.

Use credenciais da sua própria conta de console. Este projeto não fornece tokens de demonstração.

Os planos são mensais e podem ser atualizados ou rebaixados de forma autônoma no console:

  • Tester: US$ 49/mês por 100 créditos/mês.
  • Starter: US$ 399/mês por 10.000 créditos/mês.

Para cobrança, créditos, planos, login ou ajuda com credenciais, envie um e-mail para support@golfintelligence.com. Para atualizações de dados de campos, envie um e-mail para data@golfintelligence.com.

Ferramentas e créditos

Sempre busque primeiro. search_course_groups é gratuito. Antes de cada chamada paga, o usuário deve confirmar explicitamente o custo informado; o servidor recusa ferramentas pagas a menos que confirm_spend=true.

FerramentaO que retornaCréditos
search_course_groupsResultados de busca por grupo de campos0
get_course_group_scorecardDados de scorecard1
get_course_group_gpsGeometria e coordenadas mapeadas do campo2
get_course_group_detailDados detalhados do grupo de campos3
get_green_slope_imageImagem de inclinação do green em retrato ou quadrado1

Autenticação

O servidor stdio local e os cabeçalhos HTTP legados de credenciais por usuário trocam as credenciais configuradas com:

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

Ele envia o access_token retornado como Authorization: Bearer <access_token>, armazena em cache apenas em memória e atualiza uma vez após um HTTP 401. As credenciais nunca são registradas em log.

O MCP hospedado também implementa o fluxo de código de autorização OAuth 2.1 com S256 PKCE para ChatGPT. Sua página de autorização dedicada aceita o Client ID e o Active Token do console de cada usuário, valida-os com o Golf Intelligence e vincula essa conta a tokens de acesso e atualização criptografados. Consulte docs/OPENAI-CHATGPT-OAUTH.md para URLs de descoberta, configurações do portal OpenAI, etapas de revisão e segredos de implantação.

Streamable HTTP

O MCP hospedado está disponível via transporte oficial MCP Streamable HTTP em:

https://mcp.golfintelligence.com/mcp

O endpoint HTTP de produção atende a esse transporte em /mcp e uma verificação de saúde em /health. Para verificação de domínio de OpenAI Apps, ele também atende GET /.well-known/openai-apps-challenge como text/plain quando OPENAI_APPS_CHALLENGE_TOKEN (ou OPENAI_APPS_CHALLENGE) está definido; caso contrário, esse caminho retorna 404. Inicie o servidor HTTP localmente com:

npm run build
PORT=3000 npm run start:http

Ele vincula-se a 0.0.0.0:$PORT. O endpoint stdio node dist/index.js existente e todos os pacotes de plugin permanecem inalterados.

O serviço HTTP aceita a identidade do Golf Intelligence em qualquer uma destas formas:

  1. Um token bearer OAuth emitido por este serviço após o usuário entrar com sua própria conta GI.
  2. Cabeçalhos legados X-GI-Client-ID e X-GI-Active-Token fornecidos juntos em cada solicitação MCP por instalações de plugin existentes.

Não há deliberadamente nenhum fallback de GI_CLIENT_ID / GI_ACTIVE_TOKEN em todo o servidor. O endpoint HTTP ignora essas variáveis de ambiente, portanto, um chamador anônimo não pode herdar uma conta de implantação ou gastar seus créditos. OAuth ausente ou inválido retorna HTTP 401 com um desafio de recurso protegido OAuth. O Active Token é uma credencial de troca e não deve ser enviado como um valor de Authorization: Bearer.

Cada ferramenta anuncia explicitamente estas anotações MCP:

  • readOnlyHint: true — cada ferramenta apenas recupera dados de campos.
  • openWorldHint: false — nenhuma ferramenta grava em sistemas públicos ou externos.
  • destructiveHint: false — nenhuma ferramenta exclui, sobrescreve, publica ou envia qualquer coisa.
  • idempotentHint: true para busca gratuita.
  • idempotentHint: false para ferramentas pagas porque cada invocação paga repetida pode consumir créditos novamente.

Essas frases também podem ser usadas como justificativas de anotação no formulário de envio da OpenAI. Consultas pagas ainda exigem confirm_spend=true com os mesmos custos de crédito documentados acima.

Implantação em contêiner

Dockerfile compila ambos os transportes sem incorporar credenciais. fly.toml configura um pequeno serviço Fly.io e verifica /health. Antes da primeira implantação, confirme se o nome do aplicativo Fly globalmente exclusivo está disponível (ou altere app), depois configure os segredos OAuth documentados em docs/OPENAI-CHATGPT-OAUTH.md e implante. No 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

O volume montado armazena o estado de replay/rotação do OAuth, não credenciais GI. Execute uma Machine para este armazenamento de estado baseado em arquivo.

Não configure uma conta GI compartilhada para chamadores HTTP hospedados. Se GI_CLIENT_ID / GI_ACTIVE_TOKEN existirem para um fluxo de bootstrap ou stdio separado, eles não autorizam solicitações HTTP.

Defina OPENAI_APPS_CHALLENGE_TOKEN para o token mostrado na verificação de domínio do OpenAI Platform. Não faça commit desse token. Após a implantação, GET https://mcp.golfintelligence.com/.well-known/openai-apps-challenge deve retornar o token como text/plain.

Nomes e descrições de ferramentas são incorporados ao bundle implantado, portanto, o MCP hospedado continua servindo a cópia anterior até ser reimplantado. Reimplante antes de atualizar a listagem do marketplace e siga docs/RELEASE.md para a ordem completa entre Fly, o marketplace e o MCP Registry.

Estrutura do repositório

  • .cursor-plugin/plugin.json — manifesto do marketplace do Cursor e variáveis obrigatórias
  • plugin.json — manifesto de padrão aberto dos Agent Plugins (identificador golf)
  • .claude-plugin/plugin.json — manifesto do plugin Claude Code / Cowork (identificador golf)
  • server.json — metadados oficiais do MCP Registry (io.github.golf-data/golf)
  • manifest.json — manifesto do bundle MCPB para o servidor Node stdio
  • .github/workflows/publish-mcp.yml — publica io.github.golf-data/golf no MCP Registry oficial via GitHub OIDC
  • mcp.json — conector golf incluído apontando para o endpoint MCP hospedado
  • mcp.stdio.json — configuração stdio local opcional para desenvolvimento offline
  • skills/golf/SKILL.md — orientação sobre fluxo de trabalho e confirmação de gastos
  • docs/SMOKE-CHECKLIST.md — etapas de verificação pós-implantação e pós-publicação
  • docs/RELEASE.md — runbook de reimplantação Fly, release GitHub e publicação no registry
  • src/ — servidor MCP TypeScript e cliente de API
  • dist/index.js — bundle ESM stdio incluído usado pelos instaladores
  • dist/http.js — bundle ESM Streamable HTTP incluído usado pelo contêiner
  • Dockerfile e fly.toml — contêiner HTTP de produção e serviço Fly.io

Para desenvolvimento com Node.js 18 ou mais recente:

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

pack:mcpb usa a CLI oficial @anthropic-ai/mcpb pack para produzir golf.mcpb e grava seu SHA-256 em server.json. GitHub Releases hospeda esse artefato em https://github.com/golf-data/golf/releases/download/v1.0.2/golf.mcpb.

O código do plugin está disponível sob a Licença MIT. Os dados da API do Golf Intelligence permanecem sujeitos aos termos em golfintelligence.com.