{"serverId":"mcp-registry/ai.chronary/mcp","tools":[{"name":"cancel_connection_link","fixed":{"name":"cancel_connection_link","description":"Cancel a pending human-calendar setup request. This invalidates the setup URL and does not disconnect an already completed Google or Microsoft connection.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection_link_id"],"properties":{"connection_link_id":{"type":"string","format":"starts_with","pattern":"^csl_.*","description":"Connection setup link ID"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"cancel_event","fixed":{"name":"cancel_event","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["event_id"],"properties":{"event_id":{"type":"string","description":"Event ID to cancel"},"calendar_id":{"type":"string","description":"Calendar ID that owns the event. Optional — if omitted the calendar is resolved from the event. Matches the asymmetry with confirm_event / release_event which never required this arg."},"occurrence_start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"For recurring events only: ISO 8601 start of the single occurrence to cancel. The rest of the series is unaffected."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":394,"tokensAfter":394},{"name":"cancel_proposal","fixed":{"name":"cancel_proposal","description":"Cancel an open proposal. Fires a proposal.cancelled webhook with reason=\"organizer_cancelled\". Requires an org-level API key. Pro plan only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["proposal_id"],"properties":{"proposal_id":{"type":"string","description":"Proposal to cancel"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"create_agent","fixed":{"name":"create_agent","description":"Register your agent (AI assistant, human participant, or resource) with Chronary so it can own calendars, events, and webhooks.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name","type"],"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"description":"Display name for the agent"},"type":{"enum":["ai","human","resource"],"type":"string","description":"Agent type"},"description":{"type":"string","description":"Optional description"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":152,"tokensAfter":152},{"name":"create_booking_page","fixed":{"name":"create_booking_page","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id","title"],"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"description":"Meeting title shown on the page."},"active":{"type":"boolean","description":"Whether the page accepts bookings (default true)."},"timezone":{"type":"string","maxLength":64,"minLength":1,"description":"IANA timezone for display + working hours (default UTC)."},"calendar_id":{"type":"string","description":"Calendar a booking resolves to (from create_calendar/list_calendars)."},"description":{"type":"string","maxLength":2000,"description":"Optional description shown to the booker."},"window_days":{"type":"integer","maximum":365,"minimum":1,"description":"How far ahead bookings are allowed (default 14)."},"buffer_minutes":{"type":"integer","maximum":120,"minimum":0,"description":"Padding before/after existing events (default 0)."},"duration_minutes":{"type":"integer","maximum":480,"minimum":5,"description":"Slot length in minutes (default 30)."},"min_notice_minutes":{"type":"integer","maximum":40320,"minimum":0,"description":"Minimum lead time before a bookable slot (default 0)."},"availability_constraints":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string"},"start":{"type":"string"}}}},{"type":"null"}],"description":"Weekly working hours, e.g. {\"mon\":{\"start\":\"09:00\",\"end\":\"17:00\"}}. Omit/null for any time in the window."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":548,"tokensAfter":548},{"name":"create_calendar","fixed":{"name":"create_calendar","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name","timezone"],"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"description":"Calendar name"},"agent_id":{"type":"string","description":"Agent ID to own this calendar (omit for org-level)"},"timezone":{"type":"string","minLength":1,"description":"IANA timezone (e.g. America/New_York)"},"default_reminders":{"anyOf":[{"type":"array","items":{"type":"integer","maximum":40320,"minimum":1},"maxItems":5},{"type":"null"}],"description":"Default reminder offsets in minutes before start, inherited by events on this calendar that don't set their own. Omit or null to use the system default (10 min); [] for no reminders."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":302,"tokensAfter":302},{"name":"create_connection_link","fixed":{"name":"create_connection_link","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"calendar_id":{"type":"string","format":"starts_with","pattern":"^cal_.*","description":"Chronary calendar whose owning agent will receive authorized availability"},"capabilities":{"type":"array","items":{"enum":["availability","publishing"],"type":"string"},"default":["availability"],"maxItems":2,"minItems":1,"description":"Request opaque availability, plus optional opt-in event publishing permission"},"publication_policy":{"enum":["none","confirmed","confirmed_tentative"],"type":"string","default":"none","description":"Desired publishing policy; a human still chooses the destination"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":313,"tokensAfter":313},{"name":"create_event","fixed":{"name":"create_event","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id","title","start_time","end_time"],"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"description":"Event title"},"status":{"enum":["confirmed","tentative","hold"],"type":"string","description":"Event status. \"hold\" creates a tentative reservation that auto-expires at hold_expires_at. Defaults to \"confirmed\"."},"all_day":{"type":"boolean","default":false,"description":"Whether this is an all-day event"},"end_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"End time (ISO 8601)"},"reminders":{"anyOf":[{"type":"array","items":{"type":"integer","maximum":40320,"minimum":1},"maxItems":5},{"type":"null"}],"description":"Reminder offsets in minutes before start_time (e.g. [10, 1440]). Each fires an event.reminder webhook and shows as an alarm in the iCal feed. Omit or null to inherit the calendar default (then the system default of 10 min); [] for no reminders."},"start_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Start time (ISO 8601)"},"calendar_id":{"type":"string","description":"Calendar ID to add the event to"},"description":{"type":"string","description":"Optional event description"},"hold_priority":{"type":"integer","maximum":100,"minimum":0,"description":"Only valid with status=\"hold\". Higher-priority overlapping holds pre-empt lower-priority ones. Defaults to 0."},"hold_expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Required when status=\"hold\". ISO 8601 timestamp 30s-15min in the future. Auto-releases the hold when reached."},"recurrence_rule":{"type":"string","maxLength":256,"description":"Make this a recurring series (RFC 5545 RRULE subset, no \"RRULE:\" prefix), e.g. \"FREQ=WEEKLY;BYDAY=MO,WE;COUNT=12\". Supports FREQ=DAILY/WEEKLY/MONTHLY/YEARLY, INTERVAL, COUNT (max 730) or UNTIL, BYDAY (weekly list or monthly ordinal like 2TU/-1FR), BYMONTHDAY (1-28 or -1). start_time must match the rule pattern; expansion is UTC-only. Not allowed with status=\"hold\". Free plan: max 5 recurring events, series must end within 90 days."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":940,"tokensAfter":940},{"name":"create_proposal","fixed":{"name":"create_proposal","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["title","organizer_agent_id","participant_agent_ids","calendar_id","slots"],"properties":{"slots":{"type":"array","items":{"type":"object","required":["start_time","end_time"],"properties":{"weight":{"type":"number","default":1,"maximum":10,"minimum":0,"description":"Preference for this slot, 0–10 (higher = more preferred). Used to rank candidate slots when the proposal is resolved. Defaults to 1."},"end_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Slot end time (ISO 8601), after start_time"},"start_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Slot start time (ISO 8601)"},"calendar_id":{"type":"string","description":"Calendar to create the event on if this slot is chosen. Defaults to the proposal's top-level calendar_id."}}},"maxItems":20,"minItems":1,"description":"Candidate time slots (up to 20)"},"title":{"type":"string","maxLength":500,"minLength":1,"description":"Short description of what the meeting is about"},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Auto-cancel cutoff if unresolved"},"calendar_id":{"type":"string","description":"Calendar the resolved event will be created on"},"description":{"type":"string","maxLength":5000,"description":"Longer context/agenda"},"organizer_agent_id":{"type":"string","description":"Agent ID proposing the meeting"},"participant_agent_ids":{"type":"array","items":{"type":"string"},"maxItems":50,"minItems":1,"description":"Agent IDs invited to respond"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":780,"tokensAfter":780},{"name":"create_scoped_key","fixed":{"name":"create_scoped_key","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"label":{"type":"string","maxLength":100,"minLength":1,"description":"Human-readable label for the key"},"agent_id":{"type":"string","pattern":"^agt_","description":"Agent ID this key is scoped to"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":184,"tokensAfter":184},{"name":"create_webhook","fixed":{"name":"create_webhook","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["url","events"],"properties":{"url":{"type":"string","format":"uri","description":"HTTPS endpoint that will receive event deliveries"},"events":{"type":"array","items":{"enum":["agent.created","agent.updated","event.created","event.updated","event.deleted","event.started","event.ended","event.reminder","event.hold_created","event.hold_expired","event.hold_released","event.hold_confirmed","proposal.created","proposal.responded","proposal.confirmed","proposal.expired","proposal.cancelled","webhook.deactivated"],"type":"string"},"minItems":1,"description":"Event types to subscribe to"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":283,"tokensAfter":283},{"name":"delete_agent","fixed":{"name":"delete_agent","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"agent_id":{"type":"string","description":"Agent ID to decommission"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":113,"tokensAfter":113},{"name":"delete_booking_page","fixed":{"name":"delete_booking_page","description":"Delete (deactivate) a booking page. Its hosted URL stops resolving; already-booked events are unaffected.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["booking_page_id"],"properties":{"booking_page_id":{"type":"string","description":"Booking page ID to delete (bkp_...)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"delete_calendar","fixed":{"name":"delete_calendar","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"calendar_id":{"type":"string","description":"Calendar ID to delete"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"delete_ical_subscription","fixed":{"name":"delete_ical_subscription","description":"Delete an external iCal feed subscription. Events previously synced from the feed are no longer refreshed.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["subscription_id"],"properties":{"subscription_id":{"type":"string","description":"iCal subscription ID to delete"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"delete_webhook","fixed":{"name":"delete_webhook","description":"Permanently delete a webhook subscription. This frees its endpoint slot against the per-plan cap. Requires an org-level API key.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["webhook_id"],"properties":{"webhook_id":{"type":"string","description":"Webhook subscription to delete"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"find_meeting_time","fixed":{"name":"find_meeting_time","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Search range end (ISO 8601). Alias: end_time."},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Search range start (ISO 8601). Alias: start_time."},"agents":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Array of agent IDs to find common free time for. All agents must be free during the returned slots. Alias: agent_ids."},"duration":{"enum":["15m","30m","45m","1h","2h"],"type":"string","description":"Requested slot length (15m/30m/45m/1h/2h). Preferred over the deprecated slot_duration. Defaults to 30m."},"end_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Alias for `end` (matches REST events naming)."},"agent_ids":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Alias for `agents` (matches REST/scheduling-proposal naming)."},"calendars":{"type":"array","items":{"type":"string"},"description":"Additional shared calendar IDs to treat as busy"},"start_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Alias for `start` (matches REST events naming)."},"include_busy":{"type":"boolean","default":false,"description":"Include per-agent busy blocks in response"},"slot_duration":{"enum":["15m","30m","45m","1h","2h"],"type":"string","description":"Deprecated alias for `duration` — minimum slot length. Prefer `duration`."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":809,"tokensAfter":809},{"name":"get_agent","fixed":{"name":"get_agent","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"agent_id":{"type":"string","description":"Agent ID to fetch"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":109,"tokensAfter":109},{"name":"get_audit_log","fixed":{"name":"get_audit_log","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"End of the window (ISO 8601)"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Start of the window (ISO 8601). Silently clamped to the plan retention window if older."},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max results to return (default 50)"},"action":{"type":"string","maxLength":64,"minLength":1,"description":"Filter by action name (e.g. event.created)"},"cursor":{"type":"string","maxLength":256,"minLength":1,"description":"Opaque pagination cursor from a previous response"},"actor_key_prefix":{"type":"string","maxLength":32,"minLength":1,"description":"Filter by the API key prefix that performed the action"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":486,"tokensAfter":486},{"name":"get_availability","fixed":{"name":"get_availability","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Range end (ISO 8601). Alias: end_time."},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Range start (ISO 8601). Alias: start_time."},"agent_id":{"type":"string","description":"Agent ID to check availability for"},"duration":{"enum":["15m","30m","45m","1h","2h"],"type":"string","description":"Requested slot length (15m/30m/45m/1h/2h). Preferred over the deprecated slot_duration. Defaults to 30m."},"end_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Alias for `end` (matches REST events naming)."},"start_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Alias for `start` (matches REST events naming)."},"include_busy":{"type":"boolean","default":false,"description":"Include busy blocks in response"},"slot_duration":{"enum":["15m","30m","45m","1h","2h"],"type":"string","description":"Deprecated alias for `duration` — minimum slot length. Prefer `duration`."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":705,"tokensAfter":705},{"name":"get_availability_rules","fixed":{"name":"get_availability_rules","description":"Read the buffer times and working-hours rules configured on a calendar. Returns the rules row, or an error if none are set.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"calendar_id":{"type":"string","description":"Calendar to read"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"get_booking_page","fixed":{"name":"get_booking_page","description":"Fetch a single booking page by ID, including its public booking_url and settings.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["booking_page_id"],"properties":{"booking_page_id":{"type":"string","description":"Booking page ID to fetch (bkp_...)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"get_calendar","fixed":{"name":"get_calendar","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"calendar_id":{"type":"string","description":"Calendar ID to fetch"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":110,"tokensAfter":110},{"name":"get_calendar_context","fixed":{"name":"get_calendar_context","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"calendar_id":{"type":"string","description":"Calendar ID"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"get_connection_link","fixed":{"name":"get_connection_link","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection_link_id"],"properties":{"connection_link_id":{"type":"string","format":"starts_with","pattern":"^csl_.*","description":"Connection setup link ID"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"get_event","fixed":{"name":"get_event","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["event_id"],"properties":{"event_id":{"type":"string","description":"Event ID to retrieve"},"calendar_id":{"type":"string","description":"Calendar ID that owns the event. Optional — if omitted the calendar is resolved from the event."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":191,"tokensAfter":191},{"name":"get_ical_subscription","fixed":{"name":"get_ical_subscription","description":"Get a single external iCal feed subscription by id, including its sync status, last sync time, and last error.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["subscription_id"],"properties":{"subscription_id":{"type":"string","description":"iCal subscription ID to fetch"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"get_proposal","fixed":{"name":"get_proposal","description":"Get a scheduling proposal by id, including its slots and per-participant responses. Requires an org-level API key.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["proposal_id"],"properties":{"proposal_id":{"type":"string","description":"Proposal to fetch"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"get_usage","fixed":{"name":"get_usage","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"get_webhook","fixed":{"name":"get_webhook","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["webhook_id"],"properties":{"webhook_id":{"type":"string","description":"Webhook subscription to fetch"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":113,"tokensAfter":113},{"name":"list_agents","fixed":{"name":"list_agents","description":"List all agents in your organization","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"type":{"enum":["ai","human","resource"],"type":"string","description":"Filter by agent type"},"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Max results to return"},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"},"status":{"enum":["active","paused","decommissioned"],"type":"string","description":"Filter by status"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"list_booking_pages","fixed":{"name":"list_booking_pages","description":"List booking pages in the org. Agent-scoped keys see only pages on their own agent's calendars.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Max results to return"},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"list_calendars","fixed":{"name":"list_calendars","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Max results to return"},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"},"include":{"enum":["all"],"type":"string","description":"Pass \"all\" to include calendars across all agents (org keys only)"},"agent_id":{"type":"string","description":"Filter to calendars owned by this agent. Org keys only — agent-scoped keys are always limited to their own agent and ignore this."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"list_events","fixed":{"name":"list_events","description":"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`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Max results to return"},"expand":{"type":"boolean","default":false,"description":"Expand recurring series into individual occurrence instances within the window. Requires both start_after and start_before (max 366 days apart). Instances carry recurringEventId + originalStartTime."},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"},"source":{"enum":["internal","external_ical"],"type":"string","description":"Filter by source: \"internal\" (created via the API) or \"external_ical\" (synced from an iCal subscription)"},"status":{"enum":["confirmed","tentative","cancelled","hold"],"type":"string","description":"Filter by event status"},"agent_id":{"type":"string","description":"Agent ID to list events for across all of the agent's calendars. Provide this or calendar_id."},"calendar_id":{"type":"string","description":"Calendar ID to list events from. Provide this or agent_id."},"start_after":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Only events starting after this ISO 8601 time"},"start_before":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Only events starting before this ISO 8601 time"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":629,"tokensAfter":629},{"name":"list_ical_subscriptions","fixed":{"name":"list_ical_subscriptions","description":"List an agent's external iCal feed subscriptions (e.g. linked Google Calendar / Outlook feeds), including their sync status and last sync time.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"limit":{"type":"integer","default":50,"maximum":200,"minimum":1,"description":"Max results to return"},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"},"status":{"enum":["active","error","paused"],"type":"string","description":"Filter by subscription status"},"agent_id":{"type":"string","description":"Agent ID whose iCal subscriptions to list"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":203,"tokensAfter":203},{"name":"list_proposals","fixed":{"name":"list_proposals","description":"List scheduling proposals for the org. Filter by status (pending|confirmed|expired|cancelled) or organizer_agent_id. Requires an org-level API key.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Max results (default 50)"},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Pagination offset (default 0)"},"status":{"enum":["pending","confirmed","expired","cancelled"],"type":"string","description":"Filter by proposal status"},"organizer_agent_id":{"type":"string","description":"Filter by organizer agent"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"list_scoped_keys","fixed":{"name":"list_scoped_keys","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"list_webhook_deliveries","fixed":{"name":"list_webhook_deliveries","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["webhook_id"],"properties":{"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"Max results to return"},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"},"status":{"enum":["pending","delivered","failed"],"type":"string","description":"Filter to a single delivery status"},"webhook_id":{"type":"string","description":"Webhook subscription whose deliveries to list"},"include_payload":{"type":"boolean","description":"Include the full event payload sent on each delivery"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":245,"tokensAfter":245},{"name":"list_webhooks","fixed":{"name":"list_webhooks","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"Max results to return"},"offset":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Pagination offset"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":143,"tokensAfter":143},{"name":"resolve_proposal","fixed":{"name":"resolve_proposal","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["proposal_id"],"properties":{"proposal_id":{"type":"string","description":"Proposal to resolve"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":172,"tokensAfter":172},{"name":"revoke_scoped_key","fixed":{"name":"revoke_scoped_key","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["key_id"],"properties":{"key_id":{"type":"string","description":"ID of the scoped key to revoke"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"set_availability_rules","fixed":{"name":"set_availability_rules","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"timezone":{"type":"string","default":"UTC","maxLength":64,"minLength":1,"description":"IANA timezone used to interpret working_hours (e.g. America/New_York)"},"calendar_id":{"type":"string","description":"Calendar to configure"},"working_hours":{"anyOf":[{"type":"object","properties":{"fri":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"},"mon":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"},"sat":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"},"sun":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"},"thu":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"},"tue":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"},"wed":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"End of the working window, HH:MM 24-hour, after start (e.g. \"17:00\")"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Start of the working window, HH:MM 24-hour, in the rules timezone (e.g. \"09:00\")"}},"description":"A single day's working hours window"}}},{"type":"null"}],"default":null,"description":"Per-day working hours map in the calendar's timezone; omit keys for off-days. Pass null to remove any working-hours constraint."},"buffer_after_minutes":{"type":"integer","default":0,"maximum":120,"minimum":0,"description":"Minutes of buffer after each event (0–120)"},"buffer_before_minutes":{"type":"integer","default":0,"maximum":120,"minimum":0,"description":"Minutes of buffer before each event (0–120)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":1190,"tokensAfter":1190},{"name":"update_agent","fixed":{"name":"update_agent","description":"Update an agent's name, description, metadata, or status (active/paused). Requires an org-level API key — agent-scoped keys cannot mutate agents.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"description":"New display name"},"status":{"enum":["active","paused"],"type":"string","description":"Operational status"},"agent_id":{"type":"string","description":"Agent ID to update"},"metadata":{"type":"object","description":"Arbitrary metadata (max 16KB)","propertyNames":{"type":"string"},"additionalProperties":{}},"description":{"type":["string","null"],"description":"New description (null to clear)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"update_calendar","fixed":{"name":"update_calendar","description":"Update a calendar's name, timezone, agent status, default reminders, or metadata. Agent-scoped keys may only update calendars owned by their agent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["calendar_id"],"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"description":"New calendar name"},"metadata":{"type":"object","description":"Arbitrary metadata (max 16KB)","propertyNames":{"type":"string"},"additionalProperties":{}},"timezone":{"type":"string","minLength":1,"description":"New IANA timezone (e.g. America/New_York)"},"calendar_id":{"type":"string","description":"Calendar ID to update"},"agent_status":{"enum":["idle","working","waiting","error"],"type":"string","description":"Owning agent's status"},"default_reminders":{"anyOf":[{"type":"array","items":{"type":"integer","maximum":40320,"minimum":1},"maxItems":5},{"type":"null"}],"description":"Default reminder offsets in minutes; null for system default, [] for none"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":292,"tokensAfter":292},{"name":"update_event","fixed":{"name":"update_event","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["event_id"],"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"description":"New event title"},"status":{"enum":["confirmed","tentative","cancelled"],"type":"string","description":"New event status"},"all_day":{"type":"boolean","description":"Whether this is an all-day event"},"end_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"New end time (ISO 8601)"},"event_id":{"type":"string","description":"Event ID to update"},"metadata":{"type":"object","description":"Replacement metadata object","propertyNames":{"type":"string"},"additionalProperties":{}},"reminders":{"anyOf":[{"type":"array","items":{"type":"integer","maximum":40320,"minimum":1},"maxItems":5},{"type":"null"}],"description":"Reminder offsets in minutes before start_time. Omit to leave unchanged, null to inherit the calendar default, [] for no reminders."},"start_time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"New start time (ISO 8601)"},"calendar_id":{"type":"string","description":"Calendar ID that owns the event. Optional — if omitted the calendar is resolved from the event."},"description":{"type":["string","null"],"description":"New description, or null to clear it"},"recurrence_rule":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"description":"Set/change the recurring series rule (RFC 5545 RRULE subset, full-series semantics), or null to make the event a one-off. Changing the rule or start_time resets cancelled occurrences."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":719,"tokensAfter":719},{"name":"update_ical_subscription","fixed":{"name":"update_ical_subscription","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["subscription_id"],"properties":{"url":{"type":"string","format":"starts_with","pattern":"^https:\\/\\/.*","description":"New HTTPS URL of the iCal feed (.ics)"},"label":{"type":"string","maxLength":255,"minLength":1,"description":"New label for this subscription"},"subscription_id":{"type":"string","description":"iCal subscription ID to update"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":176,"tokensAfter":176},{"name":"update_webhook","fixed":{"name":"update_webhook","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["webhook_id"],"properties":{"url":{"type":"string","format":"uri","description":"New HTTPS delivery endpoint"},"active":{"type":"boolean","description":"Set false to pause deliveries, true to resume"},"events":{"type":"array","items":{"enum":["agent.created","agent.updated","event.created","event.updated","event.deleted","event.started","event.ended","event.reminder","event.hold_created","event.hold_expired","event.hold_released","event.hold_confirmed","proposal.created","proposal.responded","proposal.confirmed","proposal.expired","proposal.cancelled","webhook.deactivated"],"type":"string"},"minItems":1,"description":"Replacement set of event types to subscribe to"},"webhook_id":{"type":"string","description":"Webhook subscription to update"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":301,"tokensAfter":301}],"toolsChanged":47,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}