Skip to main content
Glama

@calmesh/mcp-server

MCP server for CalMesh — AI-first calendar infrastructure. Connects AI agents to your calendars, bookings, and scheduling polls via the Model Context Protocol.

Quick Start

CALMESH_API_KEY=cm_live_... npx @calmesh/mcp-server

Related MCP server: gg-mcp

Setup

Claude Desktop

Add to your Claude Desktop config (~/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

Add to .cursor/mcp.json in your project:

{
  "mcpServers": {
    "calmesh": {
      "command": "npx",
      "args": ["@calmesh/mcp-server"],
      "env": {
        "CALMESH_API_KEY": "cm_live_your_key_here"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "calmesh": {
      "command": "npx",
      "args": ["@calmesh/mcp-server"],
      "env": {
        "CALMESH_API_KEY": "cm_live_your_key_here"
      }
    }
  }
}

Available Tools

Core Tools

Read operations (require read scope)

Tool

Description

calmesh_list_calendars

List all unified calendars

calmesh_get_events

Get events within a date range

calmesh_get_event_details

Get full event details (title, description, location)

calmesh_check_availability

Check available time slots

calmesh_find_conflicts

Find overlapping events

Write operations (require write scope)

Tool

Description

calmesh_create_event

Create a calendar event

calmesh_delete_event

Delete a calendar event

Booking Tools (require book scope)

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

Poll Tools (require book scope for create/decide, read for list/overlap)

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

Setup Tools (require full scope)

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

HTTP Transport

For remote or hosted MCP clients, use the HTTP transport:

CALMESH_API_KEY=cm_live_... \
CALMESH_HTTP_SECRET=your_secret_token \
npx @calmesh/mcp-server --transport http --port 3100

The server binds to 127.0.0.1 by default. All requests must include Authorization: Bearer <http-secret>.

CLI Options

--api-key <key>       CalMesh API key (prefer CALMESH_API_KEY env var)
--base-url <url>      API base URL (default: https://calmesh.xyz)
--transport <type>    stdio (default) or http
--port <port>         HTTP port (default: 3100)
--host <host>         HTTP host (default: 127.0.0.1)
--http-secret <token> Required for HTTP transport
--help                Show help
--version             Show version

Troubleshooting

"Invalid or expired API key" Generate a new API key at calmesh.xyz/dashboard/api-keys.

"Insufficient permissions" Your API key scope is too low. Core tools need read, booking tools need book, setup tools need full.

"Rate limit exceeded" Wait a moment and retry.

"Unable to reach CalMesh API" Check your network connection and --base-url value.

"CalMesh API request timed out" Requests time out after 30 seconds. Retry or check service status.

HTTP transport "Unauthorized" Ensure your client sends Authorization: Bearer <http-secret> with every request.

Available Tools

22 tools
calmesh_cancel_bookingA

Cancel an existing booking by ID. Returns the booking ID and cancelled status. Requires "book" scope.

Inputs: booking_id (required).

calmesh_check_availabilityB

Check available time slots on a calendar for a given date. Returns free slots where meetings can be scheduled. Requires "read" scope.

Inputs: slug (required), date, duration, timezone.

calmesh_check_connection_statusA

Check the sync status of a calendar connection. Shows if the connection is active, errored, or disconnected. Requires "full" scope.

Inputs: connection_id (required).

calmesh_create_bookingA

Create a new booking on a booking page. Returns booking ID, status, and confirmed time. Requires "book" scope.

Inputs: start_time (required), visitor_name (required), visitor_email (required), visitor_timezone (required), +2 more.

calmesh_create_calendarA

Create a new unified calendar and optionally attach connection sources. Returns the calendar and source attachment results (may be partial on failure). Requires "full" scope.

Inputs: name (required), slug, timezone, connection_ids.

calmesh_create_eventA

Create a calendar event on a connected calendar. The event is written to the default write target (first writable source by sort order) unless a specific sourceId is provided. Use calmesh_list_calendars to find calendar slugs. Requires "write" scope or higher.

Inputs: slug (required), summary (required), end_time (required), timezone (required), +4 more.

calmesh_create_pollA

Create a scheduling poll and send invitation emails to participants. Returns the poll with a shareable URL. Requires "book" scope.

Inputs: title (required), timezone (required), participants (required), date_range_end (required), +2 more.

calmesh_decide_pollA

Finalize a poll by selecting the decided meeting time. Marks the poll as decided. Requires "book" scope.

Inputs: slug (required), decided_time (required).

calmesh_delete_eventA

Delete a calendar event from a connected calendar. Requires the remoteEventId (from calmesh_create_event or calmesh_get_events) and the sourceId identifying which calendar source to delete from. Requires "write" scope or higher.

Inputs: slug (required), source_id (required), remote_event_id (required).

calmesh_find_conflictsA

Find overlapping events (conflicts) within a date range. Returns pairs of events that overlap in time. Requires "read" scope.

Inputs: end (required), slug (required), start (required).

calmesh_get_event_detailsA

Get full event details (title, description, location) for a date range. Fetches from calendar providers on demand. Use this when you need to understand what events are about, not just when they occur. Requires "read" scope.

Inputs: end (required), slug (required), start (required).

calmesh_get_eventsA

Get calendar events within a date range. Returns event title, start/end times, status, and source connection. Requires "read" scope.

Inputs: end (required), slug (required), start (required), limit, +1 more.

calmesh_get_poll_overlapA

Get overlapping availability slots for a poll. Shows which time slots work for the most participants. Requires "read" scope.

Inputs: slug (required).

calmesh_get_slotsA

Get available booking slots for a booking page on a given date. Returns time slots visitors can book. Requires "book" scope.

Inputs: date (required), slug (required), timezone.

calmesh_list_bookingsA

List bookings with optional pagination and filtering. Returns booking details including visitor info and status. Requires "book" scope.

Inputs: limit, offset, stakeholder_id.

calmesh_list_calendarsA

List all unified calendars for the authenticated user. Returns name, slug, timezone, and default status for each calendar. Requires "read" scope.

Inputs: no named parameters.

calmesh_list_connectionsA

List all calendar connections for the authenticated user. Shows provider, status, and last sync time. Requires "full" scope.

Inputs: no named parameters.

calmesh_list_pollsA

List all scheduling polls. Returns poll details with participant counts and status. Requires "read" scope.

Inputs: no named parameters.

calmesh_manage_calendarA

Update a calendar: rename, change timezone, add/remove connection sources, set write-back connection. Returns what succeeded and what failed. Requires "full" scope.

Inputs: slug (required), name, timezone, add_connections, +2 more.

calmesh_remove_connectionA

Remove a calendar connection. This disconnects the provider and stops syncing. Requires "full" scope.

Inputs: connection_id (required).

calmesh_start_credential_connectionA

Connect a CalDAV server or iCal URL using credentials. For CalDAV: server URL, username, and password required. For iCal URL: only the public URL is needed. Requires "full" scope.

Inputs: url (required), provider (required), password, username.

calmesh_start_oauth_connectionA

Start an OAuth calendar connection. Returns an auth_url the user must visit in their browser to authorize access. Requires "full" scope.

Inputs: provider (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 22 tools

    Disambiguation3/5

    Most tools are clearly separated by domain (events, bookings, polls, connections), but 'get_events' and 'get_event_details' both fetch events in a date range with different detail levels, and 'check_availability' and 'get_slots' both return free time slots but in different contexts. These overlapping boundaries could cause agents to select the wrong tool.

    Naming Consistency4/5

    All tool names follow a consistent calmesh_verb_noun snake_case pattern, which is easy to read and predict. However, read operations use a mix of 'list', 'get', and 'check' (e.g., list_calendars, get_events, check_availability), a minor inconsistency that slightly reduces predictability.

    Tool Count4/5

    With 22 tools covering calendars, events, bookings, polls, and connections, the count is high but justified by the breadth of functionality. It sits slightly above the ideal 3-15 range but is not excessive for the domain.

    Completeness3/5

    The tool surface covers most workflows, but there is no update_event tool, making it impossible to modify existing events, and no delete_calendar. Bookings and polls also lack update operations, forcing workarounds like delete-and-recreate. These gaps could hinder common tasks.

    Related MCP Connectors

    Related MCP Servers