# How to connect Calendly MCP with ChatGPT Work

```json
{
  "title": "How to connect Calendly MCP with ChatGPT Work",
  "toolkit": "Calendly MCP",
  "toolkit_slug": "calendly_mcp",
  "framework": "ChatGPT Work",
  "framework_slug": "chatgpt",
  "url": "https://composio.dev/toolkits/calendly_mcp/framework/chatgpt",
  "markdown_url": "https://composio.dev/toolkits/calendly_mcp/framework/chatgpt.md",
  "updated_at": "2026-09-03T05:32:23.124Z"
}
```

## Introduction

### How to connect Calendly MCP with ChatGPT Work
[ChatGPT Work](https://openai.com/chatgpt-work/) is an agent inside ChatGPT built for your most ambitious work. It takes action across your apps and files, stays with a project for hours, and turns a goal into finished materials like sheets, slides, and docs - not just answers.
In this guide, I will explain the easiest and most secure way to connect your Calendly account to ChatGPT Work via Composio Connect, so it can manage your event types, find open times, generate scheduling links, book meetings, and cancel events through natural language commands without ever putting your account credentials at risk.

## Also integrate Calendly MCP with

- [Claude Cowork](https://composio.dev/toolkits/calendly_mcp/framework/claude-cowork)
- [Hermes](https://composio.dev/toolkits/calendly_mcp/framework/hermes-agent)

## TL;DR

### Why use Composio over default connectors?
- Apps with read and write access. Default connectors mostly can read your data. Composio's Calendly integration lets ChatGPT Work take actions like creating drafts, sending updates, labeling records, and more.
- 1,500+ SaaS toolkits out of the box. Composio gives you instant access to a vast catalog of pre-built connectors, from Gmail and Slack to Notion, Linear, and Salesforce.
- One MCP server for every app. Connect any of your applications on demand through a single endpoint, rather than juggling a separate server for each app.
- Smart, context-aware tool loading. Unlike traditional MCP servers that dump every available tool into the LLM context window, Composio searches for and loads only the tools relevant to the task at hand.
- Cross-app automation. Chain actions across multiple apps in a single run - fetch a thread, summarize it in Notion, and post highlights to Slack without leaving the conversation.

## Connect Calendly MCP to ChatGPT Work

### Prerequisites
- A ChatGPT account with access to ChatGPT Work (rolling out across Pro, Enterprise, Edu, Plus, and Business plans). We will use the [ChatGPT desktop app](https://openai.com/chatgpt/download/), which is available on every plan.
- Access to the Calendly workspace you want to connect.
- [Composio MCP](https://dashboard.composio.dev/login?utm_source=toolkits&utm_medium=framework_template&utm_campaign=chatgpt&utm_content=composio_connect&next=%2F~%2Forg%2Fconnect%2Fclients%2Fchatgpt).
Note: Composio connects through OAuth. You will be asked to sign in and approve specific permissions. Review the permission screen carefully if you are using a work account.
### Step-by-step: Connect Calendly to ChatGPT Work
### 1. Open the MCP settings
In ChatGPT Work, go to Settings and open the Plugins section. Inside the Plugins page, click the MCP tab.
### 2. Add the server
Click Add server. In the Name field enter Composio, for Type select Streamable HTTP, and in the URL field paste the Composio MCP server URL:

```bash
https://connect.composio.dev/mcp
```

## What is the Calendly MCP server, and what's possible with it?

The Calendly MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Calendly account. It provides structured and secure access so your agent can perform Calendly operations on your behalf.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `CALENDLY_MCP_AVAILABILITY_GET_USER_AVAILABILITY_SCHEDULE` | Availability-get user availability schedule | Use: Fetch details for one named availability schedule. When: User asks about specific schedule rules or needs rules for a named schedule. Needs: Schedule URI from `availability-list_user_availability_schedules`. Do: Read `rules` array and `timezone` for display or to inform event-type updates. Avoid: Writing to this schedule—use event-type-level update for changes. Then: Report schedule details to user or use rules for availability queries. |
| `CALENDLY_MCP_AVAILABILITY_LIST_USER_AVAILABILITY_SCHEDULES` | Availability-list user availability schedules | Use: List all named availability schedules for the connected user. When: User asks about availability schedules or you need to identify one by name. Needs: User URI from `users-get_current_user`. Do: Use returned `uri` to fetch schedule details or associate with an event type. Avoid: Confusing user availability schedules with event-type-level schedules. Then: Use schedule URI in `availability-get_user_availability_schedule` for details. |
| `CALENDLY_MCP_AVAILABILITY_LIST_USER_BUSY_TIMES` | Availability-list user busy times | Use: List a user's busy time blocks within a date range. When: User asks when they are busy or you need to avoid conflicts before suggesting slots. Needs: User URI from `users-get_current_user` and ISO 8601 start/end range. Do: Pass user URI and date range; use returned intervals to report conflicts. Avoid: Substituting for `event_types-list_event_type_available_times`—they differ. Then: Use busy intervals to inform scheduling recommendations. |
| `CALENDLY_MCP_EVENT_TYPES_CREATE_EVENT_TYPE` | Event types-create event type | Use: Create a new event type on the connected account. When: User explicitly asks to create a new event type. Needs: Host user URI from `users-get_current_user`. Do: Set name, duration, and host URI; omit optional fields unless user specified them. Avoid: Creating duplicates—call `event_types-list_event_types` first to check for existing types. Then: Confirm the new event type URI and share the scheduling URL. |
| `CALENDLY_MCP_EVENT_TYPES_GET_EVENT_TYPE` | Event types-get event type | Use: Fetch full details for one event type by URI. When: Before updating an event type or confirming its current configuration. Needs: Event type URI. Do: Use the returned fields as the baseline for any patch payload. Avoid: Constructing update payloads without reading current state first. Then: Proceed with `event_types-update_event_type` using the returned data as base. |
| `CALENDLY_MCP_EVENT_TYPES_LIST_EVENT_TYPE_AVAILABILITY_SCHEDULE` | Event types-list event type availability schedule | Use: Read the current availability schedule (rules) for an event type. When: Before calling `event_types-update_event_type_availability_schedule`. Needs: Event type URI. Do: Retain the full `rules` array verbatim—it is the required base for updates. Avoid: Calling the update endpoint without first reading the current rules. Then: Pass the rules to `event_types-update_event_type_availability_schedule` with only the needed edits. |
| `CALENDLY_MCP_EVENT_TYPES_LIST_EVENT_TYPE_AVAILABLE_TIMES` | Event types-list event type available times | Use: List bookable time slots for an event type within a date range. When: User wants slots, or to confirm availability before booking. Needs: Event type URI and start/end date range (ISO 8601). Do: Pass `start_time` verbatim to subsequent tool calls; do not rewrite UTC values. Avoid: Stale data, or trusting a prior local label—re-check UTC `start_time` if questioned. Then: Pass UTC `start_time` to `meetings-create_invitee`. |
| `CALENDLY_MCP_EVENT_TYPES_LIST_EVENT_TYPES` | Event types-list event types | Use: List all event types for the connected user or org. When: Start of any event-type task, or when selecting an event type by name. Needs: User URI from `users-get_current_user`. Do: Filter by current user URI unless user explicitly asks about a different host or org. Avoid: Assuming a cached list is current—call fresh each session. Then: Carry the selected `uri` into get, update, or availability tools. |
| `CALENDLY_MCP_EVENT_TYPES_UPDATE_EVENT_TYPE` | Event types-update event type | Use: Update fields on an existing event type. When: User asks to change name, duration, description, or other settings. Needs: Event type URI from `event_types-list_event_types` or `event_types-get_event_type`. Do: Read current state first with `event_types-get_event_type`; patch only requested fields. Avoid: Sending fields not read from current state—partial writes may reset unset fields. Then: Confirm changes with `event_types-get_event_type`. |
| `CALENDLY_MCP_EVENT_TYPES_UPDATE_EVENT_TYPE_AVAILABILITY_SCHEDULE` | Event types-update event type availability schedule | Use: Overwrite the availability schedule for an event type. When: User requests schedule changes (hours, days, one-off date overrides) for an event type. Needs: Event type URI and current rules from `event_types-list_event_type_availability_schedule`. Do: Must copy existing rules verbatim, modify only requested entries, send full rules array with IANA timezone. wday rules need `wday` field; date rules need `date` field (YYYY-MM-DD); `intervals` is list of `{from, to}` in HH:MM 24h. Avoid: Constructing rules from scratch or sending a partial array—this endpoint overwrites all rules. Then: Re-read schedule with `event_types-list_event_type_availability_schedule` to confirm. |
| `CALENDLY_MCP_LIST_CALENDLY_SKILLS` | List calendly skills | List or search available Calendly skill guides. Each skill gives domain-specific context, recommended tool usage, and best practices for working with Calendly MCP tools. Call this when the user's goal has no obvious single tool (e.g. reschedule or move a meeting). Load a matching skill before using related workflow tools. Use `keywords` to search by name or description (any keyword may match), and `include_header=true` to include each skill's description and related skills. |
| `CALENDLY_MCP_LOAD_CALENDLY_SKILL` | Load calendly skill | Load a Calendly skill guide that provides domain-specific context, recommended queries, and best practices for working with Calendly tools. Required after listing when a skill matches; do not guess multi-step flows from tool names alone. Use `list_calendly_skills` to discover available skills, or load directly by name. Set `header_only=true` to preview a skill's description and related skills without loading full content. |
| `CALENDLY_MCP_LOCATIONS_LIST_USER_MEETING_LOCATIONS` | Locations-list user meeting locations | Use: List allowed meeting location kinds for a user. When: Before creating bookings that need a `location` payload. Needs: User URI from `users-get_current_user`. Do: Read supported location `kind` values; choose one compatible with the event type. Avoid: Submitting a location kind not configured for the host or event type. Then: Use chosen kind in `meetings-create_invitee` location payload. |
| `CALENDLY_MCP_MEETINGS_CANCEL_EVENT` | Meetings-cancel event | Use: Cancel a scheduled meeting on behalf of the connected host When: User confirms they want to cancel a specific meeting. Needs: Meeting URI from `meetings-list_events` or `meetings-get_event`. Do: Pass meeting URI and optional cancellation reason. Avoid: Canceling without confirmation; this notifies all invitees. For reschedule, surface `reschedule_url` instead. Then: Inform user the meeting is canceled and optionally list remaining meetings. |
| `CALENDLY_MCP_MEETINGS_CREATE_INVITEE` | Meetings-create invitee | Use: Book a meeting slot for an invitee on a Calendly event type. When: User provides invitee name, email, and a confirmed available time slot. Needs: Event type URI, `start_time` from `event_types-list_event_type_available_times`, invitee name and email. Include `location` if the event type has configured locations. Do: Set invitee name/email as the person being booked; host is the connected user from `users-get_current_user`. Never swap host and invitee fields. Avoid: Booking without confirming slot availability first, or omitting `location` when event type requires it. Then: Confirm booking with invitee details and meeting URI. |
| `CALENDLY_MCP_MEETINGS_CREATE_INVITEE_NO_SHOW` | Meetings-create invitee no show | Use: Mark an invitee as a no-show for a past meeting. When: User reports an invitee did not attend. Needs: Invitee URI from `meetings-list_event_invitees`. Do: Pass invitee URI; operation is idempotent. Avoid: Marking no-show before the meeting end time. Then: Confirm no-show is recorded and carry forward the no-show URI. |
| `CALENDLY_MCP_MEETINGS_DELETE_INVITEE_NO_SHOW` | Meetings-delete invitee no show | Use: Remove a no-show mark from an invitee. When: User asks to undo a no-show marking. Needs: No-show URI from `meetings-create_invitee_no_show`. Do: Pass no-show URI; operation is idempotent. Avoid: Calling without confirming a no-show record exists. Then: Confirm no-show has been removed. |
| `CALENDLY_MCP_MEETINGS_GET_EVENT` | Meetings-get event | Use: Fetch details for a single scheduled meeting. When: User asks about a specific meeting or before canceling/examining invitees. Needs: Meeting URI from `meetings-list_events`. Do: Use returned `event_type`, `start_time`, `end_time`, and `location` for display or next actions. Avoid: Calling this without a known meeting URI. list meetings first. Then: Use meeting URI in `meetings-list_event_invitees` or `meetings-cancel_event`. |
| `CALENDLY_MCP_MEETINGS_GET_EVENT_INVITEE` | Meetings-get event invitee | Use: Fetch details for a single meeting invitee. When: User asks about a specific attendee's booking details. Needs: Meeting URI from `meetings-list_events` and Invitee URI from `meetings-list_event_invitees`. Do: Use returned fields for display or no-show status. Reschedule: surface `reschedule_url`. Avoid: Calling without known meeting and invitee URIs. Then: Use invitee URI in no-show tools if needed. |
| `CALENDLY_MCP_MEETINGS_GET_INVITEE_NO_SHOW` | Meetings-get invitee no show | Use: Fetch the no-show record for a meeting invitee. When: User asks whether a no-show was recorded for an invitee. Needs: No-show URI from `meetings-create_invitee_no_show`. Do: Check returned record for no-show status and timestamp. Avoid: Calling if no no-show has been recorded—returns 404. Then: Report no-show status to user. |
| `CALENDLY_MCP_MEETINGS_LIST_EVENT_INVITEES` | Meetings-list event invitees | Use: List all invitees for a scheduled meeting. When: User asks who is attending a meeting or you need invitee URIs. Needs: Meeting URI from `meetings-list_events`. Do: Use returned invitee `uri` for no-show marking or detail lookups. Avoid: Calling without a meeting URI. list meetings first. Then: Use invitee URI in `meetings-get_event_invitee` or `meetings-create_invitee_no_show`. For reschedule, surface each invitee's `reschedule_url`. |
| `CALENDLY_MCP_MEETINGS_LIST_EVENTS` | Meetings-list events | Use: List scheduled meetings for user/org. When: Upcoming/past meetings or to find meetings by date. Needs: User/org URI via `users-get_current_user`. Do: Filter status (active/canceled), date range; carry `uri`. Avoid: Fetching unfiltered when the user has a specific date. Then: Enrich via `meetings-list_event_invitees` before listing/naming meetings, unless asked for only a count; then `uri` in `meetings-get_event`/`meetings-cancel_event`. |
| `CALENDLY_MCP_ORGANIZATIONS_CREATE_ORGANIZATION_INVITATION` | Organizations-create organization invitation | Use: Invite a user to the organization by email. When: User asks to add a new member. Needs: Org URI and invitee email address. Do: Check `organizations-list_organization_invitations` first to avoid duplicate invites. Avoid: Calling without confirming no pending invite exists for this email. Then: Confirm invitation sent and optionally show pending invitations. |
| `CALENDLY_MCP_ORGANIZATIONS_GET_ORGANIZATION` | Organizations-get organization | Use: Fetch details for the connected user's organization. When: User asks about the org or you need the org URI for org-scoped list tools. Needs: Org URI from `users-get_current_user` (`resource.current_organization`). Do: Use returned `uri` for org-scoped event type or membership queries. Avoid: Calling without an org URI. Then: Use org URI in `organizations-list_organization_memberships`. |
| `CALENDLY_MCP_ORGANIZATIONS_GET_ORGANIZATION_MEMBERSHIP` | Organizations-get organization membership | Use: Fetch details for a single org membership. When: You need role or status for a specific member. Needs: Membership URI from `organizations-list_organization_memberships`. Do: Check `role` and `status` fields for permissions context. Avoid: Calling without a known membership URI. Then: Use membership data to confirm before invite or removal actions. |
| `CALENDLY_MCP_ORGANIZATIONS_LIST_ORGANIZATION_INVITATIONS` | Organizations-list organization invitations | Use: List pending invitations for the organization. When: User asks to see pending invites or check if someone was already invited. Needs: Org URI from `users-get_current_user`. Do: Check returned list before sending a new invite to avoid duplicates. Avoid: Sending a new invitation without checking for existing pending ones. Then: Use invitation URI in `organizations-revoke_organization_invitation` if needed. |
| `CALENDLY_MCP_ORGANIZATIONS_LIST_ORGANIZATION_MEMBERSHIPS` | Organizations-list organization memberships | Use: List all members of an organization. When: User asks who is in the org or you need to find a member's user URI. Needs: Org URI from `users-get_current_user`. Do: Use returned `user.uri` for per-user event-type or availability queries. Avoid: Fetching the full list when you only need the connected user—use `users-get_current_user` instead. Then: Use member URI in user-scoped tools or `organizations-get_organization_membership`. |
| `CALENDLY_MCP_ORGANIZATIONS_REVOKE_ORGANIZATION_INVITATION` | Organizations-revoke organization invitation | Use: Revoke a pending organization invitation. When: User asks to cancel a pending invite. Needs: Organization URI from `users-get_current_user` and Invitation URI from `organizations-list_organization_invitations`. Do: Confirm with user before revoking; this cannot be undone. Avoid: Revoking without confirming the invite is still pending. Then: Confirm revocation and optionally refresh invitations list. |
| `CALENDLY_MCP_ROUTING_FORMS_GET_ROUTING_FORM` | Routing forms-get routing form | Use: Fetch details for a single routing form. When: User asks about a specific form or its questions. Needs: Routing form URI from `routing_forms-list_routing_forms`. Do: Use returned question IDs for submission filtering. Avoid: Calling without a known form URI. Then: Use form details to answer user questions or list submissions. |
| `CALENDLY_MCP_ROUTING_FORMS_GET_ROUTING_FORM_SUBMISSION` | Routing forms-get routing form submission | Use: Fetch details for a single routing form submission. When: User asks about a specific submission or response. Needs: Submission URI from `routing_forms-list_routing_form_submissions`. Do: Read `questions_and_answers` for the submitted values. Avoid: Calling without a known submission URI. Then: Report submission details to user. |
| `CALENDLY_MCP_ROUTING_FORMS_LIST_ROUTING_FORMS` | Routing forms-list routing forms | Use: List routing forms for the org. When: User asks about routing forms or you need to find a form by name. Needs: Org URI from `users-get_current_user`. Do: Use returned `uri` to fetch form details. Avoid: Assuming form names without listing first. Then: Use form URI in `routing_forms-get_routing_form`. |
| `CALENDLY_MCP_ROUTING_FORMS_LIST_ROUTING_FORM_SUBMISSIONS` | Routing forms-list routing form submissions | Use: List submissions for a routing form. When: User asks to see form responses or analyze routing data. Needs: Routing form URI from `routing_forms-list_routing_forms`. Do: Use pagination params for large result sets. Avoid: Fetching all submissions without date/count filters on high-volume forms. Then: Use submission URI in `routing_forms-get_routing_form_submission`. |
| `CALENDLY_MCP_SCHEDULING_LINKS_CREATE_SINGLE_USE_SCHEDULING_LINK` | Scheduling links-create single use scheduling link | Use: Create a single-use scheduling link using the event type's settings unchanged. When: User wants a one-time link with no overrides. For per-link customization (duration, scheduling window, location, availability), use `shares-create_share` instead. Needs: Event type URI from `event_types-list_event_types`. Do: Each call creates a new link; store the returned `booking_url`. Avoid: Using when any override is requested — this endpoint cannot customize the link. Don't create more links than needed; each call creates a distinct non-reusable link. Then: Share `booking_url` with the intended invitee. |
| `CALENDLY_MCP_SHARES_CREATE_SHARE` | Shares-create share | Use: Create a single-use share link for a one-on-one event type with per-link overrides When: User wants a single-use link with any customization (duration, scheduling window, location, or availability). Needs: Event type URI from `event_types-list_event_types`. Do: Set only fields to override; omitted fields inherit from event type. Avoid: Group event types (one-on-one only). This overrides event-type fields, not invitee prefill values. Then: Share the returned `booking_url` with the recipient. |
| `CALENDLY_MCP_USERS_GET_CURRENT_USER` | Users-get current user | Use: Resolve the connected host account and canonical user URI. When: Start any scheduling, booking, event-type, or availability workflow. Needs: No inputs. Do: Call once and keep `resource.uri`, `timezone`, and `scheduling_url` for downstream calls. Avoid: Skipping this and guessing host identity. Then: Use `resource.uri` in list/get tools unless the user explicitly names another host. |
| `CALENDLY_MCP_USERS_GET_USER` | Users-get user | Use: Fetch profile for a specific user by URI. When: User asks about another person's account or you hold a user URI from org/membership data. Needs: User URI. Do: Pass the user URI from org/membership data; do not use this to look up the connected user. Avoid: Calling this without a known URI - use `users-get_current_user` for the connected user. Then: Use returned `resource.uri` and `resource.timezone` for event-type or availability lookups scoped to that user. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

Once connected, ChatGPT Work can access the Calendly MCP server via Composio to run actions that you authorize, directly in your workspace.

## Complete Code

None listed.

## How to build Calendly MCP Agent with another framework

- [Claude Cowork](https://composio.dev/toolkits/calendly_mcp/framework/claude-cowork)
- [Hermes](https://composio.dev/toolkits/calendly_mcp/framework/hermes-agent)

## Related Toolkits

- [Google Calendar](https://composio.dev/toolkits/googlecalendar) - Google Calendar is a time management service for scheduling meetings, events, and reminders. It streamlines personal and team organization with integrated notifications and sharing options.
- [Apaleo](https://composio.dev/toolkits/apaleo) - Apaleo is a cloud-based property management platform for hospitality businesses. It centralizes reservations, billing, and daily operations for smoother hotel management.
- [Appointo](https://composio.dev/toolkits/appointo) - Appointo is an appointment booking platform for Shopify stores. It lets businesses add online scheduling to their websites with zero coding.
- [Bart](https://composio.dev/toolkits/bart) - Bart is the Bay Area Rapid Transit system, providing fast public transportation across the San Francisco Bay Area. It helps commuters and travelers get real-time schedule info, plan routes, and stay updated on service changes.
- [Blue Pillow Hotels & Stays](https://composio.dev/toolkits/bluepillow) - Blue Pillow Hotels & Stays is a hotel and stay discovery platform offering live offers, recommendations, and booking handoff. It helps surface and compare real-time deals and validate bookings for smoother reservations.
- [Bookingmood](https://composio.dev/toolkits/bookingmood) - Bookingmood is commission-free booking software for rental businesses. It lets you manage reservations and sync bookings directly on your website.
- [Booqable](https://composio.dev/toolkits/booqable) - Booqable is a rental software platform for managing inventory, bookings, and reservations. It helps businesses streamline rentals and keep track of every item with ease.
- [Cal](https://composio.dev/toolkits/cal) - Cal is a meeting scheduling platform that offers shareable booking links and real-time calendar syncing. It streamlines the process of finding mutual availability to make scheduling effortless.
- [Calendarhero](https://composio.dev/toolkits/calendarhero) - Calendarhero is a powerful scheduling platform that streamlines your calendar management across multiple services. It helps you efficiently schedule, reschedule, and organize meetings without the back-and-forth.
- [Calendly](https://composio.dev/toolkits/calendly) - Calendly is an appointment scheduling tool that automates meeting invitations, availability checks, and reminders. It helps individuals and teams avoid endless email back-and-forth when booking meetings.
- [Check Cherry](https://composio.dev/toolkits/check_cherry) - Check Cherry is a business management platform for photography and event service companies. It helps teams manage leads, bookings, appointments, offerings, payments, and workflows in one place.
- [Cronfree Time Scheduler](https://composio.dev/toolkits/cronfree_time_scheduler) - Cronfree Time Scheduler is an API-based scheduler for recurring webhook calls. Use it to create and remove timezone-aware schedules without running cron.
- [Etermin](https://composio.dev/toolkits/etermin) - eTermin is an online appointment scheduling platform for businesses to manage bookings. It streamlines client appointments, saving time and reducing scheduling conflicts.
- [Evenium](https://composio.dev/toolkits/evenium) - Evenium is an all-in-one platform for managing professional events, from planning to analysis. It helps teams simplify event logistics, boost engagement, and track every detail in one place.
- [Eventee](https://composio.dev/toolkits/eventee) - Eventee is a user-friendly event management platform for mobile and web. It boosts attendee engagement for in-person, virtual, and hybrid events.
- [Eventzilla](https://composio.dev/toolkits/eventzilla) - Eventzilla is an event management platform for creating, promoting, and running events. It streamlines ticketing, registration, and attendee coordination for organizers.
- [GoTable](https://composio.dev/toolkits/go_table) - GoTable is a restaurant management REST API for reservations, tables, guests, offers, availability, and webhooks. Use it to programmatically manage bookings, guest data, offers, and table availability.
- [Humanitix](https://composio.dev/toolkits/humanitix) - Humanitix is a not-for-profit ticketing platform that donates 100% of profits to charity. It empowers event organizers to make social impact with every ticket sold.
- [Ignav Flights](https://composio.dev/toolkits/ignav_flights) - Ignav Flights is a flight search API for airports, fares, itineraries, and booking links. It helps apps compare routes and prices fast, so travelers can find practical options sooner.
- [Lodgify](https://composio.dev/toolkits/lodgify) - Lodgify is an all-in-one vacation rental software for property managers and owners. It centralizes bookings, guest messaging, and channel synchronization in one dashboard.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Calendly MCP?

With a standalone Calendly MCP server, the agents and LLMs can only access a fixed set of Calendly tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Calendly and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with ChatGPT Work?

Yes, you can. ChatGPT Work fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Calendly tools.

### Can I manage the permissions and scopes for Calendly while using Tool Router?

Yes, absolutely. You can configure which Calendly scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Calendly data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
