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.
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 four tools (list_events, create_event, list_anchors, create_anchor) become available.
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 four operations and the same arguments.
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. |
Scope (v1): events + anchors, read + write only. There are no update/delete tools and no style-ring or theme tools yet.