{"_id":"@capitalthought/bizzabo-mcp","_rev":"3-e0035429608c87e77a93c9684c974c9f","name":"@capitalthought/bizzabo-mcp","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@capitalthought/bizzabo-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","bizzabo","events","anthropic","claude"],"author":{"name":"Josh Baer"},"license":"MIT","_id":"@capitalthought/bizzabo-mcp@0.1.0","maintainers":[{"name":"joshuabaer","email":"npmjs@joshspam.com"}],"homepage":"https://github.com/capitalthought/bizzabo-mcp#readme","bugs":{"url":"https://github.com/capitalthought/bizzabo-mcp/issues"},"bin":{"bizzabo-mcp":"dist/index.js"},"dist":{"shasum":"f06a7d756e92af79c9a5dd954a6ab292d8865870","tarball":"https://registry.npmjs.org/@capitalthought/bizzabo-mcp/-/bizzabo-mcp-0.1.0.tgz","fileCount":21,"integrity":"sha512-QQwdgddmLWNHySZrRqSmCMKNbq07aO+RsaVO19CoRy+yQF3iUxFDzasP15wHcU5T0uORxX1GY9GcRPf8vSs3IA==","signatures":[{"sig":"MEUCIGwKQAGxLIV1Nk4V5Tbl7iTpTG2c+j8Ofr8BpFxzbsrnAiEAlZ3tApztJFKQwlZ0ydQc3SbK0FV3ThtGuLrTtloYl/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42395},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"9d7a8bb86bae1716a33cb6e48e864323c2f4c92d","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc && chmod +x dist/index.js","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"joshuabaer","email":"npmjs@joshspam.com"},"repository":{"url":"git+https://github.com/capitalthought/bizzabo-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for the Bizzabo event management API — events, sessions, speakers, contacts, partners, agenda, registrations.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/bizzabo-mcp_0.1.0_1776619498981_0.8356315057480583","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@capitalthought/bizzabo-mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","bizzabo","events","anthropic","claude"],"author":{"name":"Joshua Baer"},"license":"MIT","_id":"@capitalthought/bizzabo-mcp@0.1.1","maintainers":[{"name":"joshuabaer","email":"npmjs@joshspam.com"}],"homepage":"https://github.com/capitalthought/bizzabo-mcp#readme","bugs":{"url":"https://github.com/capitalthought/bizzabo-mcp/issues"},"bin":{"bizzabo-mcp":"dist/index.js"},"dist":{"shasum":"1cfa68586d0b408fda209a391e8bdba3d987b2c0","tarball":"https://registry.npmjs.org/@capitalthought/bizzabo-mcp/-/bizzabo-mcp-0.1.1.tgz","fileCount":21,"integrity":"sha512-s/uVmv4yp3YGlKmHW3S28gg/vd1ms8G9hR/qd7l1Uv5wx7/DlVOB7QM4zWIuvzDoFXObvWsv1jbX4lFo5VuztA==","signatures":[{"sig":"MEQCIBSKvt86c3W96bc83PNy7TY7LLowP++n2/rNi7YsFV+IAiBEYgEM1TjiJpX1Jur6HF7y81OAc5aG+K8ohM+k8SE1wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42397},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"cc69a22a2048bfa286f41f83e06f6f52c1f44320","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc && chmod +x dist/index.js","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"joshuabaer","email":"npmjs@joshspam.com"},"repository":{"url":"git+https://github.com/capitalthought/bizzabo-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for the Bizzabo event management API — events, sessions, speakers, contacts, partners, agenda, registrations.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.0","typescript":"^5.9.3","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/bizzabo-mcp_0.1.1_1776619804352_0.6478470080169625","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@capitalthought/bizzabo-mcp","version":"0.1.2","description":"MCP server for the Bizzabo event management API — events, sessions, speakers, contacts, partners, agenda, registrations.","type":"module","main":"dist/index.js","bin":{"bizzabo-mcp":"dist/index.js"},"scripts":{"build":"tsc && chmod +x dist/index.js","dev":"tsc --watch","start":"node dist/index.js","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/capitalthought/bizzabo-mcp.git"},"homepage":"https://github.com/capitalthought/bizzabo-mcp#readme","bugs":{"url":"https://github.com/capitalthought/bizzabo-mcp/issues"},"keywords":["mcp","model-context-protocol","bizzabo","events","anthropic","claude"],"author":{"name":"Joshua Baer"},"license":"MIT","publishConfig":{"access":"public"},"engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.27.1","zod":"^4.3.6"},"devDependencies":{"@types/node":"^25.5.0","typescript":"^5.9.3","vitest":"^4.1.0"},"_id":"@capitalthought/bizzabo-mcp@0.1.2","gitHead":"556e35863b7825f60ed2564f006acd8209ba37ad","types":"./dist/index.d.ts","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-5cV2BsL3mJeZ3ahei9lov41Fjanuq+06tx+CJ02Oil0blt7fJfpaFNn8K9YVPqddkb3PnL6HDB2pLouHr/Gmig==","shasum":"7b5f043f279a734258a374e944e01c724f04bfd8","tarball":"https://registry.npmjs.org/@capitalthought/bizzabo-mcp/-/bizzabo-mcp-0.1.2.tgz","fileCount":21,"unpackedSize":47725,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEfUol1cSfAGxdON90FDNBLelLe8MdLWngJ10wWhKPc6AiBwlak9nczq92gSkQ3vQ3qeSmISQsuSKkrXQxZtDIccJA=="}]},"_npmUser":{"name":"joshuabaer","email":"npmjs@joshspam.com"},"directories":{},"maintainers":[{"name":"joshuabaer","email":"npmjs@joshspam.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bizzabo-mcp_0.1.2_1776620660255_0.5437062417113603"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-19T17:24:58.591Z","modified":"2026-04-19T17:44:20.523Z","0.1.0":"2026-04-19T17:24:59.104Z","0.1.1":"2026-04-19T17:30:04.494Z","0.1.2":"2026-04-19T17:44:20.394Z"},"bugs":{"url":"https://github.com/capitalthought/bizzabo-mcp/issues"},"author":{"name":"Joshua Baer"},"license":"MIT","homepage":"https://github.com/capitalthought/bizzabo-mcp#readme","keywords":["mcp","model-context-protocol","bizzabo","events","anthropic","claude"],"repository":{"type":"git","url":"git+https://github.com/capitalthought/bizzabo-mcp.git"},"description":"MCP server for the Bizzabo event management API — events, sessions, speakers, contacts, partners, agenda, registrations.","maintainers":[{"name":"joshuabaer","email":"npmjs@joshspam.com"}],"readme":"# bizzabo-mcp\n\n[![npm version](https://img.shields.io/npm/v/@capitalthought/bizzabo-mcp.svg)](https://www.npmjs.com/package/@capitalthought/bizzabo-mcp)\n\nMCP server for the [Bizzabo](https://www.bizzabo.com/) event management API. Exposes 12 tools for reading events, sessions, speakers, contacts, partners, agenda items, and registrations — wrapped in OAuth2 auth, auto-pagination, 60s caching, and 429 retry-with-backoff.\n\n## Quick start\n\nYou need three Bizzabo OAuth2 credentials: `BIZZABO_CLIENT_ID`, `BIZZABO_CLIENT_SECRET`, `BIZZABO_ACCOUNT_ID`. Get them from your Bizzabo admin → **Integrations → API → OAuth2 Client Credentials**. Then pick the client you're using below.\n\n## Use with Claude (Desktop or Code)\n\nDrop this into `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows), or `~/.config/claude/mcp.json` for Claude Code:\n\n```json\n{\n  \"mcpServers\": {\n    \"bizzabo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@capitalthought/bizzabo-mcp\"],\n      \"env\": {\n        \"BIZZABO_CLIENT_ID\": \"...\",\n        \"BIZZABO_CLIENT_SECRET\": \"...\",\n        \"BIZZABO_ACCOUNT_ID\": \"...\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude. Ask \"list my Bizzabo events\" — it should call `list_events`.\n\n## Use with ChatGPT\n\nMCP works with ChatGPT two different ways depending on what you have:\n\n### Option A — ChatGPT Desktop (Developer Mode, Plus/Pro/Team/Enterprise)\n\nOpenAI's Desktop app added local MCP support via Developer Mode.\n\n1. In ChatGPT Desktop → **Settings → Connectors → Advanced** → enable **Developer Mode**.\n2. **Settings → Connectors → Create** → choose **Local MCP server**.\n3. Fill in:\n   - **Name:** `Bizzabo`\n   - **Command:** `npx`\n   - **Arguments:** `-y @capitalthought/bizzabo-mcp`\n   - **Environment variables:** add `BIZZABO_CLIENT_ID`, `BIZZABO_CLIENT_SECRET`, `BIZZABO_ACCOUNT_ID`\n4. Save, then toggle the connector **on** in the new-chat composer.\n5. Ask \"list my upcoming Bizzabo events\" — you'll see tool-call cards for `list_events` etc.\n\n> Note: Local MCP connectors only work in the Desktop app (not chatgpt.com in a browser). The set of plans that can enable Developer Mode has shifted over time — if you don't see the setting, check OpenAI's connector docs for your plan.\n\n### Option B — OpenAI Agents SDK (for developers)\n\nIf you're building on top of OpenAI's API, the [Agents SDK](https://openai.github.io/openai-agents-python/mcp/) can launch the MCP server directly.\n\n**Python:**\n\n```python\nfrom agents import Agent, Runner\nfrom agents.mcp import MCPServerStdio\n\nasync def main():\n    async with MCPServerStdio(\n        name=\"bizzabo\",\n        params={\n            \"command\": \"npx\",\n            \"args\": [\"-y\", \"@capitalthought/bizzabo-mcp\"],\n            \"env\": {\n                \"BIZZABO_CLIENT_ID\": \"...\",\n                \"BIZZABO_CLIENT_SECRET\": \"...\",\n                \"BIZZABO_ACCOUNT_ID\": \"...\",\n            },\n        },\n    ) as bizzabo:\n        agent = Agent(\n            name=\"Event Assistant\",\n            instructions=\"Use Bizzabo to answer questions about events.\",\n            mcp_servers=[bizzabo],\n        )\n        result = await Runner.run(agent, \"List the next 5 events.\")\n        print(result.final_output)\n```\n\n**TypeScript (`@openai/agents`):**\n\n```ts\nimport { Agent, run, MCPServerStdio } from \"@openai/agents\";\n\nconst bizzabo = new MCPServerStdio({\n  name: \"bizzabo\",\n  command: \"npx\",\n  args: [\"-y\", \"@capitalthought/bizzabo-mcp\"],\n  env: {\n    BIZZABO_CLIENT_ID: \"...\",\n    BIZZABO_CLIENT_SECRET: \"...\",\n    BIZZABO_ACCOUNT_ID: \"...\",\n  },\n});\n\nawait bizzabo.connect();\nconst agent = new Agent({\n  name: \"Event Assistant\",\n  instructions: \"Use Bizzabo to answer questions about events.\",\n  mcpServers: [bizzabo],\n});\nconsole.log((await run(agent, \"List the next 5 events.\")).finalOutput);\nawait bizzabo.close();\n```\n\n## Use with Gemini\n\n### Option A — Gemini CLI (recommended)\n\nInstall the CLI if you haven't: `npm install -g @google/gemini-cli`.\n\nAdd to `~/.gemini/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"bizzabo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@capitalthought/bizzabo-mcp\"],\n      \"env\": {\n        \"BIZZABO_CLIENT_ID\": \"...\",\n        \"BIZZABO_CLIENT_SECRET\": \"...\",\n        \"BIZZABO_ACCOUNT_ID\": \"...\"\n      }\n    }\n  }\n}\n```\n\nThen run `gemini` and ask \"what Bizzabo events are coming up?\".\n\n### Option B — Gemini API via Python SDK (for developers)\n\nThe `google-genai` SDK auto-translates MCP tool listings into Gemini function-calls:\n\n```python\nimport asyncio\nfrom google import genai\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\n\nclient = genai.Client()\n\nasync def main():\n    params = StdioServerParameters(\n        command=\"npx\",\n        args=[\"-y\", \"@capitalthought/bizzabo-mcp\"],\n        env={\n            \"BIZZABO_CLIENT_ID\": \"...\",\n            \"BIZZABO_CLIENT_SECRET\": \"...\",\n            \"BIZZABO_ACCOUNT_ID\": \"...\",\n        },\n    )\n    async with stdio_client(params) as (read, write):\n        async with ClientSession(read, write) as session:\n            await session.initialize()\n            response = await client.aio.models.generate_content(\n                model=\"gemini-2.0-flash\",\n                contents=\"List the next 5 Bizzabo events.\",\n                config=genai.types.GenerateContentConfig(\n                    tools=[session],\n                ),\n            )\n            print(response.text)\n\nasyncio.run(main())\n```\n\nThe same pattern works with Google's **Agent Development Kit (ADK)** — register the stdio server as a toolset in your `Agent` config.\n\n## Use with other MCP clients\n\nAny MCP client that speaks stdio works with the same three pieces:\n\n- **Command:** `npx`\n- **Args:** `[\"-y\", \"@capitalthought/bizzabo-mcp\"]`\n- **Env:** `BIZZABO_CLIENT_ID`, `BIZZABO_CLIENT_SECRET`, `BIZZABO_ACCOUNT_ID`\n\nKnown-working clients at the time of writing: Claude Desktop, Claude Code, Cursor, Windsurf, Zed, Cline, Continue, OpenAI Agents SDK, Gemini CLI, Google ADK.\n\n## Install globally (optional)\n\nIf you prefer an installed binary over `npx`:\n\n```bash\nnpm install -g @capitalthought/bizzabo-mcp\n# then use \"command\": \"bizzabo-mcp\" in any MCP config above\n```\n\n## Environment variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `BIZZABO_CLIENT_ID` | ✅ | OAuth2 client ID |\n| `BIZZABO_CLIENT_SECRET` | ✅ | OAuth2 client secret |\n| `BIZZABO_ACCOUNT_ID` | ✅ | Numeric account ID |\n| `DEBUG` | — | Set to `1` to log OAuth + request details to stderr |\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| `list_events` | List all events in the account |\n| `get_event` | Get a single event by ID |\n| `list_sessions` | List sessions for an event |\n| `get_session` | Get a single session by ID |\n| `list_speakers` | List speakers for an event |\n| `get_speaker` | Get a single speaker by ID |\n| `list_contacts` | List contacts in the account |\n| `get_contact` | Get a single contact by ID |\n| `list_partners` | List partners/sponsors for an event |\n| `get_partner` | Get a single partner by ID |\n| `get_agenda` | Get an event's agenda |\n| `list_registrations` | List registrations for an event |\n\nList endpoints auto-paginate when called without a `page` argument (up to 10 pages × 100 items = 1,000 records).\n\n## Architecture\n\n- **OAuth2 client credentials** flow against `auth.bizzabo.com`. Tokens are cached in-memory and refreshed 5 minutes before expiry.\n- **60-second response cache** (per URL + sorted query params) to avoid hammering the API on repeated identical calls.\n- **Auto-pagination** via `getAll()` — follows `totalPages`, inserts 100ms inter-page delay, stops at `maxPages` and reports `truncated: true`.\n- **429 retry** with exponential backoff (1s → 2s, max 2 retries per page).\n- **Structured errors** — auth/rate/server/not-found errors return `{ error, message }` rather than throwing.\n\n## Development\n\n```bash\nnpm install\nnpm run build       # tsc → dist/\nnpm run dev         # tsc --watch\nnpm start           # run the server against real Bizzabo\n```\n\n## Status\n\nTests in `tests/` are currently stale (written against a pre-OAuth2 API-key design; 12 failing). Fixing them is tracked as a TODO.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}