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.

SchedulingOAuth 2.0MCP + RESTcal.com
AUDIT LOG · CALPOLICY: acme-support
09:41:07 · claude · u_8f2read
cal.list_attendees
List all attendees✓ allowed · 212ms
09:41:08 · claude · u_8f2read
cal.get_teams_list
Get teams list✓ allowed · 164ms
09:41:09 · claude · u_8f2write
cal.create_team_event_type
Create team event type✓ approved · approved by user
09:41:12 · claude · u_8f2destructive
cal.delete_team_by_id
Delete team by id✕ blocked · policy: deny
EVERY CAL CALL, ON THE RECORD
01 · USE CASES

What agents do in Cal.

01

Check availability before booking

Check a person's calendar availability before proposing a meeting time to an attendee.

02

Confirm a pending booking

Confirm a pending booking by its ID once both sides have agreed on the time.

03

Confirm before canceling a booking

Confirm before canceling a scheduled booking, since the attendee has to be notified once it's gone.

02 · ACTIONS

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

79

Look things up. Allowed by default.

  • cal.get_teams_list
    Get teams list
  • cal.list_attendees
    List all attendees
  • cal.list_event_types
    List event types
  • cal.get_all_timezones
    Get all timezones
  • cal.get_private_links
    Get private links for team event type
  • cal.get_team_bookings
    Get team bookings
  • cal.get_webhook_by_id
    Get webhook by id
  • cal.get_team_schedules
    Get team schedules
  • cal.get_organization_id
    Get organization ID
  • cal.get_booking_references
    Get booking references
  • cal.get_oauth_clients_user
    Get oauth clients user
  • cal.get_stripe_connect_url
    Get Stripe Connect URL for team
  • cal.get_team_routing_forms
    Get team routing forms
  • cal.get_stripe_connect_info
    Get stripe connect info
  • cal.list_booking_references
    List booking references
  • cal.get_available_slots_info
    Get available slots info
+ 63 MORE

write

70

Create and change things. Allow, or ask the user first.

  • cal.add_attendee
    Add attendee
  • cal.post_webhook_event
    Create webhook subscription
  • cal.update_private_link
    Update private link
  • cal.update_webhook_by_id
    Update webhook by id
  • cal.update_schedule_by_id
    Update schedule by ID
  • cal.create_team_event_type
    Create team event type
  • cal.update_team_event_type
    Update team event type
  • cal.create_phone_call_event
    Create phone call event
  • cal.create_team_invite_link
    Create team invite link
  • cal.post_selected_calendars
    Add selected calendar
  • cal.create_oauth_client_user
    Create oauth client user
  • cal.post_new_booking_request
    Create a new booking
  • cal.post_calendar_credentials
    Post calendar credentials
  • cal.post_user_to_organization
    Post user to organization
  • cal.create_team_in_organization
    Create team in organization
  • cal.update_oauth_client_webhook
    Update oauth client webhook
+ 54 MORE

destructive

26

Delete, cancel or archive. Ask first, or deny outright.

  • cal.delete_team_by_id
    Delete team by id
  • cal.delete_org_webhook
    Delete org webhook
  • cal.delete_selected_slot
    Delete selected slot
  • cal.delete_user_schedule
    Delete user schedule
  • cal.delete_webhook_by_id
    Delete webhook by id
  • cal.delete_schedule_by_id
    Delete schedule by id
  • cal.cancel_booking_via_uid
    Cancel booking via uid
  • cal.delete_event_type_by_id
    Delete event type by id
  • cal.delete_oauth_client_user
    Delete OAuth Client Managed User
  • cal.delete_event_type_in_team
    Delete event type in team
  • cal.delete_membership_in_team
    Delete membership in team
  • cal.delete_selected_calendars
    Delete selected calendars
  • cal.delete_oauth_client_webhook
    Delete oauth client webhook
  • cal.delete_user_attribute_option
    Delete user attribute option
  • cal.delete_organization_attribute
    Delete organization attribute
  • cal.delete_team_from_organization
    Delete team from organization
+ 10 MORE
03 · HOW IT WORKS

Cal in three steps.

  1. 01Your users connect CalThey sign in to Cal on Arc0 Connect, under your brand, and approve the access you ask for.
  2. 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.
  3. 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.
POLICY.TS
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
04 · AUTH AND DATA

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
05 · WORKS WITH

Use Cal from any agent.

Claude
ChatGPT
Cursor
Codex
VS Code
OpenAI Agents SDK
Claude Agent SDK
Vercel AI SDK
Mastra
LangGraph
07 · FAQ

Cal and Arc0, answered.

Q01

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.

Q02

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.

Q03

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.

Q04

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.

Q05

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.

Get started

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