Skip to main content
Glama
prmichaelsen

Eventbrite MCP Server

by prmichaelsen

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:

  1. Auth Cache: Firebase JWT validation results (TTL: 60s)

  2. 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_ID matches 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_URL is correct

  • Ensure PLATFORM_SERVICE_TOKEN is valid

  • Check that user has Eventbrite credentials in the platform

  • Review platform API logs for errors

License

MIT

Support

For issues or questions:

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/prmichaelsen/eventbrite-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server