Cal for AI agents
Cal.com is open-source scheduling software that gives people shareable booking pages, syncs their calendars, and coordinates meeting availability across a team. Connect it once through Arc0, and your agent, or Claude, ChatGPT and Cursor, can use it through one MCP endpoint, limited to what each user approved.
What agents do in Cal.
Check availability before booking
Check a person's calendar availability before proposing a meeting time to an attendee.
Confirm a pending booking
Confirm a pending booking by its ID once both sides have agreed on the time.
Confirm before canceling a booking
Confirm before canceling a scheduled booking, since the attendee has to be notified once it's gone.
175 Cal actions, graded by risk.
Every Cal action is tagged read, write or destructive, so one policy covers the whole app and new actions inherit the right default.
read
79Look things up. Allowed by default.
- cal.get_teams_listGet teams list
- cal.list_attendeesList all attendees
- cal.list_event_typesList event types
- cal.get_all_timezonesGet all timezones
- cal.get_private_linksGet private links for team event type
- cal.get_team_bookingsGet team bookings
- cal.get_webhook_by_idGet webhook by id
- cal.get_team_schedulesGet team schedules
- cal.get_organization_idGet organization ID
- cal.get_booking_referencesGet booking references
- cal.get_oauth_clients_userGet oauth clients user
- cal.get_stripe_connect_urlGet Stripe Connect URL for team
- cal.get_team_routing_formsGet team routing forms
- cal.get_stripe_connect_infoGet stripe connect info
- cal.list_booking_referencesList booking references
- cal.get_available_slots_infoGet available slots info
write
70Create and change things. Allow, or ask the user first.
- cal.add_attendeeAdd attendee
- cal.post_webhook_eventCreate webhook subscription
- cal.update_private_linkUpdate private link
- cal.update_webhook_by_idUpdate webhook by id
- cal.update_schedule_by_idUpdate schedule by ID
- cal.create_team_event_typeCreate team event type
- cal.update_team_event_typeUpdate team event type
- cal.create_phone_call_eventCreate phone call event
- cal.create_team_invite_linkCreate team invite link
- cal.post_selected_calendarsAdd selected calendar
- cal.create_oauth_client_userCreate oauth client user
- cal.post_new_booking_requestCreate a new booking
- cal.post_calendar_credentialsPost calendar credentials
- cal.post_user_to_organizationPost user to organization
- cal.create_team_in_organizationCreate team in organization
- cal.update_oauth_client_webhookUpdate oauth client webhook
destructive
26Delete, cancel or archive. Ask first, or deny outright.
- cal.delete_team_by_idDelete team by id
- cal.delete_org_webhookDelete org webhook
- cal.delete_selected_slotDelete selected slot
- cal.delete_user_scheduleDelete user schedule
- cal.delete_webhook_by_idDelete webhook by id
- cal.delete_schedule_by_idDelete schedule by id
- cal.cancel_booking_via_uidCancel booking via uid
- cal.delete_event_type_by_idDelete event type by id
- cal.delete_oauth_client_userDelete OAuth Client Managed User
- cal.delete_event_type_in_teamDelete event type in team
- cal.delete_membership_in_teamDelete membership in team
- cal.delete_selected_calendarsDelete selected calendars
- cal.delete_oauth_client_webhookDelete oauth client webhook
- cal.delete_user_attribute_optionDelete user attribute option
- cal.delete_organization_attributeDelete organization attribute
- cal.delete_team_from_organizationDelete team from organization
Cal in three steps.
- 01Your users connect CalThey sign in to Cal on Arc0 Connect, under your brand, and approve the access you ask for.
- 02You set the rulesReads run, writes like “create team event type” can wait for the user, and “delete team by id” can be denied outright.
- 03Any agent can actYour agent calls Cal through the Arc0 SDK or MCP, and so can Claude, ChatGPT and Cursor. Every call lands on the audit log.
await arc0.policies.set('cal', { read: 'allow', write: 'ask', // create_team_event_type destructive: 'deny', // delete_team_by_id }) # Claude Code: the same connection, one URL $ claude mcp add --transport http arc0 \ https://mcp.arc0.ai/u/u_8f2
How Cal connects.
Users sign in to Cal on Arc0 Connect and approve the scopes you request. Build with Arc0’s Cal OAuth app, or bring your own so the Cal consent screen names you. Tokens refresh automatically, and you can export them whenever you want.
The same Cal connection serves your agent over MCP and your own backend over REST and the proxy, so a user connects once. How Arc0 handles credentials →
- AUTH
- API key · OAuth 2.0
- CREDENTIALS
- Per-tenant encrypted vault
- MODEL SEES
- Results only, never credentials
- AUDIT LOG
- Every call, on every plan
Use Cal from any agent.
Cal and Arc0, answered.
Can I use Cal with Claude, ChatGPT or Cursor?
Yes. Connect Cal to Arc0 once, then add your Arc0 MCP URL to Claude, ChatGPT, Cursor, Claude Code or any other remote-MCP client. Each assistant only gets the Cal actions you allow.
How do users connect Cal?
Users sign in to Cal on Arc0 Connect and approve the scopes you request. Build with Arc0’s Cal OAuth app, or bring your own so the Cal consent screen names you. Tokens refresh automatically, and you can export them whenever you want.
Which Cal actions can my agent take?
175 in total: 79 read, 70 write and 26 destructive, such as “create team event type”. Your policies decide which of them each agent may call.
Can I stop my agent from deleting things in Cal?
Yes. Actions like “delete team by id” are graded destructive. Set destructive actions to deny, or to ask so the user approves each one, and blocked calls still show up on the audit log.
Can my own backend call Cal too?
Yes. The same Cal connection is available over REST and through the Arc0 proxy, so your product and your agent share one connection per user.
Plug Cal into your agent.
Your users connect Cal once, under your brand. Your agent gets 175 actions behind your policies, with every call on the record.
Free to build · MCP + REST · Audit log on every plan