Connect to 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.
https://mcp.cronicular.com/sseNothing to install and no token to copy. Sign-in is secure (OAuth), and Claude can only ever see and change your own dial.
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.zipUnzip 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.
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.
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".
A remote-MCP client connects to one of:
https://mcp.cronicular.com/ssehttps://mcp.cronicular.com/mcpOAuth 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.)
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.
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.
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.
The bundle contains the hosted MCP connector config (.mcp.json), the plugin manifest (.claude-plugin/plugin.json), and the cronicular-dial skill.
cronicular-plugin/ directory to your Claude Code plugin marketplace (or install it as a local plugin), then run /plugin to enable it.https://mcp.cronicular.com/sse as a custom connector (above).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.
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.
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.
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 & path | Scope | Description |
|---|---|---|
GET /events | events:read | List events. Optional ?from=YYYY-MM-DD&to=YYYY-MM-DD filters on start date. |
POST /events | events:write | Create one event. |
GET /anchors | anchors:read | List anchor dates. |
POST /anchors | anchors:write | Create one anchor. |
curl "https://vflfljczmqgcauvdjeti.functions.supabase.co/cronicular-api/events?from=2026-07-01&to=2026-07-31" \
-H "Authorization: Bearer cnk_live_<prefix>_<secret>"
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
}'
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.
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 /eventsLists 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| Field | Type | Notes |
|---|---|---|
title | string | Required. |
start_date | string | Required. YYYY-MM-DD. |
end_date | string | Required. YYYY-MM-DD (= start for single-day). |
calendar_id | string | Required. UUID of the target calendar. |
all_day | boolean | Defaults to true. |
start_time | string | HH:MM, only if all_day is false. |
end_time | string | HH:MM. |
notes | string | Optional free text. |
location | string | Optional free text. |
list_anchors() — GET /anchorsLists all anchor dates on the dial. No arguments.
create_anchor({ … }) — POST /anchors| Field | Type | Notes |
|---|---|---|
label | string | Required. |
date | string | Required. YYYY-MM-DD. |
color | string | slot1..slot12 or a hex. Defaults to slot1. |
icon | string | Optional. |
calendar_id | string | Optional. |
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.
| Tool | REST | What it does |
|---|---|---|
update_event({ id, … }) | PATCH /events/:id | Change any field of an event; only the fields you pass change. |
delete_event({ id }) | DELETE /events/:id | Remove an event (it lands in the app's Restore bin). |
update_anchor({ id, … }) | PATCH /anchors/:id | Rename, 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/:id | Remove an anchor. |
list_calendars() | GET /calendars | Your calendars with their colours, icons and ring order. |
create_calendar({ name, color?, icon?, is_visible? }) | POST /calendars | A new calendar ring. color is slot1..slot12 or a hex. |
update_calendar({ id, … }) | PATCH /calendars/:id | Rename, recolour, re-icon or hide a calendar. |
delete_calendar({ id }) | DELETE /calendars/:id | Remove an empty calendar — refused while it still holds events, so move or delete those first. |
list_groups() | GET /groups | Your saved Groups (one-tap views of the dial, also the widget presets). |
create_group({ name, calendar_ids?, enabled_ring_ids?, anchor_ids? }) | POST /groups | Save a combination of calendars, style rings and anchors. |
update_group({ id, … }) | PATCH /groups/:id | Change a Group's members. |
delete_group({ id }) | DELETE /groups/:id | Remove a Group. |
list_plans() | GET /plans | Your Plans — things that need doing inside a window but have no date yet. |
create_plan({ title, window_start, window_end, target_calendar_id? }) | POST /plans | A new Plan with its date window. |
update_plan({ id, … }) | PATCH /plans/:id | Retitle a Plan or move its window. |
delete_plan({ id }) | DELETE /plans/:id | Remove a Plan. |
Not covered yet: style rings, themes, sharing and Custom Trackers have no tools; ask for them and they go on the list.