Cronofy MCP by usefulapi

MCP server for Cronofy — read calendars, events and free/busy, and create, update or delete events.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
65%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,288Tokens (tool definitions)
~1.2 KBTypical response size
Moderate attention impact (1.01% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cronofy": {
      "url": "https://cronofy.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://cronofy.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢cronofy_get_account

Get the authenticated Cronofy account's details (id, email, name, default tzid, locale). API: GET /v1/account.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cronofy_get_userinfo

Get the OpenID-style profile of the authenticated user (sub, email, Cronofy profile info). API: GET /v1/userinfo.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cronofy_list_calendars

List all calendars the authenticated account can see (id, name, profile, readonly, primary). API: GET /v1/calendars.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cronofy_list_profiles

List the connected calendar accounts/profiles (e.g. Google, Office 365) linked to this Cronofy account. API: GET /v1/profiles.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cronofy_read_events(tzid, from, to, calendar_ids, include_managed, ...)

Read events across the account's calendars over a time window. Returns { pages, events }. API: GET /v1/events.

Input Schema

{
  "type": "object",
  "properties": {
    "tzid": {
      "type": "string",
      "description": "REQUIRED time zone id for the response, e.g. \"Etc/UTC\" or \"America/New_York\"."
    },
    "from": {
      "description": "Start of the window — date (yyyy-mm-dd) or ISO 8601 datetime.",
      "type": "string"
    },
    "to": {
      "description": "End of the window — date (yyyy-mm-dd) or ISO 8601 datetime.",
      "type": "string"
    },
    "calendar_ids": {
      "description": "Restrict to these calendar ids (sent as repeated calendar_ids[] params).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "include_managed": {
      "description": "Include events created via the Cronofy API. Default false.",
      "type": "boolean"
    },
    "include_deleted": {
      "description": "Include deleted events. Default false.",
      "type": "boolean"
    },
    "last_modified": {
      "description": "Only events modified since this ISO 8601 datetime.",
      "type": "string"
    },
    "only_managed": {
      "description": "Return only events created via the Cronofy API. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "tzid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cronofy_get_free_busy(tzid, from, to, calendar_ids, include_managed)

Read free/busy information across the account's calendars over a time window. Returns { pages, free_busy }. API: GET /v1/free_busy.

Input Schema

{
  "type": "object",
  "properties": {
    "tzid": {
      "type": "string",
      "description": "REQUIRED time zone id for the response, e.g. \"Etc/UTC\"."
    },
    "from": {
      "description": "Start of the window — date (yyyy-mm-dd) or ISO 8601 datetime.",
      "type": "string"
    },
    "to": {
      "description": "End of the window — date (yyyy-mm-dd) or ISO 8601 datetime.",
      "type": "string"
    },
    "calendar_ids": {
      "description": "Restrict to these calendar ids (sent as repeated calendar_ids[] params).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "include_managed": {
      "description": "Include events created via the Cronofy API. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "tzid"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cronofy_upsert_event(calendar_id, event_id, summary, start, end, ...)

Creates or updates an event on a REAL connected calendar (upsert by event_id). This writes to the user's actual calendar. API: POST /v1/calendars/{calendar_id}/events.

Input Schema

{
  "type": "object",
  "properties": {
    "calendar_id": {
      "type": "string",
      "description": "Target calendar id (from cronofy_list_calendars)."
    },
    "event_id": {
      "type": "string",
      "description": "YOUR unique id for the event. Re-using it updates the same event."
    },
    "summary": {
      "type": "string",
      "description": "Event title/summary."
    },
    "start": {
      "type": "string",
      "description": "Event start — ISO 8601 datetime or a date (yyyy-mm-dd) string."
    },
    "end": {
      "type": "string",
      "description": "Event end — ISO 8601 datetime or a date (yyyy-mm-dd) string."
    },
    "description": {
      "description": "Event description/body.",
      "type": "string"
    },
    "tzid": {
      "description": "Time zone id for the start/end, e.g. \"America/New_York\".",
      "type": "string"
    },
    "location_description": {
      "description": "Free-text location (sent as location.description).",
      "type": "string"
    }
  },
  "required": [
    "calendar_id",
    "event_id",
    "summary",
    "start",
    "end"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cronofy_delete_event(calendar_id, event_id)

Deletes an event (by your event_id) from a real connected calendar. Destructive. API: DELETE /v1/calendars/{calendar_id}/events.

Input Schema

{
  "type": "object",
  "properties": {
    "calendar_id": {
      "type": "string",
      "description": "Calendar id the event lives on."
    },
    "event_id": {
      "type": "string",
      "description": "YOUR event_id for the event to delete (sent in the JSON body)."
    }
  },
  "required": [
    "calendar_id",
    "event_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
failed observationversion not recorded—
failed observationversion not recorded—