Eventbrite MCP Server
Multi-tenant Eventbrite MCP server with Firebase authentication, wrapping @prmichaelsen/eventbrite-mcp.
Overview
This server provides a multi-tenant Model Context Protocol (MCP) interface to the Eventbrite API. It uses:
- Firebase Authentication for user identity verification
- Platform API for secure credential management
- @prmichaelsen/mcp-auth for authentication wrapping
- @prmichaelsen/eventbrite-mcp as the base MCP server
Architecture
Client (Firebase JWT)
↓
Firebase Auth Provider (validates JWT → userId)
↓
Platform Token Resolver (userId → Eventbrite token via platform)
↓
Eventbrite MCP Server (executes tools)
↓
Eventbrite API
Prerequisites
- Node.js 20+
- Firebase project with authentication enabled
- Platform API that implements the credentials endpoint
- Eventbrite OAuth tokens stored in your platform
Installation
npm install
Configuration
Copy .env.example to .env and configure:
# Firebase (for JWT validation)
FIREBASE_PROJECT_ID=your-firebase-project-id
# Platform API (for token resolution)
PLATFORM_URL=https://your-platform.com
PLATFORM_SERVICE_TOKEN=your-service-token
# Server
PORT=8080
NODE_ENV=development
LOG_LEVEL=info
Environment Variables
| Variable | Required | Description |
|---|---|---|
FIREBASE_PROJECT_ID | Yes | Firebase project ID for JWT validation |
PLATFORM_URL | Yes | Base URL of your platform API |
PLATFORM_SERVICE_TOKEN | Yes | Service token for platform API authentication |
PORT | No | Server port (default: 8080) |
NODE_ENV | No | Environment (development/production) |
LOG_LEVEL | No | Logging level (default: info) |
Development
# Install dependencies
npm install
# Run in development mode with hot reload
npm run dev
# Build TypeScript
npm run build
# Run production build
npm start
Docker
Build
docker build -t eventbrite-mcp-server .
Run
docker run -p 8080:8080 \
-e FIREBASE_PROJECT_ID=your-project \
-e PLATFORM_URL=https://your-platform.com \
-e PLATFORM_SERVICE_TOKEN=your-token \
eventbrite-mcp-server
Deployment
Google Cloud Run
# Build and push to GCR
docker build -t gcr.io/YOUR_PROJECT/eventbrite-mcp-server:latest .
docker push gcr.io/YOUR_PROJECT/eventbrite-mcp-server:latest
# Generate service token
SERVICE_TOKEN=$(node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))")
# Create secret
echo -n "$SERVICE_TOKEN" | gcloud secrets create platform-service-token --data-file=-
# Deploy
gcloud run deploy eventbrite-mcp-server \
--image gcr.io/YOUR_PROJECT/eventbrite-mcp-server:latest \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars="FIREBASE_PROJECT_ID=your-project,PLATFORM_URL=https://your-platform.com,NODE_ENV=production" \
--update-secrets=PLATFORM_SERVICE_TOKEN=platform-service-token:latest \
--min-instances=0 \
--max-instances=10 \
--memory=512Mi \
--cpu=1
API Endpoints
Health Check
GET /mcp/health
MCP Message Endpoint
POST /mcp/message
Authorization: Bearer <firebase-jwt>
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}
Testing
Local Testing
# Start server
npm start
# Test health endpoint
curl http://localhost:8080/mcp/health
# Test with Firebase JWT
curl -X POST http://localhost:8080/mcp/message \
-H "Authorization: Bearer <firebase-jwt>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Production Testing
curl -X POST https://your-server.run.app/mcp/message \
-H "Authorization: Bearer <firebase-jwt>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Platform API Requirements
Your platform must implement the credentials endpoint:
// GET /api/credentials/eventbrite
// Headers:
// Authorization: Bearer <service-token>
// X-User-ID: <user-id>
// Response:
{
"access_token": "user-eventbrite-token",
"expires_at": "2024-12-31T23:59:59Z"
}
Project Structure
eventbrite-mcp-server/
├── src/
│ ├── index.ts # Main server entry point
│ └── auth/
│ ├── firebase-provider.ts # Firebase JWT validation
│ └── platform-token-resolver.ts # Platform API integration
├── agent/
│ └── patterns/
│ └── bootstrap.md # Bootstrap pattern documentation
├── package.json
├── tsconfig.json
├── Dockerfile
├── .env.example
├── .gitignore
├── .dockerignore
└── README.md
Features
- ✅ Multi-tenant architecture
- ✅ Firebase authentication
- ✅ Platform-managed credentials (secure)
- ✅ Stateless server (no database)
- ✅ Token caching for performance
- ✅ Rate limiting
- ✅ Health checks
- ✅ Docker support
- ✅ Cloud Run ready
Security
- Firebase JWT tokens are validated on every request
- Eventbrite tokens are never exposed to clients
- Service token authenticates server-to-platform communication
- All credentials are managed by the platform API
- Rate limiting prevents abuse
Caching
The server implements two levels of caching:
- Auth Cache: Firebase JWT validation results (TTL: 60s)
- Token Cache: Eventbrite access tokens (TTL: 5min)
Caching improves performance and reduces external API calls.
Troubleshooting
TypeScript Errors
TypeScript errors about missing modules are expected before running npm install. Install dependencies to resolve.
Authentication Failures
- Verify
FIREBASE_PROJECT_IDmatches your Firebase project - Ensure Firebase JWT is valid and not expired
- Check that the JWT is sent in the
Authorization: Bearer <token>header
Token Resolution Failures
- Verify
PLATFORM_URLis correct - Ensure
PLATFORM_SERVICE_TOKENis valid - Check that user has Eventbrite credentials in the platform
- Review platform API logs for errors
License
MIT
Related Projects
- @prmichaelsen/eventbrite-mcp - Base Eventbrite MCP server
- @prmichaelsen/mcp-auth - MCP authentication wrapper
- Bootstrap Pattern - Pattern documentation
Support
For issues or questions:
- Base MCP server: @prmichaelsen/eventbrite-mcp issues
- This wrapper: Create an issue in this repository