{"_id":"@clubplanner/partner-api-mcp","name":"@clubplanner/partner-api-mcp","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@clubplanner/partner-api-mcp","version":"0.1.0","description":"Model Context Protocol server for the Club Planner Partner API. Lets MCP-aware AI tools (Claude Desktop, Cursor, Zed, …) call a Club Planner platform's partner API with a configured X-API-Key.","license":"Proprietary","author":{"name":"Club Planner"},"homepage":"https://clubplanner.app","type":"module","bin":{"clubplanner-partner-api-mcp":"dist/index.js"},"scripts":{"build":"tsc","prepare":"npm run build","start":"node dist/index.js"},"engines":{"node":">=18.0.0"},"keywords":["mcp","model-context-protocol","clubplanner","fitness","gym","club-management"],"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"devDependencies":{"@types/node":"^20.11.0","typescript":"^5.4.0"},"_id":"@clubplanner/partner-api-mcp@0.1.0","_nodeVersion":"24.11.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-kpiICO8psvCA+eUA7sAAVfOFwGedadIlncdqWsrQ5S8owFr0ckhSigDhUBlQTgQHqKatvNLyXVa6kuwgA4L2ag==","shasum":"9f25c089fbece097145b2bf5917017e627abb4a9","tarball":"https://registry.npmjs.org/@clubplanner/partner-api-mcp/-/partner-api-mcp-0.1.0.tgz","fileCount":3,"unpackedSize":13518,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDB81C233fB07BBwSA+7V3RRHsan/PIMrRAevpuYIAMGAiAHq7KOOtR1k7TbeLP6L3UzErEBWmnfTfQW9qoeEVVg3Q=="}]},"_npmUser":{"name":"kristofcoolsaet","email":"kristof@clubplanner.be"},"directories":{},"maintainers":[{"name":"kristofcoolsaet","email":"kristof@clubplanner.be"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/partner-api-mcp_0.1.0_1781087292445_0.8520675522789065"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-10T10:28:12.313Z","0.1.0":"2026-06-10T10:28:12.576Z","modified":"2026-06-10T10:28:12.765Z"},"maintainers":[{"name":"kristofcoolsaet","email":"kristof@clubplanner.be"}],"description":"Model Context Protocol server for the Club Planner Partner API. Lets MCP-aware AI tools (Claude Desktop, Cursor, Zed, …) call a Club Planner platform's partner API with a configured X-API-Key.","homepage":"https://clubplanner.app","keywords":["mcp","model-context-protocol","clubplanner","fitness","gym","club-management"],"author":{"name":"Club Planner"},"license":"Proprietary","readme":"# Club Planner Partner API — MCP server\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that lets MCP-aware\nAI tools (Claude Desktop, Cursor, Zed, …) call the **Club Planner Partner API** for a\nspecific platform with a configured `X-API-Key`.\n\nThe full OpenAPI 3.0 contract is exposed as an MCP resource (`openapi://partner.json`)\nso the AI can discover every endpoint, query parameter and response shape on its own —\nno per-endpoint wiring needed.\n\n## Why\n\nClaude (and other AIs) can read the world but can't easily reach a platform's API:\n\n- The web-fetch sandbox is allow-listed; many platform domains aren't on it.\n- The web tool can't reliably attach custom request headers like `X-API-Key`.\n- Chrome-extension based work-arounds need a logged-in browser session.\n\nThis MCP server fixes that. The user configures it once with their platform URL and\nAPI key; from then on Claude makes calls through the server, which adds the right\nheader and returns parsed JSON.\n\n## Quick start (Claude Desktop)\n\n1. Make sure you have **Node.js 18 or higher**.\n2. In Claude Desktop, edit your MCP config (Settings → Developer → Edit Config) and add:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"clubplanner\": {\n         \"command\": \"npx\",\n         \"args\": [\"-y\", \"@clubplanner/partner-api-mcp\"],\n         \"env\": {\n           \"CLUBPLANNER_URL\": \"https://yourclub.clubplanner.app\",\n           \"CLUBPLANNER_API_KEY\": \"cp_...\"\n         }\n       }\n     }\n   }\n   ```\n\n3. Restart Claude Desktop. The `clubplanner` server appears in the tool drawer.\n4. Try: *\"List the clubs on this platform\"* — Claude calls `list_clubs` and shows you\n   the result. From there: *\"For club 3919, give me the members who checked in\n   yesterday.\"*\n\n## Configuration\n\n| Env var | Required | Description |\n|---|---|---|\n| `CLUBPLANNER_URL` | yes | Platform base URL, e.g. `https://yourclub.clubplanner.app`. No trailing slash needed. |\n| `CLUBPLANNER_API_KEY` | yes | Partner API key. Get it from *Settings → Platform → Partner API* on the platform. Sent as `X-API-Key` on every call. |\n\n## What this server exposes\n\n### Tools\n\n| Tool | Purpose |\n|---|---|\n| `partner_api_call` | Generic invocation: `{ method, path, queryParams?, body? }`. Use this for everything not covered by a shortcut. |\n| `list_clubs` | Shortcut for `GET /api/partner/v1/club`. Use first to discover `clubId`. |\n| `ping` | Shortcut for `GET /api/partner/v1/ping`. Health check. |\n\n### Resources\n\n| URI | Purpose |\n|---|---|\n| `openapi://partner.json` | Live OpenAPI 3.0 contract from the configured platform. Read this **before** calling `partner_api_call` so the AI calls the right path with the right arguments. |\n\n## Response shape\n\n`partner_api_call` returns the HTTP status, the content-type and the parsed JSON body\n(or raw text for non-JSON responses):\n\n```json\n{\n  \"status\": 200,\n  \"statusText\": \"OK\",\n  \"contentType\": \"application/json; charset=utf-8\",\n  \"body\": { /* parsed response */ }\n}\n```\n\nNon-2xx responses are **not** thrown — quota (`429`), forbidden (`403`) and\nnot-found (`404`) come back as data so the AI can reason about them.\n\n## Local development\n\n```bash\ncd \"D:\\TFS\\Windows Apps\\Clib.ClubPlanner.Partner.API.MCP\"\nnpm install\nnpm run build\n# To test it directly:\nCLUBPLANNER_URL=https://yourclub.clubplanner.app CLUBPLANNER_API_KEY=cp_... npm start\n```\n\nThe server speaks the MCP stdio transport. Point any MCP client at\n`node dist/index.js` with the same env vars to try it without npm publishing.\n\n## Publishing\n\n```bash\nnpm version patch         # or minor/major\nnpm publish --access public\n```\n\nThe package is scoped (`@clubplanner/...`), so first-time publish needs the npm org\n`clubplanner` to exist and your account to be a member.\n\n## Versioning\n\nThis server pins to the Partner API `v1` path prefix; breaking changes go in `v2`.\nThe OpenAPI spec on each platform is the source of truth — the AI reads it live, so\nclients automatically benefit from new endpoints the moment a platform upgrades.\n\n## Security\n\n- The API key lives only in the user's local environment (in the MCP client config),\n  never echoed in tool output or logs.\n- All traffic to the platform is HTTPS.\n- The server enforces no per-call quota; the platform enforces it server-side and\n  returns `429` on excess, which the AI sees and can back off on.\n","readmeFilename":"README.md","_rev":"1-c8b75fe633590557dd64237f01201efa"}