{
 "slug": "calendly",
 "name": "Calendly",
 "url": "https://calendly.com",
 "domain": "calendly.com",
 "category": "scheduling",
 "category_name": "Scheduling",
 "tested_at": "2026-10-06",
 "run": "20261006T062009Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T193551Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "drives": 2
  },
  {
   "run": "20261006T062009Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 3,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 90,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 90,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 3,
 "drives": 3,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "reCAPTCHA v2 checkbox",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request and skip reCAPTCHA (or lower the score threshold) for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developer.calendly.com/llms.txt, Markdown pages (.md and Accept: text/markdown), OpenAPI 3.1.0 YAML with 65 operations, api-catalog linkset, and a docs-search MCP server, all fetched headless."
  },
  "signup": {
   "status": "human",
   "note": "Web form only (email, name, 12+ character password, terms). Submitting it shows a visible reCAPTCHA v2 'I'm not a robot' checkbox."
  },
  "verify": {
   "status": "",
   "note": "Not reached: the sign-up stopped at the reCAPTCHA before any verification mail was due.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Personal access tokens are made in the web app after login; OAuth and the MCP server use DCR plus a browser consent page for a signed-in user. No device flow, no CIMD, no agent registration. All need an account.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "No credentials: api.calendly.com and mcp.calendly.com answer 401.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No credentials.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "web billing page in the account"
   ],
   "rail_ids": [
    "other"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402 anywhere, no x402/MPP/UCP, no Bazaar or mpp.dev listing, no billing API. The pricing FAQ says upgrades happen on the billing page in the account; the checkout itself was not seen because creating the account needs a human (reCAPTCHA). Free plan plus a 14-day Teams trial without a card.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "No plan was started. Help centre: cancel by switching to Free on the billing page (web UI); no billing API.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created. The API has no account delete operation; only Enterprise data-compliance deletion of invitee and event data.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": false,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v2, 65 operations; free users cannot call POST /invitees (Standard and above)",
  "openapi": "3.1.0 YAML at /openapi/calendly-api.yaml; /openapi.json is HTML",
  "mcp": "official hosted, OAuth with DCR; docs-search MCP separate"
 },
 "can_do": [
  "Read the full API docs, OpenAPI and MCP setup guide without an account",
  "Search the developer docs through the docs MCP server"
 ],
 "cannot_do": [
  {
   "what": "Create a Calendly account",
   "why": "Visible reCAPTCHA v2 after the sign-up form"
  },
  {
   "what": "Get an API token or connect the MCP server",
   "why": "Every credential route needs a signed-in account"
  },
  {
   "what": "Any scheduling action (event types, bookings, availability, cancellations)",
   "why": "No credentials"
  }
 ],
 "blockers": [
  "reCAPTCHA v2 checkbox on the sign-up form"
 ],
 "tips_for_owner": [
  "Let verified agents sign up without reCAPTCHA",
  "Offer a headless token path for new accounts",
  "Support MCP (the 28 Jul 2026 spec) server/discover",
  "Add a billing API or agent payment rail"
 ],
 "tips_for_agents": [
  "Use the MCP server at https://mcp.calendly.com once a human has an account: OAuth with DCR needs an https redirect URI (http loopback is refused).",
  "Docs: append .md to any developer.calendly.com page; OpenAPI YAML at /openapi/calendly-api.yaml (the .json URL serves HTML).",
  "Booking through the API (POST /invitees) needs a Standard plan or above; free accounts get the booking page only."
 ],
 "selfhost": null,
 "summary": "Calendly documents its API well for agents (llms.txt, Markdown pages, OpenAPI 3.1, hosted MCP with OAuth and DCR), but creating an account stops at a visible reCAPTCHA v2 after the sign-up form. So no credentials and no scheduling action could be tested.",
 "wall": "reCAPTCHA on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Calendly is a meeting-scheduling tool with a well-documented API and an MCP server for AI agents. An agent could read all the documentation and setup guides on its own, but got stuck trying to create an account because the sign-up form shows a human verification checkbox (reCAPTCHA) that only a person can solve. So nothing beyond reading documentation could be tested.",
  "can_do": [
   "Read all of Calendly's developer documentation, including setup guides for its API and its AI-agent connector, without needing an account."
  ],
  "cannot_do": [
   {
    "what": "Create a Calendly account",
    "why": "A human verification checkbox appears after the sign-up form."
   },
   {
    "what": "Get an API key or connect the AI-agent tool",
    "why": "Every way to get credentials requires a logged-in account first."
   },
   {
    "what": "Book, manage, or cancel meetings; set availability; collect payment",
    "why": "All of these require an account, which could not be created."
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Scheduling",
   "capability": "Create an event type (meeting template)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /event_types",
    "mcp": "event_types-create_event_type",
    "cli": null,
    "ui": "Event Types > New Event Type"
   },
   "check": "GET /event_types/{uuid} returns the new event type with matching name/duration",
   "source": "https://developer.calendly.com/api-docs/calendly-api/event-types/create-event-type.md; https://calendly.com/scheduling"
  },
  {
   "id": "cap-02",
   "group": "Scheduling",
   "capability": "Share a booking link and let an invitee book a time",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /invitees (Scheduling API, paid plan required)",
    "mcp": "meetings-create_invitee",
    "cli": null,
    "ui": "Booking page at calendly.com/{user}/{event}"
   },
   "check": "GET /scheduled_events/{uuid} shows a new scheduled event with the invitee attached",
   "source": "https://developer.calendly.com/docs/api-guides/schedule-events-with-ai-agents.md; https://calendly.com/scheduling"
  },
  {
   "id": "cap-03",
   "group": "Scheduling",
   "capability": "Connect a calendar so availability reflects busy times",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /user_busy_times",
    "mcp": "availability-list_user_busy_times",
    "cli": null,
    "ui": "Account > Calendar connections"
   },
   "check": "GET /user_busy_times shows events pulled from the connected calendar; double-booking is prevented on the booking page",
   "source": "https://calendly.com/scheduling; https://calendly.com/pricing"
  },
  {
   "id": "cap-04",
   "group": "Scheduling",
   "capability": "Set availability (hours, buffers, daily limits, schedules)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /event_type_availability_schedules; GET /user_availability_schedules",
    "mcp": "availability-update_event_type_availability_schedule",
    "cli": null,
    "ui": "Availability settings"
   },
   "check": "GET /user_availability_schedules/{uuid} reflects the updated hours/buffers",
   "source": "https://calendly.com/scheduling"
  },
  {
   "id": "cap-05",
   "group": "Scheduling",
   "capability": "Reschedule or cancel a scheduled meeting",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /scheduled_events/{uuid}/cancellation",
    "mcp": "meetings-cancel_event",
    "cli": null,
    "ui": "Scheduled Events page"
   },
   "check": "GET /scheduled_events/{uuid} shows status: canceled with cancellation reason",
   "source": "https://developer.calendly.com/api-docs/calendly-api/scheduled-events/create-scheduled-event-cancellation.md"
  },
  {
   "id": "cap-06",
   "group": "Scheduling",
   "capability": "Run group, round-robin, or multi-host (collective) meeting types",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /event_types (type field)",
    "mcp": "event_types-list_event_types",
    "cli": null,
    "ui": "Event Types > New Event Type > team event types"
   },
   "check": "GET /event_types/{uuid} shows event type kind (round_robin/collective/group) with multiple hosts listed",
   "source": "https://calendly.com/scheduling (Teams: 'Round-robin & team scheduling')"
  },
  {
   "id": "cap-07",
   "group": "Scheduling",
   "capability": "Embed the booking page on a website (inline/popup/button)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Embed code snippet in event type settings"
   },
   "check": "Visiting the host page renders the Calendly iframe/widget and a booking completes through it",
   "source": "https://developer.calendly.com/api-docs/overview/embedding/getting-started.md"
  },
  {
   "id": "cap-08",
   "group": "Scheduling",
   "capability": "Qualify and route inbound leads with a routing form",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /routing_forms; GET /routing_forms/{uuid}/submissions",
    "mcp": "routing_forms-list_routing_forms",
    "cli": null,
    "ui": "Routing Forms builder"
   },
   "check": "GET /routing_form_submissions/{uuid} shows a submission routed to the configured event type/owner",
   "source": "https://developer.calendly.com/docs/mcp/supported-tools.md (requires Teams plan or higher); https://calendly.com/scheduling"
  },
  {
   "id": "cap-09",
   "group": "Scheduling",
   "capability": "Collect payment at time of booking",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Event type > Payments (Stripe/PayPal)"
   },
   "check": "A completed booking shows a captured charge in the connected Stripe/PayPal account",
   "source": "https://calendly.com/pricing (Standard: 'Connect Stripe, PayPal')"
  },
  {
   "id": "cap-10",
   "group": "Notetaker",
   "capability": "Record a meeting and generate an AI recap/transcript",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /meeting_recaps/{uuid}; GET /meeting_recaps/{uuid}/transcript",
    "mcp": null,
    "cli": null,
    "ui": "Notetaker toggle on event type / joins Zoom, Meet, Teams"
   },
   "check": "GET /meeting_recaps/{uuid}/recap returns a non-empty recap and transcript after the meeting ends",
   "source": "https://calendly.com/pricing (Notetaker: Recordings & transcripts, Shareable meeting recaps); https://developer.calendly.com/llms.txt"
  },
  {
   "id": "cap-11",
   "group": "Notetaker",
   "capability": "Share or delete a meeting recap",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "PATCH /meeting_recaps/{uuid}; DELETE /meeting_recaps/{uuid}",
    "mcp": null,
    "cli": null,
    "ui": "Meeting recap page > Share/Delete"
   },
   "check": "GET /meeting_recaps/{uuid} returns 404 after delete, or shows updated sharing settings after patch",
   "source": "https://developer.calendly.com/api-docs/calendly-api/notetaker/update-meeting-recaps-uuid.md"
  },
  {
   "id": "cap-12",
   "group": "AI Assistant",
   "capability": "Delegate scheduling to Callie, an AI assistant that negotiates times over email",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Callie (beta) assistant in account settings"
   },
   "check": "An invitee emailed into the thread receives Callie's reply proposing/confirming a time, and a scheduled event appears",
   "source": "https://calendly.com/pricing (Callie: 'An AI assistant that schedules over email')"
  },
  {
   "id": "cap-13",
   "group": "Contacts",
   "capability": "Create, view, update, and delete a contact",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /contacts; GET /contacts/{uuid}; PATCH /contacts/{uuid}; DELETE /contacts/{uuid}",
    "mcp": null,
    "cli": null,
    "ui": "Contacts page"
   },
   "check": "GET /contacts/{uuid} reflects the create/update, and returns 404 after delete",
   "source": "https://developer.calendly.com/llms.txt (Contacts endpoints)"
  },
  {
   "id": "cap-14",
   "group": "Contacts",
   "capability": "Define and read custom contact fields",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /contact_custom_field_definitions; GET /contact_custom_field_definitions/{uuid}",
    "mcp": null,
    "cli": null,
    "ui": "Contacts > Custom fields settings"
   },
   "check": "GET /contacts/{uuid} includes the custom field value set on that contact",
   "source": "https://developer.calendly.com/api-docs/calendly-api/contacts/list-contact-custom-field-definitions.md"
  },
  {
   "id": "cap-15",
   "group": "Automation",
   "capability": "Send automated meeting reminders and follow-ups",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Event type > Workflows/Automations"
   },
   "check": "Invitee receives a reminder email/SMS at the configured offset before/after the scheduled event",
   "source": "https://calendly.com/pricing (Standard: 'Automations & reminders')"
  },
  {
   "id": "cap-16",
   "group": "Automation",
   "capability": "Subscribe to scheduling events via webhooks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /webhook_subscriptions; GET /webhook_subscriptions; DELETE /webhook_subscriptions/{uuid}",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "A test booking/cancellation triggers an HTTP POST to the subscribed callback URL with a signed payload",
   "source": "https://developer.calendly.com/api-docs/overview/webhooks/webhook-signatures.md"
  },
  {
   "id": "cap-17",
   "group": "Automation",
   "capability": "Generate a single-use or custom scheduling link for sharing outside the booking page",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /scheduling_links; POST /share",
    "mcp": "scheduling_links-create_single_use_scheduling_link",
    "cli": null,
    "ui": "Event type > Share > Copy link"
   },
   "check": "Opening the generated URL loads the booking page for that event type and is marked single-use/consumed after one booking",
   "source": "https://developer.calendly.com/api-docs/calendly-api/scheduling-links/create-scheduling-link.md"
  },
  {
   "id": "cap-18",
   "group": "Reporting",
   "capability": "List and inspect scheduled events and their invitees",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /scheduled_events; GET /scheduled_events/{uuid}/invitees",
    "mcp": "meetings-list_events",
    "cli": null,
    "ui": "Scheduled Events dashboard"
   },
   "check": "GET /scheduled_events returns the set of meetings booked in a given date range, matching the UI list",
   "source": "https://developer.calendly.com/api-docs/calendly-api/scheduled-events/list-scheduled-events.md"
  },
  {
   "id": "cap-19",
   "group": "Reporting",
   "capability": "Mark/unmark an invitee as a no-show",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /invitee_no_shows; DELETE /invitee_no_shows/{uuid}",
    "mcp": "meetings-create_invitee_no_show",
    "cli": null,
    "ui": "Scheduled Event detail > Mark as no-show"
   },
   "check": "GET /invitee_no_shows/{uuid} returns the no-show record, and 404 after it is removed",
   "source": "https://developer.calendly.com/api-docs/calendly-api/scheduled-events/create-invitee-no-show.md"
  },
  {
   "id": "cap-20",
   "group": "Reporting",
   "capability": "View organization-wide audit activity log",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /activity_log_entries",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Activity Log"
   },
   "check": "GET /activity_log_entries returns entries for a recent admin or scheduling action with actor and timestamp",
   "source": "https://developer.calendly.com/api-docs/calendly-api/activity-log/list-activity-log-entries.md (Enterprise subscription required)"
  },
  {
   "id": "cap-21",
   "group": "Integrations",
   "capability": "Connect CRM/marketing tools (HubSpot, Salesforce, Marketo, Pardot, Mailchimp, Microsoft Dynamics)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations marketplace"
   },
   "check": "A new scheduled event appears as a synced activity/record in the connected CRM",
   "source": "https://calendly.com/pricing (Standard: Hubspot/Mailchimp; Teams: Marketo/Pardot/Salesforce; Enterprise: Dynamics)"
  },
  {
   "id": "cap-22",
   "group": "Integrations",
   "capability": "Use the browser extension to insert availability anywhere on the web",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Browser extension (Chrome etc.)"
   },
   "check": "Composing an email/LinkedIn message with the extension active inserts a live Calendly link/times into the draft",
   "source": "https://calendly.com/pricing (Free: 'Browser extension'); https://calendly.com/scheduling"
  },
  {
   "id": "cap-23",
   "group": "Integrations",
   "capability": "Manage scheduling from the mobile app",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Calendly iOS/Android app"
   },
   "check": "A booking made on the website appears in the mobile app's agenda in real time",
   "source": "https://calendly.com/scheduling (Mobile app)"
  },
  {
   "id": "cap-24",
   "group": "Team Admin",
   "capability": "Invite, list, and remove members of an organization",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /organizations/{uuid}/invitations; GET /organization_memberships; DELETE /organization_memberships/{uuid}",
    "mcp": "organizations-create_organization_invitation",
    "cli": null,
    "ui": "Admin > Team Members"
   },
   "check": "GET /organization_memberships lists the newly added member, and omits them after removal",
   "source": "https://developer.calendly.com/api-docs/calendly-api/organizations/create-organization-invitation.md"
  },
  {
   "id": "cap-25",
   "group": "Team Admin",
   "capability": "View and manage teams/groups within an organization",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /teams; GET /groups; GET /group_relationships",
    "mcp": null,
    "cli": null,
    "ui": "Admin > Teams"
   },
   "check": "GET /teams/{uuid} returns the team's member list matching the admin UI",
   "source": "https://developer.calendly.com/api-docs/calendly-api/organizations/get-team.md"
  },
  {
   "id": "cap-26",
   "group": "Team Admin",
   "capability": "Enforce single sign-on (SSO/SAML) and domain control for the organization",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Admin > Security settings"
   },
   "check": "A login attempt with a non-SSO password is rejected and redirected to the IdP after SSO is enforced",
   "source": "https://calendly.com/pricing (Teams: 'SSO security add-on'; Enterprise: 'Enable SSO & SAML', 'Domain control')"
  },
  {
   "id": "cap-27",
   "group": "Compliance",
   "capability": "Delete invitee or scheduled-event personal data (GDPR/CCPA)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "POST /data_compliance/deletion/invitees; POST /data_compliance/deletion/scheduled_events",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Subsequent GET for the invitee/event returns no personal data (anonymized or 404)",
   "source": "https://developer.calendly.com/api-docs/calendly-api/data-compliance/delete-invitee-data.md"
  },
  {
   "id": "cap-28",
   "group": "Compliance",
   "capability": "Track outgoing communications sent on the account's behalf",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /outgoing_communications",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /outgoing_communications lists a reminder/confirmation email sent for a recent booking",
   "source": "https://developer.calendly.com/api-docs/calendly-api/outgoing-communications/list-outgoing-communications.md"
  },
  {
   "id": "cap-29",
   "group": "Branding",
   "capability": "Customize booking page branding (logo, colors, description, location)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /event_types/{uuid}",
    "mcp": "event_types-update_event_type",
    "cli": null,
    "ui": "Event type > Customize appearance"
   },
   "check": "The public booking page renders the updated logo/color/description after saving",
   "source": "https://calendly.com/scheduling (Step 03 — 'customize the location, description, branding')"
  },
  {
   "id": "cap-30",
   "group": "Branding",
   "capability": "Create a one-off (ad hoc) event type for a single use case",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /one_off_event_types",
    "mcp": null,
    "cli": null,
    "ui": "New one-off event"
   },
   "check": "GET /event_types/{uuid} shows the one-off event type with its specific date/time slots",
   "source": "https://developer.calendly.com/api-docs/calendly-api/event-types/create-one-off-event-type.md"
  }
 ],
 "attempts": [
  {
   "t": "00:48",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "Fetch llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://calendly.com/llms.txt 200 text/plain 11913B; https://developer.calendly.com/llms.txt 200 16651B, lists MCP server, .md pages, OpenAPI 3.1",
   "notes": ""
  },
  {
   "t": "00:48",
   "cap": "discovery",
   "capability": "OpenAPI",
   "task": "Fetch OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://developer.calendly.com/openapi/calendly-api.yaml 200 application/x-yaml, openapi: 3.1.0, 65 operationIds; /.well-known/api-catalog linkset 200; /openapi.json returns HTML (200 text/html), not JSON; no x-payment-info",
   "notes": ""
  },
  {
   "t": "00:48",
   "cap": "discovery",
   "capability": "MCP discover",
   "task": "POST server/discover to https://mcp.calendly.com/",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "401 WWW-Authenticate Bearer resource_metadata=https://mcp.calendly.com/.well-known/oauth-protected-resource; response also sets mcp-session-id header; PRM 200 application/json",
   "notes": ""
  },
  {
   "t": "00:48",
   "cap": "discovery",
   "capability": "Cards",
   "task": "ai-catalog, agent-card, agent.json, mcp server-card",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "calendly.com/.well-known/ai-catalog.json 404 JSON; agent-card.json 404; agent.json 404; .well-known/mcp/server-card.json 404; https://mcp.calendly.com/server-card 404 text/plain",
   "notes": ""
  },
  {
   "t": "00:48",
   "cap": "discovery",
   "capability": "robots/aipref",
   "task": "robots.txt Content-Usage",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "robots.txt 200: no Content-Usage or Content-signal lines; User-Agent * Disallow /*?* and /app/; no Content-Usage response header on /",
   "notes": ""
  },
  {
   "t": "00:48",
   "cap": "discovery",
   "capability": "OAuth AS metadata",
   "task": "AS metadata",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "calendly.com/.well-known/oauth-authorization-server: registration_endpoint https://calendly.com/oauth/register, token_endpoint_auth_methods none, S256; no client_id_metadata_document_supported, no device_authorization_endpoint, no agent_auth",
   "notes": ""
  },
  {
   "t": "01:11",
   "cap": "discovery",
   "capability": "docs MCP",
   "task": "server/discover on https://developer.calendly.com/_mcp/server, then initialize",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover: HTTP 400 JSON-RPC -32000 'Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)'; initialize answered protocolVersion 2025-11-25, serverInfo fern-docs-mcp-server 1.0.0; tools/list: searchDocs only",
   "notes": ""
  },
  {
   "t": "01:11",
   "cap": "discovery",
   "capability": "Markdown docs",
   "task": "Accept: text/markdown and .md URL",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Accept: text/markdown on /docs/getting-started/introduction -> content-type text/markdown, vary: accept-encoding, Cookie (no Vary: Accept); .md URL 200 text/markdown",
   "notes": ""
  },
  {
   "t": "02:14",
   "cap": "docs",
   "capability": "Docs",
   "task": "Find developer docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developer.calendly.com/llms.txt 200, OpenAPI 3.1.0 yaml 200, .md pages 200 text/markdown, docs MCP (fern) searchDocs",
   "notes": "",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "02:14",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create a free account with our test email",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "calendly.com/signup (no CAPTCHA on first step) -> /app/signup?email=… form (email, full name 'AgentDrives Test', 12+ char password, terms checkbox) -> Continue -> 'Please confirm you’re human to continue.' with a visible reCAPTCHA v2 'I'm not a robot' checkbox (screenshot browser/shots/003.png). No signup API documented; Google/Microsoft OAuth sign-in needs accounts we do not have.",
   "notes": "Visible reCAPTCHA v2 checkbox after the sign-up form submit. Not solved or bypassed.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "03:12",
   "cap": "cap-01",
   "capability": "Create an event type (meeting template)",
   "task": "Try via mcp: event_types-create_event_type",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-02",
   "capability": "Share a booking link and let an invitee book a time",
   "task": "Try via mcp: meetings-create_invitee",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-03",
   "capability": "Connect a calendar so availability reflects busy times",
   "task": "Try via mcp: availability-list_user_busy_times",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-04",
   "capability": "Set availability (hours, buffers, daily limits, schedules)",
   "task": "Try via mcp: availability-update_event_type_availability_schedule",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-05",
   "capability": "Reschedule or cancel a scheduled meeting",
   "task": "Try via mcp: meetings-cancel_event",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-06",
   "capability": "Run group, round-robin, or multi-host (collective) meeting types",
   "task": "Try via mcp: event_types-list_event_types",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-07",
   "capability": "Embed the booking page on a website (inline/popup/button)",
   "task": "Try via browser: Embed code snippet in event type settings",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Feature lives in the web app, which needs an account",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-08",
   "capability": "Qualify and route inbound leads with a routing form",
   "task": "Try via mcp: routing_forms-list_routing_forms",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-09",
   "capability": "Collect payment at time of booking",
   "task": "Try via browser: Event type > Payments (Stripe/PayPal)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Feature lives in the web app, which needs an account",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-12",
   "capability": "Delegate scheduling to Callie, an AI assistant that negotiates times over email",
   "task": "Try via browser: Callie (beta) assistant in account settings",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Feature lives in the web app, which needs an account",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-13",
   "capability": "Create, view, update, and delete a contact",
   "task": "Try via api: POST /contacts; GET /contacts/{uuid}; PATCH /contacts/{uuid}; DELETE /contacts/{uuid}",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-16",
   "capability": "Subscribe to scheduling events via webhooks",
   "task": "Try via api: POST /webhook_subscriptions; GET /webhook_subscriptions; DELETE /webhook_subscriptions/{uuid}",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-17",
   "capability": "Generate a single-use or custom scheduling link for sharing outside the booking page",
   "task": "Try via mcp: scheduling_links-create_single_use_scheduling_link",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-18",
   "capability": "List and inspect scheduled events and their invitees",
   "task": "Try via mcp: meetings-list_events",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "cap-19",
   "capability": "Mark/unmark an invitee as a no-show",
   "task": "Try via mcp: meetings-create_invitee_no_show",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "https://api.calendly.com/* -> 401 {\"title\":\"Unauthenticated\",\"message\":\"The access token is invalid\"}; https://mcp.calendly.com/ -> 401 Bearer resource_metadata",
   "notes": "No account: sign-up stopped at a visible reCAPTCHA v2 checkbox, so no OAuth consent, personal access token or MCP token could be obtained. Unauthenticated call returned 401."
  },
  {
   "t": "03:12",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Verify the sign-up email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Sign-up never submitted past the reCAPTCHA, so no verification mail was due",
   "notes": "Not reached"
  },
  {
   "t": "03:12",
   "cap": "credentials",
   "capability": "API credentials",
   "task": "Get a personal access token or OAuth/MCP token",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Docs: PATs are created in the web app (calendly.com/integrations > API & Webhooks tile > Get a token now, after logging in); OAuth/MCP use DCR (https://calendly.com/oauth/register, live, answered 400 invalid_client_metadata 'redirect_uri must start with https in Production' to an http loopback URI) plus a browser consent page for a signed-in user. AS metadata has no device_authorization_endpoint and no CIMD flag.",
   "notes": "All credential routes need a Calendly account; account creation is behind reCAPTCHA.",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "03:12",
   "cap": "pay",
   "capability": "Pay step",
   "task": "Find an agent purchase path",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No 402 on api.calendly.com (401 JSON on /, /invitees, /scheduling/invitees); x402./mpp./agents.calendly.com do not resolve (curl 000); no calendly entries in x402 Bazaar or mpp.dev/api/services; no x-payment-info in OpenAPI; no /.well-known/ucp (404 HTML); no billing endpoints in OpenAPI. Pricing FAQ: upgrade 'from the billing page in your account'; signup page: 'No credit card required', 14-day Teams trial that auto-downgrades to Free.",
   "notes": "Checkout itself not seen: needs an account."
  },
  {
   "t": "03:12",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Cancel a paid plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan started. Help centre: 'How to cancel your Calendly subscription ... by switching to th[e Free plan]' on the billing page (web UI); no billing API in OpenAPI.",
   "notes": ""
  },
  {
   "t": "03:12",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete the account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account was created. OpenAPI (65 operations) has no user/account delete; only Enterprise data_compliance deletion of invitee/event data.",
   "notes": ""
  }
 ],
 "stale": false,
 "icon": "/logos/calendly.png",
 "monitored": false,
 "verdict": "A person has to set it up: L1 · Needs a person. Our agent read the docs headlessly without trouble, then stopped at sign-up, where a visible reCAPTCHA checkbox follows the sign-up form before any verification mail goes out. Without an account there was no personal access token, no OAuth consent and no completed MCP connection, so the API and the hosted MCP server both answered unauthorized and no scheduling action ran. Pricing stayed out of reach too: the billing page sits behind the same login, so our agent never saw checkout, upgrade or cancel, and no account existed to delete.",
 "page": "https://agentdrives.com/tools/calendly?via=api"
}