{"id":"8cfedab3-558d-42e3-8451-a6fcba2116f2","slug":"golf-data-golf","kind":"mcp","name":"golf","summary":"Golf Intelligence by Stracka","owner":"golf-data","repoUrl":"https://github.com/golf-data/golf","license":"MIT","licenseTier":"permissive","trust":"community","stars":2,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-08-27T02:01:43.000Z","addedAt":"2026-10-14T05:37:07.581Z","logoUrl":"https://avatars.githubusercontent.com/u/162509852?u=b985fbcf1a864bef0c9ea3e81e33dccd41188a9b&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-15T00:26:31.635Z","sample":false,"url":"https://conduits.dev/tools/golf-data-golf","language":"TypeScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Golf Intelligence, by Stracka\n\n> Golf Intelligence, by Stracka. Proprietary StrackaGolf course data for\n> developers building a golf app, updated daily. Search is free. Scorecards,\n> GPS, and 3D greens are available via API.\n\nGolf Intelligence provides proprietary StrackaGolf course data, updated daily.\nLearn more at [golfintelligence.com](https://golfintelligence.com/).\n\nThis repository is the installable Cursor / Grok Bot plugin with handle\n`golf`. The Cursor marketplace application source is the public GitHub URL:\n\n**https://github.com/golf-data/golf**\n\nMarketplace reviewers can submit that URL at\n[cursor.com/marketplace/publish](https://cursor.com/marketplace/publish). The\ncatalog title is **Golf Intelligence, by Stracka**.\n\nThe bundled `mcp.json` connects to the hosted MCP at\n`https://mcp.golfintelligence.com/mcp` over Streamable HTTP, so installing the\nplugin never depends on a local Node build. Your console credentials travel as\nthe `X-GI-Client-ID` and `X-GI-Active-Token` headers, filled from the plugin\nvariables declared in `.cursor-plugin/plugin.json`.\n\nEarlier releases launched `node` against a plugin-relative `dist/index.js`.\nCursor does not expand the Agent Plugins `${PLUGIN_ROOT}` variable, so that\nplaceholder reached Node literally and the connector failed with\n`Cannot find module '.../${PLUGIN_ROOT}/dist/index.js'`. The hosted connector\nremoves that failure mode entirely.\n\n`mcp.stdio.json` keeps the local stdio server for offline and development use.\nIt is not auto-discovered; copy its `golf` entry into `.cursor/mcp.json` (using\n`${workspaceFolder}` in a checkout) or point `mcpServers` at it. Any local\nstdio config must use `${CURSOR_PLUGIN_ROOT}`, never `${PLUGIN_ROOT}`. The\ncommitted `dist/index.js` bundle ships in the repository and in the MCPB\npackage, so the stdio path works without running a build first.\n\nThe official MCP Registry name is **`io.github.golf-data/golf`**. The registry\ndoes not accept a bare `golf` name. Cursor, Agent Plugins, and Claude Code\nplugin handles remain `golf`.\n\n## Get API access\n\nSign in at console.golfintelligence.com without a password: enter your email on\nthe login page, request a verification code, then enter the code after it is\nsent. Create an API Account and configure the plugin's two required variables:\n\n- `GI_CLIENT_ID`: your Client ID\n- `GI_ACTIVE_TOKEN`: your Active Token\n\nThe Active Token is exchanged for a short-lived bearer token. It is **not** a\nbearer token; do not paste a bearer token into `GI_ACTIVE_TOKEN`.\n\nUse credentials from your own console account. This project does not provide\ndemo tokens.\n\nPlans are monthly and can be upgraded or downgraded self-serve in the console:\n\n- **Tester:** $49/month for 100 credits/month.\n- **Starter:** $399/month for 10,000 credits/month.\n\nFor billing, credits, plans, login, or credential help, email\n[support@golfintelligence.com](mailto:support@golfintelligence.com). For course\ndata updates, email\n[data@golfintelligence.com](mailto:data@golfintelligence.com).\n\n## Tools and credits\n\nAlways search first. `search_course_groups` is free. Before every paid call,\nthe user must explicitly confirm the stated cost; the server refuses paid tools\nunless `confirm_spend=true`.\n\n| Tool | What it returns | Credits |\n| --- | --- | ---: |\n| `search_course_groups` | Course-group search results | 0 |\n| `get_course_group_scorecard` | Scorecard data | 1 |\n| `get_course_group_gps` | Mapped course geometry and coordinates | 2 |\n| `get_course_group_detail` | Detailed course-group data | 3 |\n| `get_green_slope_image` | Portrait or square green slope image | 1 |\n\n## Authentication\n\nThe local stdio server and legacy per-user HTTP credential headers exchange the\nconfigured credentials with:\n\n```text\nPOST https://api.golfintelligence.com/auth/authenticateToken\ngrant_type=client_credentials\ncode=<GI_ACTIVE_TOKEN>\nclient_id=<GI_CLIENT_ID>\n```\n\nIt sends the returned `access_token` as `Authorization: Bearer <access_token>`,\ncaches it only in memory, and refreshes once after an HTTP 401. Credentials are\nnever logged.\n\nThe hosted MCP additionally implements OAuth 2.1 authorization-code flow with\nS256 PKCE for ChatGPT. Its dedicated authorization page accepts each user's own\nconsole Client ID and Active Token, validates them with Golf Intelligence, and\nbinds that account to encrypted access and refresh tokens. See\n[docs/OPENAI-CHATGPT-OAUTH.md](docs/OPENAI-CHATGPT-OAUTH.md) for discovery URLs,\nOpenAI portal settings, reviewer steps, and deployment secrets.\n\n## Streamable HTTP\n\nThe hosted MCP is available via the official MCP Streamable HTTP transport at:\n\n```text\nhttps://mcp.golfintelligence.com/mcp\n```\n\nThe production HTTP entrypoint serves that transport at `/mcp` and a health\ncheck at `/health`. For OpenAI Apps domain verification it also serves\n`GET /.well-known/openai-apps-challenge` as `text/plain` when\n`OPENAI_APPS_CHALLENGE_TOKEN` (or `OPENAI_APPS_CHALLENGE`) is set; otherwise\nthat path returns 404. Start the HTTP server locally with:\n\n```bash\nnpm run build\nPORT=3000 npm run start:http\n```\n\nIt binds to `0.0.0.0:$PORT`. The existing `node dist/index.js` stdio entrypoint\nand all plugin packages remain unchanged.\n\nThe HTTP service accepts Golf Intelligence identity in either of these forms:\n\n1. An OAuth bearer token issued by this service after the user signs in with\n   their own GI account.\n2. Legacy `X-GI-Client-ID` and `X-GI-Active-Token` headers supplied together on\n   every MCP request by existing plugin installs.\n\nThere is deliberately no server-wide `GI_CLIENT_ID` / `GI_ACTIVE_TOKEN`\nfallback. The HTTP entrypoint ignores those environment variables, so an\nanonymous caller cannot inherit a deployment account or spend its credits.\nMissing or invalid OAuth returns HTTP 401 with an OAuth protected-resource\nchallenge. The Active Token is an exchange credential and must not be sent as\nan `Authorization: Bearer` value.\n\nEvery tool explicitly advertises these MCP annotations:\n\n- `readOnlyHint: true` — each tool only retrieves course data.\n- `openWorldHint: false` — no tool writes to public or external systems.\n- `destructiveHint: false` — no tool deletes, overwrites, publishes, or sends\n  anything.\n- `idempotentHint: true` for free search.\n- `idempotentHint: false` for paid tools because every repeated paid invocation\n  can consume credits again.\n\nThese sentences can also be used as the annotation justifications in the\nOpenAI submission form. Paid lookups still require `confirm_spend=true` at the\nsame credit costs documented above.\n\n### Container deployment\n\n`Dockerfile` builds both transports without embedding credentials.\n`fly.toml` configures a small Fly.io service and checks `/health`. Before the\nfirst deploy, confirm that the globally unique Fly app name is available (or\nchange `app`), then configure the OAuth secrets documented in\n`docs/OPENAI-CHATGPT-OAUTH.md` and deploy. At minimum:\n\n```bash\nfly volumes create oauth_state --region ord --size 1\nfly secrets set OAUTH_ENCRYPTION_KEY=\"$(openssl rand -base64 32)\"\nfly secrets set OAUTH_ISSUER=https://mcp.golfintelligence.com\nfly secrets set OPENAI_APPS_CHALLENGE_TOKEN=...\nfly deploy\n```\n\nThe mounted volume stores OAuth replay/rotation state, not GI credentials.\nRun one Machine for this file-backed state store.\n\nDo not configure a shared GI account for hosted HTTP callers. If\n`GI_CLIENT_ID` / `GI_ACTIVE_TOKEN` exist for a separate bootstrap or stdio\nworkflow, they do not authorize HTTP requests.\n\nSet `OPENAI_APPS_CHALLENGE_TOKEN` to the token shown in OpenAI Platform domain\nverification. Do not commit that token. After deploy,\n`GET https://mcp.golfintelligence.com/.well-known/openai-apps-challenge`\nshould return the token as `text/plain`.\n\nTool names and descriptions are baked into the deployed bundle, so the hosted\nMCP keeps serving the previous copy until it is redeployed. Redeploy before\nrefreshing the marketplace listing, and follow `docs/RELEASE.md` for the full\norder across Fly, the marketplace, and the MCP Registry.\n\n## Repository layout\n\n- `.cursor-plugin/plugin.json` — Cursor marketplace manifest and required variables\n- `plugin.json` — Agent Plugins open-standard manifest (handle `golf`)\n- `.claude-plugin/plugin.json` — Claude Code / Cowork plugin manifest (handle `golf`)\n- `server.json` — official MCP Registry metadata (`io.github.golf-data/golf`)\n- `manifest.json` — MCPB bundle manifest for the stdio Node server\n- `.github/workflows/publish-mcp.yml` — publishes `io.github.golf-data/golf` to the official MCP Registry via GitHub OIDC\n- `mcp.json` — bundled `golf` connector pointing at the hosted MCP endpoint\n- `mcp.stdio.json` — optional local stdio configuration for offline development\n- `skills/golf/SKILL.md` — workflow and spend-confirmation guidance\n- `docs/SMOKE-CHECKLIST.md` — post-deploy and post-publish verification steps\n- `docs/RELEASE.md` — Fly redeploy, GitHub release, and registry publish runbook\n- `src/` — TypeScript MCP server and API client\n- `dist/index.js` — committed stdio ESM bundle used by installers\n- `dist/http.js` — committed Streamable HTTP ESM bundle used by the container\n- `Dockerfile` and `fly.toml` — production HTTP container and Fly.io service\n\nFor development with Node.js 18 or newer:\n\n```bash\nnpm install\nnpm test\nnpm run build\nnpm run pack:mcpb\n```\n\n`pack:mcpb` uses the official `@anthropic-ai/mcpb pack` CLI to produce `golf.mcpb` and writes its SHA-256 into `server.json`. GitHub Releases host that asset at `https://github.com/golf-data/golf/releases/download/v1.0.2/golf.mcpb`.\n\nThe plugin code is available under the MIT License. Golf Intelligence API data\nremains subject to the terms at\n[golfintelligence.com](https://golfintelligence.com/).\n"}