Chronary
by chronary.ai · remote · local (npm) · no sign-in to list tools · v1.5.2 · published by ai.chronary
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
54 tools: 10 can delete or cancel things, 20 change things and 24 only read.
Scanned Oct 21, 2026
- Deletes or cancels10Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things20Claude Code: ask: see these tools
- Only reads24Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http chronary https://api.chronary.ai/mcp --header 'Authorization: <your-authorization>'Findings
Matches of fixed checks, with the text they matched.
The description mentions "credentials".
What this check looks forMatched text
description: "...s to self-provision or rotate per-agent credentials. The plaintext key is returned exactly..."
The description mentions "credentials".
What this check looks forMatched text
description: "...a human; the agent never receives OAuth credentials, provider calendar names, or event data..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
54 tools
Deletes or cancels 10Claude Code: deny
cancel_connection_linkCancel a pending human-calendar setup request.No findings
Why it is in this group
- The name "cancel_connection_link" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel a pending human-calendar setup request. This invalidates the setup URL and does not disconnect an already completed Google or Microsoft connection.
cancel_eventDelete or cancel an event from a calendar.No findings
Why it is in this group
- The name "cancel_event" says "cancel": a word for removing or ending something.
Description, as the server wrote it Delete or cancel an event from a calendar. Use this to remove, cancel, or delete any scheduled event or appointment. The event is marked cancelled and excluded from future availability calculations. For a recurring series, pass `occurrence_start` to cancel just that one occurrence (the series continues); omit it to cancel the whole series. `calendar_id` is optional — if omitted the calendar is looked up from the event. Provide `calendar_id` to fail fast on cross-calendar typos.
cancel_proposalCancel an open proposal.No findings
Why it is in this group
- The name "cancel_proposal" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel an open proposal. Fires a proposal.cancelled webhook with reason="organizer_cancelled". Requires an org-level API key. Pro plan only.
clear_availability_rulesRemove the availability rules from a calendar, reverting to the default (no buffers, no working-hours mask).No findings
Why it is in this group
- The description's first verb is "remove": a word for removing or ending something.
Description, as the server wrote it Remove the availability rules from a calendar, reverting to the default (no buffers, no working-hours mask). Returns the deleted row, or an error if none were set.
delete_agentDecommission an agent.No findings
Why it is in this group
- The name "delete_agent" says "delete": a word for removing or ending something.
Description, as the server wrote it Decommission an agent. This marks the agent as decommissioned and revokes all of its scoped API keys. Requires an org-level API key — agent-scoped keys cannot delete agents.
delete_booking_pageDelete (deactivate) a booking page.No findings
Why it is in this group
- The name "delete_booking_page" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete (deactivate) a booking page. Its hosted URL stops resolving; already-booked events are unaffected.
delete_calendarDelete a calendar (soft delete).No findings
Why it is in this group
- The name "delete_calendar" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete a calendar (soft delete). Its events are no longer returned and it stops contributing to availability. Agent-scoped keys may only delete calendars owned by their agent.
delete_ical_subscriptionDelete an external iCal feed subscription.No findings
Why it is in this group
- The name "delete_ical_subscription" says "delete": a word for removing or ending something.
Description, as the server wrote it Delete an external iCal feed subscription. Events previously synced from the feed are no longer refreshed.
delete_webhookPermanently delete a webhook subscription.No findings
Why it is in this group
- The name "delete_webhook" says "delete": a word for removing or ending something.
- The description says "Permanently delete".
Description, as the server wrote it Permanently delete a webhook subscription. This frees its endpoint slot against the per-plan cap. Requires an org-level API key.
revoke_scoped_keyRevoke an agent-scoped API key by ID.No findings
Why it is in this group
- The name "revoke_scoped_key" says "revoke": a word for removing or ending something.
Description, as the server wrote it Revoke an agent-scoped API key by ID. Revocation is permanent (cannot be un-revoked); the key stops authenticating within about a minute. Requires an org-level API key.
Changes things 20Claude Code: ask
accept_termsRe-accept the current Chronary terms of service on behalf of the calling org.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Re-accept the current Chronary terms of service on behalf of the calling org. Use this when responses carry the Chronary-Terms-Upgrade-Required header — a material ToS bump otherwise leaves MCP-only agents stuck without a console session. Pass the current tos_version (read it from GET /v1/auth/terms/current). Requires an org-level API key (chr_sk_*); agent-scoped keys cannot accept org-wide terms.
confirm_eventPromote a held event to a confirmed booking.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Promote a held event to a confirmed booking. The event must currently have status="hold" and its hold_expires_at must not have passed. After confirmation, event.started and event.ended lifecycle webhooks fire at the scheduled times.
create_agentRegister your agent (AI assistant, human participant, or resource) with Chronary so it can own calendars, events, and webhooks.No findings
Why it is in this group
- The name "create_agent" says "create": a word for a change.
Description, as the server wrote it Register your agent (AI assistant, human participant, or resource) with Chronary so it can own calendars, events, and webhooks.
create_booking_pageCreate a public booking page (a hosted scheduling link) for a calendar.No findings
Why it is in this group
- The name "create_booking_page" says "create": a word for a change.
Description, as the server wrote it Create a public booking page (a hosted scheduling link) for a calendar. Returns a booking_url to send to a human; when they pick a slot, a confirmed event is created on the calendar and an event.created webhook fires with a booking_page_id field. Set availability_constraints to restrict to weekly working hours; existing calendar events always block slots.
create_calendarCreate a calendar to hold events and track availability.No findings
Why it is in this group
- The name "create_calendar" says "create": a word for a change.
Description, as the server wrote it Create a calendar to hold events and track availability. Calendars are required before creating events — call this first when setting up a new agent. An agent can have multiple calendars (e.g. "Work", "Personal"). Org-level calendars (no agent_id) can be used as shared resources like meeting rooms.
create_connection_linkRequest human setup of Google Calendar or Microsoft Outlook for a Chronary calendar.1 finding
Why it is in this group
- The name "create_connection_link" says "create": a word for a change.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...a human; the agent never receives OAuth credentials, provider calendar names, or event data..."
Description, as the server wrote it Request human setup of Google Calendar or Microsoft Outlook for a Chronary calendar. Give setup_url to a human; the agent never receives OAuth credentials, provider calendar names, or event data. The secret URL is returned only on first creation. If reused=true and setup_url is null, retain the original URL or cancel this link and create a replacement.
create_eventCreate a booking, appointment, meeting, hold, or any scheduled event on a calendar.No findings
Why it is in this group
- The name "create_event" says "create": a word for a change.
Description, as the server wrote it Create a booking, appointment, meeting, hold, or any scheduled event on a calendar. The calendar_id comes from create_calendar or list_events. Once created, this event blocks the agent's availability during that time and appears in availability queries. Use status="hold" with hold_expires_at to tentatively reserve a slot that auto-releases on TTL.
create_proposalCreate a scheduling proposal — send a set of candidate time slots to one or more participant agents so they can accept, decline, or counter-propose.No findings
Why it is in this group
- The name "create_proposal" says "create": a word for a change.
Description, as the server wrote it Create a scheduling proposal — send a set of candidate time slots to one or more participant agents so they can accept, decline, or counter-propose. The organizer agent owns the proposal; once every participant responds, the system auto-resolves to the highest-scoring slot (or cancels if all decline). Requires an org-level API key. Pro plan only.
create_scoped_keyCreate an agent-scoped API key (chr_ak_*) that can only act on behalf of a single agent.1 finding
Why it is in this group
- The name "create_scoped_key" says "create": a word for a change.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...s to self-provision or rotate per-agent credentials. The plaintext key is returned exactly..."
Description, as the server wrote it Create an agent-scoped API key (chr_ak_*) that can only act on behalf of a single agent. Use this to self-provision or rotate per-agent credentials. The plaintext key is returned exactly once in the response — store it immediately, it cannot be retrieved later. Requires an org-level API key.
create_webhookCreate a webhook subscription so the org receives HTTP POST notifications when events occur (e.g.No findings
Why it is in this group
- The name "create_webhook" says "create": a word for a change.
Description, as the server wrote it Create a webhook subscription so the org receives HTTP POST notifications when events occur (e.g. event.created, proposal.confirmed). The signing secret is returned ONCE in this response — store it to verify the HMAC-SHA256 signature on delivered payloads. Requires an org-level API key.
release_eventManually release a held event before its hold_expires_at.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Manually release a held event before its hold_expires_at. The event must currently have status="hold". Frees the slot for other agents to book.
respond_to_proposalSubmit a response (accept / decline / counter) on behalf of one participant agent to an open proposal.No findings
Why it is in this group
- The description's first verb is "submit": a word for a change.
Description, as the server wrote it Submit a response (accept / decline / counter) on behalf of one participant agent to an open proposal. An "accept" requires the slot id from the proposal; a "counter" can suggest alternative slots. When all participants have responded the proposal auto-resolves — no separate resolve call needed in the normal flow. Requires an org-level API key. Pro plan only.
set_availability_rulesSet or replace the availability rules on a calendar — buffer times before/after events and optional per-day working hours.No findings
Why it is in this group
- The name "set_availability_rules" says "set": a word for a change.
Description, as the server wrote it Set or replace the availability rules on a calendar — buffer times before/after events and optional per-day working hours. When these rules are set, every availability query on this calendar automatically applies them (busy-block expansion for buffers, masking outside working hours). Upsert: overwrites any existing rules.
subscribe_icalLink an external iCal feed (e.g.No findings
Why it is in this group
- The name "subscribe_ical" says "subscribe": a word for a change.
Description, as the server wrote it Link an external iCal feed (e.g. a human's Google Calendar) to an agent's calendar so external events appear in availability calculations. The target calendar must be owned by the specified agent — create the calendar with that agent_id first (org-level calendars without an agent_id cannot host external iCal subscriptions; create a dedicated per-agent calendar for sync targets).
sync_ical_subscriptionTrigger an immediate sync of an external iCal feed subscription instead of waiting for the next scheduled poll.No findings
Why it is in this group
- The name "sync_ical_subscription" says "sync": a word for a change.
Description, as the server wrote it Trigger an immediate sync of an external iCal feed subscription instead of waiting for the next scheduled poll. Returns once the sync has been queued.
update_agentUpdate an agent's name, description, metadata, or status (active/paused).No findings
Why it is in this group
- The name "update_agent" says "update": a word for a change.
Description, as the server wrote it Update an agent's name, description, metadata, or status (active/paused). Requires an org-level API key — agent-scoped keys cannot mutate agents.
update_calendarUpdate a calendar's name, timezone, agent status, default reminders, or metadata.No findings
Why it is in this group
- The name "update_calendar" says "update": a word for a change.
Description, as the server wrote it Update a calendar's name, timezone, agent status, default reminders, or metadata. Agent-scoped keys may only update calendars owned by their agent.
update_eventReschedule or edit an event — change its title, description, start/end times, location, status, reminders, or metadata.No findings
Why it is in this group
- The name "update_event" says "update": a word for a change.
Description, as the server wrote it Reschedule or edit an event — change its title, description, start/end times, location, status, reminders, or metadata. Use this to move an appointment to a new time or update its details. Provide only the fields you want to change. Holds cannot be edited via this tool (use confirm_event / release_event). External iCal events are read-only. `calendar_id` is optional — if omitted it is resolved from the event.
update_ical_subscriptionUpdate an external iCal feed subscription — change its label or its feed URL.No findings
Why it is in this group
- The name "update_ical_subscription" says "update": a word for a change.
Description, as the server wrote it Update an external iCal feed subscription — change its label or its feed URL. Changing the URL forces a full re-sync on the next poll.
update_webhookUpdate a webhook subscription — change its delivery URL, the set of subscribed event types, or pause/resume it via active.No findings
Why it is in this group
- The name "update_webhook" says "update": a word for a change.
Description, as the server wrote it Update a webhook subscription — change its delivery URL, the set of subscribed event types, or pause/resume it via active. At least one field must be supplied. Requires an org-level API key.
Only reads 24Claude Code: allow
find_meeting_timeFind slots when multiple agents are free across Chronary calendars and any human calendars authorized for each agent.No findings
Why it is in this group
- The name "find_meeting_time" says "find": a word for reading.
Description, as the server wrote it Find slots when multiple agents are free across Chronary calendars and any human calendars authorized for each agent. This tool is fail-closed: always inspect `availability_state` and `warnings` before using slots. Accepts `agents`/`start`/`end` or their aliases.
get_agentFetch a single agent by ID.No findings
Why it is in this group
- The name "get_agent" says "get": a word for reading.
Description, as the server wrote it Fetch a single agent by ID. An agent represents an AI assistant, human, or shared resource (e.g. a meeting room). Agent-scoped API keys may only read their own agent.
get_audit_logList audit-log entries for the calling org — mutating operations and auth-lifecycle events, newest first.No findings
Why it is in this group
- The name "get_audit_log" says "get": a word for reading.
Description, as the server wrote it List audit-log entries for the calling org — mutating operations and auth-lifecycle events, newest first. Results are clamped to the plan's retention window. Requires an org-level API key (chr_sk_*); agent-scoped keys cannot read the org-wide audit log.
get_availabilityCheck when a single agent is free across its Chronary calendars and any human calendars authorized for that agent.No findings
Why it is in this group
- The name "get_availability" says "get": a word for reading.
Description, as the server wrote it Check when a single agent is free across its Chronary calendars and any human calendars authorized for that agent. This tool is fail-closed: always inspect `availability_state` and `warnings` before using slots. Accepts `start`/`end` or the `start_time`/`end_time` aliases.
get_availability_rulesRead the buffer times and working-hours rules configured on a calendar.No findings
Why it is in this group
- The name "get_availability_rules" says "get": a word for reading.
Description, as the server wrote it Read the buffer times and working-hours rules configured on a calendar. Returns the rules row, or an error if none are set.
get_booking_pageFetch a single booking page by ID, including its public booking_url and settings.No findings
Why it is in this group
- The name "get_booking_page" says "get": a word for reading.
Description, as the server wrote it Fetch a single booking page by ID, including its public booking_url and settings.
get_calendarFetch a single calendar by ID, including its name, timezone, agent status, and default reminders.No findings
Why it is in this group
- The name "get_calendar" says "get": a word for reading.
Description, as the server wrote it Fetch a single calendar by ID, including its name, timezone, agent status, and default reminders. Agent-scoped keys may only read calendars owned by their agent.
get_calendar_contextGet a calendar's temporal context in a single call: the current event (if one is happening now), the next upcoming event, recent past events, a short upcoming window, and the ownin…No findings
Why it is in this group
- The name "get_calendar_context" says "get": a word for reading.
Description, as the server wrote it Get a calendar's temporal context in a single call: the current event (if one is happening now), the next upcoming event, recent past events, a short upcoming window, and the owning agent's status (idle/working/waiting/error). Use this to answer "what is this agent doing right now?" without issuing multiple list_events queries.
get_connection_linkPoll a human-calendar setup request.No findings
Why it is in this group
- The name "get_connection_link" says "get": a word for reading.
Description, as the server wrote it Poll a human-calendar setup request. Returns provider-neutral status and resulting connection ID when complete, but never replays the bearer setup URL or exposes human calendar data.
get_eventRetrieve a single event by ID, including its title, times, status, location, reminders, and metadata.No findings
Why it is in this group
- The name "get_event" says "get": a word for reading.
Description, as the server wrote it Retrieve a single event by ID, including its title, times, status, location, reminders, and metadata. Works for both internally created events and externally synced iCal events. `calendar_id` is optional — if omitted the calendar is resolved from the event. Provide `calendar_id` to fail fast on cross-calendar typos.
get_ical_subscriptionGet a single external iCal feed subscription by id, including its sync status, last sync time, and last error.No findings
Why it is in this group
- The name "get_ical_subscription" says "get": a word for reading.
Description, as the server wrote it Get a single external iCal feed subscription by id, including its sync status, last sync time, and last error.
get_proposalGet a scheduling proposal by id, including its slots and per-participant responses.No findings
Why it is in this group
- The name "get_proposal" says "get": a word for reading.
Description, as the server wrote it Get a scheduling proposal by id, including its slots and per-participant responses. Requires an org-level API key.
get_usageGet the calling org's current-period usage and plan limits (agents, calendars, events, API calls, webhooks, availability queries, iCal subscriptions, proposals, scoped keys, holds,…No findings
Why it is in this group
- The name "get_usage" says "get": a word for reading.
Description, as the server wrote it Get the calling org's current-period usage and plan limits (agents, calendars, events, API calls, webhooks, availability queries, iCal subscriptions, proposals, scoped keys, holds, cross-calendar queries). Requires an org-level API key (chr_sk_*); agent-scoped keys cannot read org-wide usage.
get_webhookGet a single webhook subscription by id, including its subscribed event types and active state.No findings
Why it is in this group
- The name "get_webhook" says "get": a word for reading.
Description, as the server wrote it Get a single webhook subscription by id, including its subscribed event types and active state. The signing secret is never returned. Requires an org-level API key.
list_agentsList all agents in your organizationNo findings
Why it is in this group
- The name "list_agents" says "list": a word for reading.
Description, as the server wrote it List all agents in your organization
list_booking_pagesList booking pages in the org.No findings
Why it is in this group
- The name "list_booking_pages" says "list": a word for reading.
Description, as the server wrote it List booking pages in the org. Agent-scoped keys see only pages on their own agent's calendars.
list_calendarsList calendars in the org.No findings
Why it is in this group
- The name "list_calendars" says "list": a word for reading.
Description, as the server wrote it List calendars in the org. Org-level API keys see every calendar (agent-owned and shared); agent-scoped keys see only their own agent's calendars. Use this to discover calendar IDs before creating or listing events.
list_eventsList events on a calendar or across an agent's calendars, including internally created events and externally synced events from iCal subscriptions (e.g.No findings
Why it is in this group
- The name "list_events" says "list": a word for reading.
Description, as the server wrote it List events on a calendar or across an agent's calendars, including internally created events and externally synced events from iCal subscriptions (e.g. Google Calendar, Outlook). Provide `calendar_id` OR `agent_id`. Narrow with `start_after`/`start_before` (time window), `status`, and `source`.
list_ical_subscriptionsList an agent's external iCal feed subscriptions (e.g.No findings
Why it is in this group
- The name "list_ical_subscriptions" says "list": a word for reading.
Description, as the server wrote it List an agent's external iCal feed subscriptions (e.g. linked Google Calendar / Outlook feeds), including their sync status and last sync time.
list_proposalsList scheduling proposals for the org.No findings
Why it is in this group
- The name "list_proposals" says "list": a word for reading.
Description, as the server wrote it List scheduling proposals for the org. Filter by status (pending|confirmed|expired|cancelled) or organizer_agent_id. Requires an org-level API key.
list_scoped_keysList all live (non-revoked) agent-scoped API keys for this org.No findings
Why it is in this group
- The name "list_scoped_keys" says "list": a word for reading.
Description, as the server wrote it List all live (non-revoked) agent-scoped API keys for this org. Returns key metadata only (id, prefix, agent_id, label, created_at) — never the plaintext secret. Requires an org-level API key.
list_webhook_deliveriesList delivery attempts for a webhook subscription, with per-status counts (pending/delivered/failed).No findings
Why it is in this group
- The name "list_webhook_deliveries" says "list": a word for reading.
Description, as the server wrote it List delivery attempts for a webhook subscription, with per-status counts (pending/delivered/failed). Use this to debug failing deliveries. Requires an org-level API key.
list_webhooksList the org's webhook subscriptions with their subscribed event types and active state.No findings
Why it is in this group
- The name "list_webhooks" says "list": a word for reading.
Description, as the server wrote it List the org's webhook subscriptions with their subscribed event types and active state. Signing secrets are never returned. Requires an org-level API key.
resolve_proposalForce-resolve an open proposal using responses collected so far.No findings
Why it is in this group
- The name "resolve_proposal" says "resolve": a word for reading.
Description, as the server wrote it Force-resolve an open proposal using responses collected so far. Picks the highest-scoring slot among those accepted by the most participants and creates a confirmed calendar event. If every response was "decline", the proposal is cancelled instead. Use when you want to close out a proposal without waiting for every participant. Requires an org-level API key. Pro plan only.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.5.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http chronary https://api.chronary.ai/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__chronary__list_agents",
"mcp__chronary__list_events",
"mcp__chronary__get_event",
"mcp__chronary__get_availability",
"mcp__chronary__find_meeting_time",
"mcp__chronary__list_ical_subscriptions",
"mcp__chronary__get_ical_subscription",
"mcp__chronary__get_calendar_context",
"mcp__chronary__list_proposals",
"mcp__chronary__get_proposal",
"mcp__chronary__resolve_proposal",
"mcp__chronary__get_availability_rules",
"mcp__chronary__list_scoped_keys",
"mcp__chronary__list_webhooks",
"mcp__chronary__get_webhook",
"mcp__chronary__list_webhook_deliveries",
"mcp__chronary__get_agent",
"mcp__chronary__list_calendars",
"mcp__chronary__get_calendar",
"mcp__chronary__list_booking_pages",
"mcp__chronary__get_booking_page",
"mcp__chronary__get_usage",
"mcp__chronary__get_audit_log",
"mcp__chronary__get_connection_link"
],
"ask": [
"mcp__chronary__create_agent",
"mcp__chronary__create_calendar",
"mcp__chronary__create_event",
"mcp__chronary__update_event",
"mcp__chronary__confirm_event",
"mcp__chronary__release_event",
"mcp__chronary__subscribe_ical",
"mcp__chronary__update_ical_subscription",
"mcp__chronary__sync_ical_subscription",
"mcp__chronary__create_proposal",
"mcp__chronary__respond_to_proposal",
"mcp__chronary__set_availability_rules",
"mcp__chronary__create_scoped_key",
"mcp__chronary__create_webhook",
"mcp__chronary__update_webhook",
"mcp__chronary__update_agent",
"mcp__chronary__update_calendar",
"mcp__chronary__create_booking_page",
"mcp__chronary__accept_terms",
"mcp__chronary__create_connection_link"
],
"deny": [
"mcp__chronary__cancel_event",
"mcp__chronary__delete_ical_subscription",
"mcp__chronary__cancel_proposal",
"mcp__chronary__clear_availability_rules",
"mcp__chronary__revoke_scoped_key",
"mcp__chronary__delete_webhook",
"mcp__chronary__delete_agent",
"mcp__chronary__delete_calendar",
"mcp__chronary__delete_booking_page",
"mcp__chronary__cancel_connection_link"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as chronary. Review it before you use it.