Multi-tenant Eventbrite MCP server with Firebase authentication
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 supp
Environment Variables
FIREBASE_PROJECT_IDrequiredFirebase project ID for JWT validationPLATFORM_URLrequiredBase URL of your platform APIPLATFORM_SERVICE_TOKENrequiredService token for platform API authenticationPORTServer port (default: 8080)NODE_ENVEnvironment (development/production)LOG_LEVELLogging level (default: info)Configuration
{ "mcpServers": { "eventbrite": { "command": "node", "args": ["/path/to/eventbrite-mcp-server/dist/index.js"], "env": { "FIREBASE_PROJECT_ID": "your-project-id", "PLATFORM_URL": "https://your-platform.com", "PLATFORM_SERVICE_TOKEN": "your-token" } } } }