Chronary

ai.chronary由 chronary.ai 發布官方發布者v1.5.2更新於 Oct 24, 2026

Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.

已驗證Streamable HTTP可網頁執行效率與工作流溝通與協作

概覽

AI 產生的概覽

Chronary 是為 AI 代理打造的日曆 API,讓助理管理代理、日曆、事件、可用時段與排程提案。

可以做什麼
建立與管理代理、日曆及其可用性規則,包含緩衝時間與工作時段。建立、讀取、更新、取消、暫留、確認與釋放事件,並查詢單一或多個代理的空閒時間以尋找會議時段。執行排程提案:向參與者送出候選時段,收集接受、拒絕或反提案,並解析或取消提案。連結 Google 日曆、Outlook 等外部 iCal 訂閱,並觸發或查看同步狀態。管理代理範圍的 API 金鑰、Webhook 訂閱及其投遞紀錄,並讀取稽核日誌與用量。
適用情境
當助理需要預訂、改期或取消約會,回答某個代理目前在做什麼,或在多個代理與人工日曆之間協調會議時使用。適合需要可用性檢查與提案協商的代理排程流程。
執行需求
需要 Chronary 帳號與 API 金鑰(組織層級或代理範圍),透過 CHRONARY_API_KEY 環境變數或 Authorization bearer 標頭提供。本機套件以 npx 執行,需要 Node.js 18 以上版本;也可使用 api.chronary.ai 遠端端點。部分提案及金鑰、Webhook 工具需要組織層級金鑰。
安裝前請注意
API 金鑰是寫入用戶端設定的機密;代理範圍金鑰只能代表單一代理,組織層級金鑰可建立、撤銷與刪除金鑰、代理與 Webhook。許多工具會寫入、取消或永久刪除資料,包括事件、日曆、代理、Webhook 訂閱與範圍金鑰;撤銷與刪除無法復原。建立範圍金鑰或 Webhook 時,明文金鑰或簽章金鑰只會回傳一次。連結的 iCal 訂閱會把外部日曆資料納入可用性計算。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Chronary,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/ai.chronary%2Fmcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "chronary": {
      "type": "http",
      "url": "https://api.chronary.ai/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

@chronary/mcp

[Smithery]

MCP server for Chronary — calendar tools for AI assistants.

Drops 50 calendar tools (manage agents, calendars, and events, request human Google/Microsoft setup, find meeting times, run scheduling proposals, configure availability rules, manage webhooks, iCal subscriptions, scoped keys, audit log, and usage) into any MCP-compatible client: Claude Desktop, Cursor, VS Code Copilot, Claude Code, Windsurf.

One-click install via Smithery: npx -y @smithery/cli mcp add chronary/agent-calendar --client claude (swap --client for cursor, vscode, claude-code, windsurf, …).

Prerequisites

  1. A Chronary account — sign up at chronary.ai.
  2. An API key from the console (starts with chr_sk_).
  3. Node.js ≥ 18 on the machine where the MCP client runs.

Client configurations

All examples use npx -y @chronary/mcp, which downloads and runs the latest version on demand. No install step required.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

macOS / Linux:

json
{  "mcpServers": {    "chronary": {      "command": "npx",      "args": ["-y", "@chronary/mcp"],      "env": {        "CHRONARY_API_KEY": "chr_sk_..."      }    }  }}

Windows (uses cmd /c because spawn can't resolve npx.cmd directly):

json
{  "mcpServers": {    "chronary": {      "command": "cmd",      "args": ["/c", "npx", "-y", "@chronary/mcp"],      "env": {        "CHRONARY_API_KEY": "chr_sk_..."      }    }  }}

Restart Claude Desktop after saving.

Cursor

Edit .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (user-level):

macOS / Linux:

json
{  "mcpServers": {    "chronary": {      "command": "npx",      "args": ["-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Windows:

json
{  "mcpServers": {    "chronary": {      "command": "cmd",      "args": ["/c", "npx", "-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

VS Code Copilot

Edit .vscode/mcp.json (workspace) or run the MCP: Open User Configuration command for a user-level config. VS Code uses a different top-level key (servers) and requires an explicit type:

macOS / Linux:

json
{  "servers": {    "chronary": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Windows:

json
{  "servers": {    "chronary": {      "type": "stdio",      "command": "cmd",      "args": ["/c", "npx", "-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Claude Code

Edit .mcp.json at the project root, or ~/.claude.json for user-level:

macOS / Linux:

json
{  "mcpServers": {    "chronary": {      "command": "npx",      "args": ["-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Windows:

json
{  "mcpServers": {    "chronary": {      "command": "cmd",      "args": ["/c", "npx", "-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json (%USERPROFILE%\.codeium\windsurf\mcp_config.json on Windows):

macOS / Linux:

json
{  "mcpServers": {    "chronary": {      "command": "npx",      "args": ["-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Windows:

json
{  "mcpServers": {    "chronary": {      "command": "cmd",      "args": ["/c", "npx", "-y", "@chronary/mcp"],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Windsurf limit: Cascade enforces a hard cap of 100 total tools across all MCP servers and 20 tool calls per prompt. Chronary exposes 50; consider --tools filtering if you stack multiple servers.

Reducing context with --tools

Exposing all 50 tools uses LLM tokens on every request. For focused workflows, whitelist only what you need:

json
{  "mcpServers": {    "chronary": {      "command": "npx",      "args": [        "-y", "@chronary/mcp",        "--tools", "list_events,find_meeting_time,create_event"      ],      "env": { "CHRONARY_API_KEY": "chr_sk_..." }    }  }}

Pointing at a non-production API

For self-hosted Chronary instances or development against a local API:

json
{  "args": ["-y", "@chronary/mcp", "--base-url", "http://localhost:8787"]}

Tools exposed

ToolRead-onlyDestructive
list_calendars, get_calendar✓
create_calendar, update_calendar
delete_calendar✓
list_events, get_event✓
create_event, update_event, confirm_event
cancel_event, release_event✓
list_agents, get_agent✓
create_agent, update_agent
delete_agent✓
get_availability, find_meeting_time✓
get_calendar_context✓
list_proposals, get_proposal✓
create_proposal, respond_to_proposal, resolve_proposal
cancel_proposal✓
get_availability_rules✓
set_availability_rules
clear_availability_rules✓
list_webhooks, get_webhook, list_webhook_deliveries✓
create_webhook, update_webhook
delete_webhook✓
list_ical_subscriptions, get_ical_subscription✓
subscribe_ical, update_ical_subscription, sync_ical_subscription
delete_ical_subscription✓
list_scoped_keys✓
create_scoped_key
revoke_scoped_key✓
get_audit_log✓
accept_terms
get_usage✓

Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are surfaced to MCP clients so hosts can decide whether to require user confirmation.

Troubleshooting

"spawn npx ENOENT" on Windows — use the cmd /c npx ... form shown above.

"CHRONARY_API_KEY is required" — the env block must be nested under the server entry, not at the top of the config file.

Tools aren't showing up — restart the MCP client after editing the config. Most clients only read the config on startup.

Verify the binary runs locally:

sh
CHRONARY_API_KEY=test npx -y @chronary/mcp --help

Links

License

Apache-2.0

來源:README.md,提交 8ac0cff

工具

54

create_agent

Register your agent (AI assistant, human participant, or resource) with Chronary so it can own calendars, events, and webhooks.

輸入參數name必填type必填description

list_agents

List all agents in your organization

輸入參數typelimitoffsetstatus

create_calendar

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.

輸入參數name必填agent_idtimezone必填default_reminders

create_event

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.

輸入參數title必填statusall_dayend_time必填remindersstart_time必填calendar_id必填descriptionhold_priorityhold_expires_atrecurrence_rule

list_events

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`.

輸入參數limitexpandoffsetsourcestatusagent_idcalendar_idstart_afterstart_before

get_event

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.

輸入參數event_id必填calendar_id

update_event

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.

輸入參數titlestatusall_dayend_timeevent_id必填metadataremindersstart_timecalendar_iddescriptionrecurrence_rule

get_availability

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.

輸入參數endstartagent_id必填durationend_timestart_timeinclude_busyslot_duration

find_meeting_time

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.

輸入參數endstartagentsdurationend_timeagent_idscalendarsstart_timeinclude_busyslot_duration

cancel_event

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.

輸入參數event_id必填calendar_idoccurrence_start

confirm_event

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.

輸入參數event_id必填

release_event

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.

輸入參數event_id必填

subscribe_ical

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).

輸入參數url必填labelagent_id必填calendar_id必填

list_ical_subscriptions

List an agent's external iCal feed subscriptions (e.g. linked Google Calendar / Outlook feeds), including their sync status and last sync time.

輸入參數limitoffsetstatusagent_id必填

get_ical_subscription

Get a single external iCal feed subscription by id, including its sync status, last sync time, and last error.

輸入參數subscription_id必填

update_ical_subscription

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.

輸入參數urllabelsubscription_id必填

delete_ical_subscription

Delete an external iCal feed subscription. Events previously synced from the feed are no longer refreshed.

輸入參數subscription_id必填

sync_ical_subscription

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.

輸入參數subscription_id必填

get_calendar_context

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.

輸入參數calendar_id必填

create_proposal

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.

輸入參數slots必填title必填expires_atcalendar_id必填descriptionorganizer_agent_id必填participant_agent_ids必填

list_proposals

List scheduling proposals for the org. Filter by status (pending|confirmed|expired|cancelled) or organizer_agent_id. Requires an org-level API key.

輸入參數limitoffsetstatusorganizer_agent_id

get_proposal

Get a scheduling proposal by id, including its slots and per-participant responses. Requires an org-level API key.

輸入參數proposal_id必填

respond_to_proposal

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.

輸入參數messageagent_id必填response必填proposal_id必填counter_slotsselected_slot_id

resolve_proposal

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.

輸入參數proposal_id必填

cancel_proposal

Cancel an open proposal. Fires a proposal.cancelled webhook with reason="organizer_cancelled". Requires an org-level API key. Pro plan only.

輸入參數proposal_id必填

set_availability_rules

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.

輸入參數timezonecalendar_id必填working_hoursbuffer_after_minutesbuffer_before_minutes

get_availability_rules

Read the buffer times and working-hours rules configured on a calendar. Returns the rules row, or an error if none are set.

輸入參數calendar_id必填

clear_availability_rules

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.

輸入參數calendar_id必填

create_scoped_key

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.

輸入參數labelagent_id必填

list_scoped_keys

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.

無需輸入參數。

revoke_scoped_key

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.

輸入參數key_id必填

create_webhook

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.

輸入參數url必填events必填

list_webhooks

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.

輸入參數limitoffset

get_webhook

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.

輸入參數webhook_id必填

update_webhook

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.

輸入參數urlactiveeventswebhook_id必填

delete_webhook

Permanently delete a webhook subscription. This frees its endpoint slot against the per-plan cap. Requires an org-level API key.

輸入參數webhook_id必填

list_webhook_deliveries

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.

輸入參數limitoffsetstatuswebhook_id必填include_payload

get_agent

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.

輸入參數agent_id必填

update_agent

Update an agent's name, description, metadata, or status (active/paused). Requires an org-level API key — agent-scoped keys cannot mutate agents.

輸入參數namestatusagent_id必填metadatadescription

delete_agent

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.

輸入參數agent_id必填

list_calendars

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.

輸入參數limitoffsetincludeagent_id

get_calendar

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.

輸入參數calendar_id必填

update_calendar

Update a calendar's name, timezone, agent status, default reminders, or metadata. Agent-scoped keys may only update calendars owned by their agent.

輸入參數namemetadatatimezonecalendar_id必填agent_statusdefault_reminders

delete_calendar

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.

輸入參數calendar_id必填

create_booking_page

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.

輸入參數title必填activetimezonecalendar_id必填descriptionwindow_daysbuffer_minutesduration_minutesmin_notice_minutesavailability_constraints

list_booking_pages

List booking pages in the org. Agent-scoped keys see only pages on their own agent's calendars.

輸入參數limitoffset

get_booking_page

Fetch a single booking page by ID, including its public booking_url and settings.

輸入參數booking_page_id必填

delete_booking_page

Delete (deactivate) a booking page. Its hosted URL stops resolving; already-booked events are unaffected.

輸入參數booking_page_id必填

get_usage

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_audit_log

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.

輸入參數tofromlimitactioncursoractor_key_prefix

accept_terms

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.

輸入參數tos_version必填

版本歷史

1
  1. v1.5.2最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分