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 IDGI_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.
| Ferramenta | O que retorna | Créditos |
|---|---|---|
search_course_groups | Resultados de busca por grupo de campos | 0 |
get_course_group_scorecard | Dados de scorecard | 1 |
get_course_group_gps | Geometria e coordenadas mapeadas do campo | 2 |
get_course_group_detail | Dados detalhados do grupo de campos | 3 |
get_green_slope_image | Imagem de inclinação do green em retrato ou quadrado | 1 |
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:
- Um token bearer OAuth emitido por este serviço após o usuário entrar com sua própria conta GI.
- Cabeçalhos legados
X-GI-Client-IDeX-GI-Active-Tokenfornecidos 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: truepara busca gratuita.idempotentHint: falsepara 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óriasplugin.json— manifesto de padrão aberto dos Agent Plugins (identificadorgolf).claude-plugin/plugin.json— manifesto do plugin Claude Code / Cowork (identificadorgolf)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— publicaio.github.golf-data/golfno MCP Registry oficial via GitHub OIDCmcp.json— conectorgolfincluído apontando para o endpoint MCP hospedadomcp.stdio.json— configuração stdio local opcional para desenvolvimento offlineskills/golf/SKILL.md— orientação sobre fluxo de trabalho e confirmação de gastosdocs/SMOKE-CHECKLIST.md— etapas de verificação pós-implantação e pós-publicaçãodocs/RELEASE.md— runbook de reimplantação Fly, release GitHub e publicação no registrysrc/— servidor MCP TypeScript e cliente de APIdist/index.js— bundle ESM stdio incluído usado pelos instaladoresdist/http.js— bundle ESM Streamable HTTP incluído usado pelo contêinerDockerfileefly.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.