CalMesh API reference and MCP server setup guide.
# Check availability via REST API
curl "https://calmesh.xyz/api/v1/calendars/work/availability?date=2026-03-15" \
-H "Authorization: Bearer cm_live_..."
# Or use the MCP server
CALMESH_API_KEY=cm_live_... npx @calmesh/mcp-serverAll authenticated endpoints accept a Bearer token in the Authorization header. API keys start with cm_live_ and have one of three scopes:
| Scope | Permissions |
|---|---|
| read | List calendars, query events, check availability, detect conflicts |
| book | Everything in read + create/cancel bookings, manage polls |
| full | Everything in book + manage connections, calendars, webhooks, API keys |
The CalMesh MCP server exposes 19 tools for AI agents via the Model Context Protocol. Install with npm or use npx directly.
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"calmesh": {
"command": "npx",
"args": ["@calmesh/mcp-server"],
"env": { "CALMESH_API_KEY": "cm_live_your_key_here" }
}
}
}// .cursor/mcp.json
{
"mcpServers": {
"calmesh": {
"command": "npx",
"args": ["@calmesh/mcp-server"],
"env": { "CALMESH_API_KEY": "cm_live_your_key_here" }
}
}
}// ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"calmesh": {
"command": "npx",
"args": ["@calmesh/mcp-server"],
"env": { "CALMESH_API_KEY": "cm_live_your_key_here" }
}
}
}CALMESH_API_KEY=cm_live_... \
CALMESH_HTTP_SECRET=your_secret \
npx @calmesh/mcp-server --transport http --port 3100| Tool | Description |
|---|---|
| calmesh_list_calendars | List all unified calendars |
| calmesh_get_events | Get events within a date range |
| calmesh_check_availability | Check available time slots |
| calmesh_find_conflicts | Find overlapping events |
| Tool | Description |
|---|---|
| calmesh_get_slots | Get available booking slots |
| calmesh_create_booking | Create a new booking |
| calmesh_cancel_booking | Cancel a booking |
| calmesh_list_bookings | List bookings with pagination |
| Tool | Description |
|---|---|
| calmesh_create_poll | Create a scheduling poll |
| calmesh_list_polls | List all polls |
| calmesh_get_poll_overlap | Get participant overlap |
| calmesh_decide_poll | Finalize poll with chosen time |
| Tool | Description |
|---|---|
| calmesh_start_oauth_connection | Connect Google or Microsoft calendar |
| calmesh_start_credential_connection | Connect CalDAV or iCal URL |
| calmesh_check_connection_status | Check connection sync status |
| calmesh_list_connections | List all connections |
| calmesh_remove_connection | Remove a connection |
| calmesh_create_calendar | Create unified calendar with sources |
| calmesh_manage_calendar | Update calendar, manage sources |
Base URL: https://calmesh.xyz/api/v1 · OpenAPI spec (JSON)
38 endpoints across 8 categories.
/api/v1/api-keysCreate a new API key (returns the full key once)
auth: session/api/v1/api-keysList all API keys (prefix and metadata only)
auth: session/api/v1/api-keys/:idRevoke an API key
auth: session/api/v1/connectionsList all calendar connections for the authenticated user
auth: session/key/api/v1/connections/googleInitiate Google Calendar OAuth flow
auth: session/api/v1/connections/microsoftInitiate Microsoft Outlook/365 OAuth flow
auth: session/api/v1/connections/icloudConnect Apple iCloud Calendar via CalDAV
auth: session/api/v1/connections/:idGet connection details and status
auth: session/key/api/v1/connections/:idDisconnect a calendar (deletes connection and cached events)
auth: session/key/api/v1/connections/:id/syncTrigger a manual sync for a connection
auth: session/key/api/v1/calendarsCreate a unified calendar
auth: session/key/api/v1/calendarsList all unified calendars
auth: session/key/api/v1/calendars/:slugGet unified calendar details
auth: session/key/api/v1/calendars/:slugUpdate a unified calendar
auth: session/key/api/v1/calendars/:slugDelete a unified calendar
auth: session/key/api/v1/calendars/:slug/sourcesAdd a connection to a unified calendar
auth: session/key/api/v1/calendars/:slug/sources/reorderReorder sources within a unified calendar (sort_order determines default write target)
auth: session/api/v1/calendars/:slug/sources/:sourceIdRemove a connection from a unified calendar
auth: session/key/api/v1/calendars/:slug/eventsCreate an event on a connected calendar (for AI agents/MCP)
auth: session/key/api/v1/calendars/:slug/eventsDelete an event from a connected calendar
auth: session/key/api/v1/calendars/:slug/eventsQuery merged events from all sources in a unified calendar
auth: session/key/api/v1/calendars/:slug/availabilityQuery free/busy availability for a unified calendar
auth: session/key/api/v1/calendars/:slug/conflictsDetect overlapping events across different sources
auth: session/key/api/v1/booking-pagesCreate a booking page attached to a unified calendar
auth: session/key/api/v1/booking-pagesList all booking pages
auth: session/key/api/v1/booking-pages/:slugGet booking page configuration
auth: session/key/api/v1/booking-pages/:slugUpdate a booking page
auth: session/key/api/v1/booking-pages/:slugDelete a booking page
auth: session/key/api/v1/booking-pages/:slug/slotsGet available booking slots (public)
/api/v1/booking-pages/:slug/bookCreate a booking (public, visitor submits)
/api/v1/bookingsList bookings for the authenticated user
auth: session/key/api/v1/bookings/:idGet booking details
auth: session/key/api/v1/bookings/:id/cancelCancel a booking (HMAC signature for visitors, auth for owner)
/api/v1/billingGet current subscription status
auth: session/api/v1/billing/subscribeInitiate Mollie first payment for subscription
auth: session/api/v1/billing/cancelCancel active subscription
auth: session/api/v1/meGet current user profile
auth: session/key/api/healthHealth check endpoint
Embed a CalMesh booking page on any website. Supports inline (iframe) and popup (modal) modes.
<div
data-calmesh-handle="your-handle"
data-calmesh-slug="your-booking-page"
data-mode="inline"
></div>
<script src="https://calmesh.xyz/embed.js" defer></script><div
data-calmesh-handle="your-handle"
data-calmesh-slug="your-booking-page"
data-mode="popup"
data-color="#f97316"
></div>
<script src="https://calmesh.xyz/embed.js" defer></script>