Cronicular Connect to Claude

Use Cronicular in Claude

Connect Claude to your Cronicular dial and it can read and add the two kinds of date you keep there — events (ranges on a coloured calendar) and anchors (single marked days like birthdays or deadlines) — just by asking, in plain language.

Add it in three steps

  1. In Claude, open Settings → Connectors → Add custom connector.
  2. Paste this address and add it:
    https://mcp.cronicular.com/sse
  3. Claude opens a Cronicular sign-in page — sign in with your Cronicular email & password. That's it.

Nothing to install and no token to copy. Sign-in is secure (OAuth), and Claude can only ever see and change your own dial.

Or install the one-click plugin

Prefer a single install that also teaches Claude how to use Cronicular well? Download the plugin — it bundles the connector and a built-in skill, so Claude knows how to turn your requests into the right events and anchors.

Download cronicular-plugin.zip

Unzip it, add the cronicular-plugin/ folder to your Claude Code plugin marketplace, run /plugin to enable it, then sign in on first use. Full install steps below.

What you can ask Claude

Once it's connected, just talk to Claude normally. For example:

Claude reads and writes only events and anchors, and only on your own dial. You can revoke access any time in the app under Settings → Cronicular API.


For developers & other clients — the same data is available three ways, all scoped to your account: hosted connector details · the plugin · local MCP server · direct REST API · tool reference.

1. Hosted MCP connector

The simplest option. Point a remote-MCP client at a single URL and sign in with your Cronicular account — there's nothing to install and no token to copy. Cronicular handles the OAuth and provisions scoped API access for you.

API access is a Pro feature. Sign-in works on any account, but a token is only issued to a Pro subscriber — connecting on a free account returns "Cronicular API access requires Cronicular Pro".

Connect URL

A remote-MCP client connects to one of:

OAuth discovery lives at https://mcp.cronicular.com/.well-known/oauth-authorization-server, so a compliant client only needs the base URL. (Adding it in Claude is the three steps at the top of this page.)

Claude Desktop / stdio-only clients

Bridge the hosted connector with mcp-remote:

{
  "mcpServers": {
    "cronicular": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.cronicular.com/sse"]
    }
  }
}

The first run opens a browser for the OAuth login.

How sign-in works

OAuth 2.1 + PKCE. Your client registers itself, you're sent to a Cronicular login page, and on sign-in Cronicular mints a scoped token for your account server-side (scopes events:read, events:write, anchors:read, anchors:write) and returns a short-lived MCP access token to your client. Every tool call is scoped to your account — the connector never exposes another user's data, and your password is never stored.

Download the Claude plugin

Want the connector and a built-in skill that teaches Claude to use it well — extracting dates from emails into events, setting up recurring training/anniversary anchors, and summarising what's on your dial? Install the Cronicular plugin. One install both connects Claude and guides it.

Download cronicular-plugin.zip

The bundle contains the hosted MCP connector config (.mcp.json), the plugin manifest (.claude-plugin/plugin.json), and the cronicular-dial skill.

Install

2. Local MCP server

Run the MCP server yourself with a personal access token. Good for clients you'd rather not route through the hosted connector, or for offline-style control.

Get a token

In the app: Settings → Integrations → Cronicular API → New token. Copy it — it's only shown once. Tokens look like cnk_live_<prefix>_<secret> and carry the events + anchors read/write scopes.

Install & configure

npm install --global cronicular-mcp

Add it to your MCP client config (example: Claude Desktop's claude_desktop_config.json):

{
  "mcpServers": {
    "cronicular": {
      "command": "cronicular-mcp",
      "env": {
        "CRONICULAR_API_URL": "https://vflfljczmqgcauvdjeti.functions.supabase.co/cronicular-api",
        "CRONICULAR_TOKEN": "cnk_live_<prefix>_<secret>"
      }
    }
  }
}

Restart your MCP client. The same tools become available — list, create, update and delete for events, anchors, calendars, groups and plans.

3. Direct REST API

If you're writing your own integration, call the API directly. Authenticate with a personal access token (the same cnk_live_… token from the app) in the Authorization header:

Authorization: Bearer cnk_live_<prefix>_<secret>

Base URL: https://vflfljczmqgcauvdjeti.functions.supabase.co/cronicular-api

Method & pathScopeDescription
GET /eventsevents:readList events. Optional ?from=YYYY-MM-DD&to=YYYY-MM-DD filters on start date.
POST /eventsevents:writeCreate one event.
GET /anchorsanchors:readList anchor dates.
POST /anchorsanchors:writeCreate one anchor.

Example — list next month's events

curl "https://vflfljczmqgcauvdjeti.functions.supabase.co/cronicular-api/events?from=2026-07-01&to=2026-07-31" \
  -H "Authorization: Bearer cnk_live_<prefix>_<secret>"

Example — create an event

curl -X POST "https://vflfljczmqgcauvdjeti.functions.supabase.co/cronicular-api/events" \
  -H "Authorization: Bearer cnk_live_<prefix>_<secret>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Conference",
    "start_date": "2026-03-03",
    "end_date": "2026-03-05",
    "calendar_id": "<calendar-uuid>",
    "all_day": true
  }'

Example — create an anchor

curl -X POST "https://vflfljczmqgcauvdjeti.functions.supabase.co/cronicular-api/anchors" \
  -H "Authorization: Bearer cnk_live_<prefix>_<secret>" \
  -H "Content-Type: application/json" \
  -d '{ "label": "Mum'\''s birthday", "date": "2026-09-14", "color": "slot4" }'

Every request is scoped to the token's user — you only ever see and write your own dial. all_day defaults to true; anchor color defaults to slot1.

Tool & endpoint reference

The MCP tools (hosted and local) and the REST endpoints share the same operations and the same arguments: list, create, update and delete across events, anchors, calendars, groups and plans.

list_events({ from?, to? })GET /events

Lists events on the dial. Both bounds are optional YYYY-MM-DD strings filtering on the event start date. Returns up to 500, ordered by start date.

create_event({ … })POST /events

FieldTypeNotes
titlestringRequired.
start_datestringRequired. YYYY-MM-DD.
end_datestringRequired. YYYY-MM-DD (= start for single-day).
calendar_idstringRequired. UUID of the target calendar.
all_daybooleanDefaults to true.
start_timestringHH:MM, only if all_day is false.
end_timestringHH:MM.
notesstringOptional free text.
locationstringOptional free text.

list_anchors()GET /anchors

Lists all anchor dates on the dial. No arguments.

create_anchor({ … })POST /anchors

FieldTypeNotes
labelstringRequired.
datestringRequired. YYYY-MM-DD.
colorstringslot1..slot12 or a hex. Defaults to slot1.
iconstringOptional.
calendar_idstringOptional.

Everything else — the full tool set

Twenty tools in all, every one scoped to the signed-in account: Claude can read your dial (the list_* tools return your own calendars, events, anchors, groups and plans) as well as write to it. Each takes the same fields as its create counterpart above, plus id for updates and deletes.

ToolRESTWhat it does
update_event({ id, … })PATCH /events/:idChange any field of an event; only the fields you pass change.
delete_event({ id })DELETE /events/:idRemove an event (it lands in the app's Restore bin).
update_anchor({ id, … })PATCH /anchors/:idRename, move or recolour an anchor; link it to another anchor (linked_anchor_id + link_style: chevron, plane, truck, footprints) or to an event (linked_event_id), or pass null to unlink.
delete_anchor({ id })DELETE /anchors/:idRemove an anchor.
list_calendars()GET /calendarsYour calendars with their colours, icons and ring order.
create_calendar({ name, color?, icon?, is_visible? })POST /calendarsA new calendar ring. color is slot1..slot12 or a hex.
update_calendar({ id, … })PATCH /calendars/:idRename, recolour, re-icon or hide a calendar.
delete_calendar({ id })DELETE /calendars/:idRemove an empty calendar — refused while it still holds events, so move or delete those first.
list_groups()GET /groupsYour saved Groups (one-tap views of the dial, also the widget presets).
create_group({ name, calendar_ids?, enabled_ring_ids?, anchor_ids? })POST /groupsSave a combination of calendars, style rings and anchors.
update_group({ id, … })PATCH /groups/:idChange a Group's members.
delete_group({ id })DELETE /groups/:idRemove a Group.
list_plans()GET /plansYour Plans — things that need doing inside a window but have no date yet.
create_plan({ title, window_start, window_end, target_calendar_id? })POST /plansA new Plan with its date window.
update_plan({ id, … })PATCH /plans/:idRetitle a Plan or move its window.
delete_plan({ id })DELETE /plans/:idRemove a Plan.

Not covered yet: style rings, themes, sharing and Custom Trackers have no tools; ask for them and they go on the list.