Open Source Calendly MCP Server
Deploy an open-source Calendly MCP server to self-host scheduling, customize workflows, and integrate with your apps.
npx -y @meAmitPatil/calendly-mcp-serverOverview
This open-source Calendly MCP server provides a self-hostable backend for receiving Calendly webhooks, proxying scheduling operations, and centralizing scheduling-related integrations. It implements a thin server layer that listens for events from Calendly (bookings, cancellations, invitee changes), validates requests, and exposes REST endpoints you can call from your applications or automation workflows.
Self-hosting your own MCP server helps when you need more control over data flow, want to customize business logic (for example, enrich events, apply custom routing, or enforce internal policies), or need to integrate scheduling events with internal systems (CRMs, analytics, messaging). The repo is designed for developers: small, configurable, and easy to run locally or in production via Docker.
Features
- Receive and validate Calendly webhooks (signature verification)
- Forward events to downstream systems or custom handlers
- REST endpoints for basic scheduling-related proxy operations
- Configurable via environment variables and .env files
- Docker and local Node.js development support
- Simple codebase suitable for extension and customization
- Logging and basic error handling for observability
Installation / Configuration
Below are common ways to run the server: with Docker (recommended for production) and locally with Node.js for development.
- Clone the repository:
- Create and edit environment configuration:
# open .env and set values, e.g. CALENDLY_WEBHOOK_SECRET, PORT, DATABASE_URL (if required)
3a) Run with Docker Compose:
# build and start
# view logs
3b) Run locally with Node.js:
# install dependencies
# run in development
# or start production build
Environment variables (typical set):
| Variable | Required | Description | Example |
|---|---|---|---|
| PORT | no (defaults to 3000) | HTTP port to listen on | 3000 |
| CALENDLY_WEBHOOK_SECRET | yes | Secret for validating Calendly webhook HMAC signatures | abc123secret |
| MCP_API_KEY | optional | API key to protect internal endpoints | my-api-key |
| DATABASE_URL | optional | Connection string if persistence is enabled | postgres://user:pass@host:5432/db |
Adjust the .env file to match your infrastructure and secrets. If you do not use a database, the server can be run stateless and forward events immediately to configured destinations.
Available Tools / Resources
- GitHub repository: https://github.com/meAmitPatil/calendly-mcp-server — source, issues, and contribution guide.
- Example .env and sample webhook verification logic included in the repo for reference.
- Use existing Calendly developer docs to configure webhooks and generate the webhook secret (set that value into CALENDLY_WEBHOOK_SECRET).
- Extendable handler pattern: the code is structured so you can add custom processors for event types (e.g., booking.created, invitee.canceled).
If you want faster testing, use ngrok or a similar tunneling tool to expose local server endpoints to Calendly for webhook delivery.
Use Cases
Custom routing into a CRM: Receive a booking.created webhook, look up the invitee in your CRM, create or update contact records, and attach the event metadata.
- Flow: Calendly -> MCP server (validate) -> CRM API -> success/failure logging.
Enriched notifications: Intercept invitee.created events to fetch additional profile information, compute timezone-aware reminders, and push messages to Slack or email.
- Flow: Calendly -> MCP server -> enrichment worker -> Slack webhook.
Privacy-conscious hosting: Keep scheduling events and associated metadata inside your own infrastructure rather than relying entirely on a third-party bridge. Useful for compliance or enterprise policies.
Automated workflows and analytics: Aggregate scheduling activity into a BI datastore or event bus (Kafka, Pub/Sub) to analyze meeting volumes by team, time, or campaign source.
Local development and testing: Run the server locally, use a tunnel (ngrok) to deliver webhook events, and iterate on custom business logic without touching production systems.
Extending and Troubleshooting
- Add new event handlers by following the handler pattern in the codebase (look for the webhook dispatcher module).
- Enable more detailed logging for troubleshooting webhook validation and downstream errors.
- If webhooks fail, check signature verification (timestamp/skew) and ensure the CALENDLY_WEBHOOK_SECRET matches what’s configured in your Calendly webhook subscription.
- For production, run the service behind a secure proxy (HTTPS termination), and rotate API/secret values regularly.
This MCP server is intentionally minimal to make it easy to adapt. Fork the repository, add your integrations, and run it wherever you control the infrastructure.