Skip to main content
Glama
meAmitPatil

Calendly MCP Server

by meAmitPatil

Calendly MCP Server

A Model Context Protocol (MCP) server for integrating with the Calendly API. This server provides tools to interact with Calendly's scheduling platform, allowing you to retrieve user information, list events, manage invitees, cancel events, and schedule meetings directly via the new Scheduling API.

Features

Core Calendly Integration

  • User Information: Get current authenticated user details

  • Event Management: List, retrieve, and cancel scheduled events

  • Invitee Management: List and manage event invitees

  • Organization: List organization memberships

NEW: Scheduling API Integration

  • Direct Meeting Scheduling: Book meetings programmatically without redirects

  • Event Type Discovery: List available event types for scheduling

  • Real-Time Availability: Check available time slots for any event type

  • Complete Booking Flow: End-to-end scheduling with calendar sync and notifications

  • Location Support: Zoom, Google Meet, Teams, physical locations, and custom options

Related MCP server: Google-Calendar Universal MCP

Installation

Run directly without installation:

npx calendly-mcp-server

Option 2: Manual Installation

  1. Clone this repository:

git clone https://github.com/meAmitPatil/calendly-mcp-server.git
cd calendly-mcp-server
  1. Install dependencies:

npm install
  1. Build the project:

npm run build

Configuration

Authentication

This server supports two authentication methods:

Option 1: Personal Access Token (PAT)

For internal applications or personal use:

  1. Get your Personal Access Token from your Calendly Integrations page

  2. Select API and webhooksGet a token now

  3. Set the environment variable:

export CALENDLY_API_KEY="your_personal_access_token_here"

Option 2: OAuth 2.0

For public applications that multiple users will use:

  1. Create a developer account at developer.calendly.com

  2. Create an OAuth application to get your client credentials

  3. Set the environment variables:

export CALENDLY_CLIENT_ID="your_client_id_here"
export CALENDLY_CLIENT_SECRET="your_client_secret_here"
  1. Optionally, if you already have tokens:

export CALENDLY_ACCESS_TOKEN="your_access_token_here"
export CALENDLY_REFRESH_TOKEN="your_refresh_token_here"

For better performance and automatic defaults, you can set user-specific URIs:

export CALENDLY_USER_URI="https://api.calendly.com/users/your_user_id"
export CALENDLY_ORGANIZATION_URI="https://api.calendly.com/organizations/your_org_id"

These can be obtained by running get_current_user after authentication. When set, the server will automatically use these as defaults for API calls that require user context.

MCP Configuration

Add the server to your MCP client configuration (e.g., Claude Desktop):

For Personal Access Token:

{
  "mcpServers": {
    "calendly": {
      "command": "npx",
      "args": ["calendly-mcp-server"],
      "env": {
        "CALENDLY_API_KEY": "your_personal_access_token_here",
        "CALENDLY_USER_URI": "https://api.calendly.com/users/your_user_id",
        "CALENDLY_ORGANIZATION_URI": "https://api.calendly.com/organizations/your_org_id"
      }
    }
  }
}

For OAuth 2.0:

{
  "mcpServers": {
    "calendly": {
      "command": "npx",
      "args": ["calendly-mcp-server"],
      "env": {
        "CALENDLY_CLIENT_ID": "your_client_id_here",
        "CALENDLY_CLIENT_SECRET": "your_client_secret_here",
        "CALENDLY_ACCESS_TOKEN": "your_access_token_here",
        "CALENDLY_REFRESH_TOKEN": "your_refresh_token_here",
        "CALENDLY_USER_URI": "https://api.calendly.com/users/your_user_id",
        "CALENDLY_ORGANIZATION_URI": "https://api.calendly.com/organizations/your_org_id"
      }
    }
  }
}

Option 2: Using Local Installation

For Personal Access Token:

{
  "mcpServers": {
    "calendly": {
      "command": "node",
      "args": ["path/to/calendly-mcp-server/dist/index.js"],
      "env": {
        "CALENDLY_API_KEY": "your_personal_access_token_here",
        "CALENDLY_USER_URI": "https://api.calendly.com/users/your_user_id",
        "CALENDLY_ORGANIZATION_URI": "https://api.calendly.com/organizations/your_org_id"
      }
    }
  }
}

For OAuth 2.0:

{
  "mcpServers": {
    "calendly": {
      "command": "node",
      "args": ["path/to/calendly-mcp-server/dist/index.js"],
      "env": {
        "CALENDLY_CLIENT_ID": "your_client_id_here",
        "CALENDLY_CLIENT_SECRET": "your_client_secret_here",
        "CALENDLY_ACCESS_TOKEN": "your_access_token_here",
        "CALENDLY_REFRESH_TOKEN": "your_refresh_token_here",
        "CALENDLY_USER_URI": "https://api.calendly.com/users/your_user_id",
        "CALENDLY_ORGANIZATION_URI": "https://api.calendly.com/organizations/your_org_id"
      }
    }
  }
}

Available Tools (12 Total)

All tools work seamlessly through Claude Desktop or any MCP client

OAuth 2.0 Tools

get_oauth_url

Generate OAuth authorization URL for user authentication.

Parameters:

  • redirect_uri (required): The redirect URI for your OAuth application

  • state (optional): Optional state parameter for security

exchange_code_for_tokens

Exchange authorization code for access and refresh tokens.

Parameters:

  • code (required): The authorization code from OAuth callback

  • redirect_uri (required): The redirect URI used in authorization

refresh_access_token

Refresh access token using refresh token.

Parameters:

  • refresh_token (required): The refresh token to use

API Tools

get_current_user

Get information about the currently authenticated user.

list_events

List scheduled events with optional filtering.

Parameters:

  • user_uri (optional): URI of the user whose events to list (uses CALENDLY_USER_URI if not provided)

  • organization_uri (optional): URI of the organization to filter events

  • status (optional): Filter by status ("active" or "canceled")

  • max_start_time (optional): Maximum start time (ISO 8601 format)

  • min_start_time (optional): Minimum start time (ISO 8601 format)

  • count (optional): Number of events to return (default 20, max 100)

get_event

Get details of a specific event.

Parameters:

  • event_uuid (required): UUID of the event to retrieve

list_event_invitees

List invitees for a specific event.

Parameters:

  • event_uuid (required): UUID of the event

  • status (optional): Filter by status ("active" or "canceled")

  • email (optional): Filter by email address

  • count (optional): Number of invitees to return (default 20, max 100)

cancel_event

Cancel a specific event.

Parameters:

  • event_uuid (required): UUID of the event to cancel

  • reason (optional): Reason for cancellation

list_organization_memberships

List organization memberships for the authenticated user.

Parameters:

  • user_uri (optional): URI of the user (uses CALENDLY_USER_URI if not provided)

  • organization_uri (optional): URI of the organization

  • email (optional): Filter by email

  • count (optional): Number of memberships to return (default 20, max 100)

Scheduling API Tools

list_event_types

List available event types for scheduling meetings.

Parameters:

  • user (optional): URI of the user whose event types to list

  • organization (optional): URI of the organization to filter event types

  • count (optional): Number of event types to return (default 20, max 100)

get_event_type_availability

Get available time slots for a specific event type.

Parameters:

  • event_type (required): URI of the event type to check availability for

  • start_time (optional): Start time for availability window (ISO 8601 format)

  • end_time (optional): End time for availability window (ISO 8601 format)

schedule_event

Schedule a meeting by creating an invitee for a specific event type and time.

Requirements: Paid Calendly plan (Standard or higher)

Parameters:

  • event_type (required): URI of the event type to schedule

  • start_time (required): Start time for the event (ISO 8601 UTC format)

  • invitee_email (required): Email address of the invitee

  • invitee_timezone (required): Timezone of the invitee (e.g., America/New_York)

  • invitee_name (optional): Full name of the invitee

  • invitee_first_name (optional): First name of the invitee

  • invitee_last_name (optional): Last name of the invitee

  • invitee_phone (optional): Phone number for SMS reminders (E.164 format)

  • location_kind (optional): Meeting location type (zoom_conference, google_conference, physical, etc.)

  • location_details (optional): Location details (required for physical meetings)

  • event_guests (optional): Array of additional email addresses (max 10)

  • questions_and_answers (optional): Array of question/answer pairs

  • utm_source, utm_campaign, utm_medium (optional): UTM tracking parameters

Usage Examples

Once configured with your MCP client, you can use these tools:

Live Demo

Here's the MCP server in action with Claude Desktop:

Calendly MCP Server Demo

Example: User asks "Show me my Calendly events" and gets formatted event details including date, time, duration, location, and invitee information.

OAuth Flow Examples:

# Generate OAuth URL
get_oauth_url redirect_uri="https://myapp.com/auth/callback"

# Exchange code for tokens (after user authorizes)
exchange_code_for_tokens code="AUTHORIZATION_CODE" redirect_uri="https://myapp.com/auth/callback"

# Refresh access token
refresh_access_token refresh_token="REFRESH_TOKEN"

API Examples:

# Get current user information
get_current_user

# List recent events
list_events count=10

# Get specific event details
get_event event_uuid="EVENT_UUID_HERE"

# List invitees for an event
list_event_invitees event_uuid="EVENT_UUID_HERE"

# Cancel an event
cancel_event event_uuid="EVENT_UUID_HERE" reason="Meeting no longer needed"

Scheduling API Examples:

# List available event types
list_event_types

# Check availability for a specific event type
get_event_type_availability event_type="https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA"

# Schedule a meeting (requires paid plan)
schedule_event event_type="https://api.calendly.com/event_types/AAAAAAAAAAAAAAAA" start_time="2025-10-21T19:00:00Z" invitee_email="client@company.com" invitee_name="John Smith" invitee_timezone="America/New_York" location_kind="zoom_conference"

🎯 Claude Desktop Examples:

# Natural language commands that work in Claude Desktop:
"Show me my event types"
"Check availability for my 30-minute consultation next week"
"Schedule a meeting with john@company.com for tomorrow at 2 PM"
"Book a client onboarding call for Friday"

API Limitations

  • Scheduling API: Requires paid Calendly plan (Standard or higher)

  • Event Rescheduling: Not supported via API (only cancellation)

  • Event Type Creation: Cannot create new event types via API

  • Rate Limits: Standard Calendly API rate limits apply

Troubleshooting

NPX Issues

  • "command not found: npx": Install Node.js 18+ which includes npx

  • NPX downloads every time: This is normal behavior; NPX caches packages for faster subsequent runs

  • Permission errors: Ensure you have write access to npm cache directory (npm config get cache)

  • Network issues: Use npx --offline calendly-mcp-server to use cached version

Authentication Issues

  • "No authentication token available": Set CALENDLY_API_KEY environment variable

  • 400 errors on list_events: Set CALENDLY_USER_URI environment variable or provide user_uri parameter

  • Permission errors: Ensure API key has correct permissions

Scheduling API Issues

  • 403 Forbidden on schedule_event: Requires paid Calendly plan (Standard or higher)

  • 400 Bad Request: Check that event_type URI is valid and start_time is in correct UTC format

  • Invalid time slot: Use get_event_type_availability to verify the time slot is available

General Issues

  • TypeScript errors: Ensure Node.js version 18+ is installed

  • Module not found: Run npm run build if using local installation

Development

Quick Start for Development

# Test with NPX (recommended for users)
npx calendly-mcp-server

# Test with MCP Inspector
npx @modelcontextprotocol/inspector npx calendly-mcp-server

# Clone for development
git clone <repository-url>
cd calendly-mcp-server
npm install
npm run build

Scripts

  • npm run build: Build the TypeScript code

  • npm run dev: Run in development mode with auto-reload

  • npm start: Run the built server

Project Structure

src/
├── index.ts          # Main server implementation
├── types.ts          # TypeScript type definitions (if needed)
└── utils.ts          # Utility functions (if needed)

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Test thoroughly

  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

For issues with this MCP server, please create an issue in the repository. For Calendly API documentation, visit the Calendly Developer Portal.

Available Tools

12 tools
cancel_eventC

Cancel a specific event

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoReason for cancellation
event_uuidYesUUID of the event to cancel

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. 'Cancel' implies a state change, but the description does not state whether cancellation is reversible, whether it deletes the event or marks it as canceled, whether it notifies attendees, or what conditions must be met (e.g., event ownership). This is almost no behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, but it is under-specified rather than appropriately concise. It lacks the detail needed for a mutation tool, and the sentence essentially restates the tool name with little added value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and output schema, this description is severely incomplete. It does not explain side effects, prerequisites, return values, or edge cases (e.g., canceling a non-existent event). For a 2-param tool, the description provides only the basic purpose and leaves the agent with many unknowns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions: event_uuid is 'UUID of the event to cancel' and reason is 'Reason for cancellation'. The description adds no extra meaning beyond the schema, so the baseline of 3 applies. It does not clarify formats or optionality beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Cancel a specific event' uses a clear verb (cancel) and resource (event), and the specificity distinguishes it from siblings like schedule_event or get_event. However, it lacks any additional scope or clarification that would make it a 5, such as mentioning the event must already exist or that cancellation is permanent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention that this should be used for events created via schedule_event, nor does it exclude events that are already canceled or in the past. Without any context or alternatives, the agent receives no usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exchange_code_for_tokensA

Exchange authorization code for access and refresh tokens

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe authorization code from OAuth callback
redirect_uriYesThe redirect URI used in authorization

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must convey behavioral details. It mentions the output tokens but omits important behaviors like single-use code consumption or redirect_uri matching requirements, leaving the agent without critical execution context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, focused sentence with no filler. Perfectly sized for the simple exchange operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the basic function but lacks details about OAuth flow placement, error conditions, and code expiry. While the schema covers parameters, the absence of an output schema and behavioral context leaves gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover both parameters with clear meanings (authorization code and redirect URI), so the tool description adds no additional semantics. Baseline score of 3 applies given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action (exchange) and the resource (authorization code for tokens). It distinguishes from siblings like get_oauth_url and refresh_access_token, which handle different parts of the OAuth lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use in the OAuth flow after obtaining a code, but does not explicitly state when not to use it or mention that refresh_access_token is for later token renewal. Context is clear but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_userA

Get the current authenticated user information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full disclosure burden. It states this retrieves user information but does not specify authentication requirements, return format, or potential errors. The term 'authenticated' hints at auth context, but lacks further behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that wastes no words. It directly states what the tool does without redundant elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no params, no output schema), the description is minimally sufficient, but it does not elaborate on what 'information' is returned (e.g., name, email, ID). This lack of detail could leave an agent uncertain about the response structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description does not need to explain any. Per the rubric, zero parameters receive a baseline of 4 since there is no schema to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and clearly identifies the resource as 'current authenticated user information'. It unambiguously distinguishes itself from sibling tools (e.g., get_oauth_url, list_events) which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this is for retrieving the currently authenticated user's profile. While it does not explicitly mention when not to use it or name alternatives, the context is clear and no exclusions are needed given the tool's simplicity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eventB

Get details of a specific event

ParametersJSON Schema
NameRequiredDescriptionDefault
event_uuidYesUUID of the event to retrieve

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description gives no behavioral disclosure beyond the verb 'get'. With no annotations, it does not state that the operation is read-only, safe, or any other traits, leaving the agent to assume the obvious but without explicit confirmation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the purpose without any filler or redundancy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with one well-documented parameter, the description is adequate. It does not describe return structure, but the phrasing 'details' implies that. Without output schema or annotations, a bit more context could be useful, but it is largely complete for this trivial tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents event_uuid with the description 'UUID of the event to retrieve'. The tool description adds no additional meaning beyond 'specific event', which is already implied by the schema and tool name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get details of a specific event' clearly names the verb (get) and resource (event), and the qualifier 'specific' distinguishes it from the sibling list_events. It is unambiguous about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like list_events or cancel_event. The description does not mention any context or exclusions for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_event_type_availabilityB

Get available time slots for a specific event type

ParametersJSON Schema
NameRequiredDescriptionDefault
end_timeNoEnd time for availability window (ISO 8601 format)
event_typeYesURI of the event type to check availability for
start_timeNoStart time for availability window (ISO 8601 format)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves availability but does not clarify default time windows, timezone handling, or behavior when start_time/end_time are omitted. The read-only nature is implicit but not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no redundant words. It is front-loaded with the key action and resource, making it highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema and annotations, the description should explain return format and parameter interdependencies. It fails to indicate whether a time window is required, what the response looks like, or how availability is calculated, leaving significant gaps for a tool with optional time parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for all three parameters, so the description adds no additional meaning beyond what the schema already explains. The schema covers the event_type URI and ISO 8601 time formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (get), the resource (available time slots), and the scope (for a specific event type). It distinguishes itself from sibling tools like schedule_event (which creates bookings) and list_event_types (which lists event type metadata).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb 'get' and phrase 'available time slots' imply the tool is used to check availability before scheduling, but no explicit guidance is given about when to use it versus alternatives. There is no mention of exclusions or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_oauth_urlA

Generate OAuth authorization URL for user authentication

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoOptional state parameter for security
redirect_uriYesThe redirect URI for your OAuth application

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It does not mention side effects, validation behavior, required external setup, or return format, leaving the agent without important context about how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that earns its place without redundancy. It is front-loaded with the action and resource, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the description gives a clear basic purpose, but with no output schema and no annotations, the description should at least clarify that it returns the URL and note any relevant context (e.g., OAuth flow position). It is adequate but leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% parameter coverage with descriptions for both parameters. The description adds no additional meaning beyond what the schema already states, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Generate') and resource ('OAuth authorization URL'), clearly stating its purpose. It differentiates from siblings like exchange_code_for_tokens and refresh_access_token, which handle subsequent OAuth steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for user authentication' implies the tool is used to start the OAuth flow. However, it provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_event_inviteesB

List invitees for a specific event

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of invitees to return (default 20, max 100)
emailNoFilter invitees by email
statusNoFilter invitees by status
event_uuidYesUUID of the event

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'List invitees' but does not mention pagination, filtering, ordering, permissions, error behavior, or the structure of the returned list. For a read operation, it lacks context about what the agent should expect in terms of response and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded with the action and resource. It contains no filler or redundancy, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the schema covers all parameters, there is no output schema and no annotation. The description is too minimal to fully contextualize the tool: it does not state what the returned invitee list looks like, how pagination works, or any filtering/prerequisite details. Given the simple nature of the tool, more elaboration on return values and behavior would be expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter (count, email, status, event_uuid) has its own description. The tool description itself adds no parameter-level meaning, but since the schema fully documents them, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List invitees for a specific event' uses a specific verb (List) and resource (invitees for an event), clearly distinguishing it from siblings like list_events or get_event by scoping to invitees of a particular event. It directly states the tool's function without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need invitees of a particular event, but it does not explicitly mention when not to use it or provide alternatives among the sibling tools. There is no exclusionary guidance, so the context is only implicitly derived from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsC

List scheduled events for the authenticated user

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of events to return (default 20, max 100)
statusNoFilter events by status
user_uriNoURI of the user whose events to list
max_start_timeNoMaximum start time for events (ISO 8601 format)
min_start_timeNoMinimum start time for events (ISO 8601 format)
organization_uriNoURI of the organization to filter events

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations to provide safety or read-only hints, so the description carries the full burden. It fails to disclose that listing is non-destructive, that multiple filters (status, time range, organization) are supported, or that user_uri can target other users; the 'authenticated user' claim is contradicted by the schema's user_uri parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no filler. It is front-loaded with the verb and resource and earns its place, though it may be slightly too brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six optional parameters, no output schema, and no annotations, the description is under-specified. It omits key details about filtering options, pagination, and the ability to list for other users via user_uri, which are critical for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with well-described parameters, so the baseline is 3. The description adds no additional parameter semantics, but the schema fully covers parameter meanings including defaults and formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies listing scheduled events as its function and distinguishes it from sibling tools like get_event and list_event_types. However, the scope 'for the authenticated user' is slightly misleading given the optional user_uri parameter allows listing events for other users, so it's not fully precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings like get_event or schedule_event, nor any exclusions for when this tool should not be used. The description simply states what it does without contextual usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_event_typesB

List available event types for scheduling meetings

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoURI of the user whose event types to list
countNoNumber of event types to return (default 20, max 100)
organizationNoURI of the organization to filter event types

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only listing operation, but discloses no details about authentication, pagination, rate limits, or response format. Minimal behavioral information beyond the statement itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundancy. It is appropriately concise for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and full schema parameter coverage, the description is minimally adequate. However, with no output schema and no annotations, it lacks details about return structure or filtering behavior, leaving some gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters with descriptions (100% coverage), so the schema does the heavy lifting. The tool description adds no extra parameter meaning, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'List' with a specific resource 'event types' and adds context 'for scheduling meetings'. It is clear what the tool does, though it does not explicitly differentiate from sibling tools like list_events or get_event_type_availability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not state any prerequisites or exclusions, leaving the agent to infer usage from the name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_organization_membershipsB

List organization memberships for the authenticated user

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of memberships to return (default 20, max 100)
emailNoFilter by email
user_uriNoURI of the user
organization_uriNoURI of the organization

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It only states the basic listing action and scope—it does not mention authentication requirements, the default count of 20, pagination, filtering behavior, or the response format. This leaves significant behavioral details undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that directly conveys the tool's purpose. There is no filler or repetition. It is appropriately concise for a simple list operation, and every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal and does not mention return values, default behavior, or how the optional parameters influence results. With no output schema and no annotations, the description should provide more context about pagination, count defaults (20, max 100), and that it returns memberships of the authenticated user. The current description is incomplete for a tool with four optional parameters and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all four parameters with descriptions (100% coverage). The tool description adds no additional parameter semantics beyond what the schema already provides. Baseline of 3 is appropriate because the schema does the heavy lifting and the description adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the resource ('organization memberships'), and specifies the scope ('for the authenticated user'). This is unambiguous and distinguishes it from sibling tools like list_events or list_event_invitees, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The only contextual hint is 'for the authenticated user,' which implies use case but does not compare with other tools or explain when this should be chosen over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_access_tokenC

Refresh access token using refresh token

ParametersJSON Schema
NameRequiredDescriptionDefault
refresh_tokenYesThe refresh token to use

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention what happens on success or failure, whether the refresh token is rotated, if authentication is needed, or what the response contains. This is insufficient for a security-sensitive OAuth operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no wasted words. It is front-loaded and easy to scan. However, it is slightly redundant ('refresh access token using refresh token'), which prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain the return value (e.g., new access token, new refresh token) or indicate when to use it in the OAuth flow. It does neither, leaving the tool's behavior and response unclear. The minimal description is inadequate for a tool without annotations or output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents the single parameter (refresh_token) with a description, so schema coverage is 100%. The description's phrase 'using refresh token' adds no additional semantic value beyond what the schema provides, earning the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Refresh access token') and the mechanism ('using refresh token'). It is specific and understandable, though it does not explicitly differentiate from sibling tools like exchange_code_for_tokens or get_oauth_url. The verb-resource pair is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no context such as 'use when access token expires'. It is a bare statement without any usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schedule_eventB

Schedule a meeting by creating an invitee for a specific event type and time

ParametersJSON Schema
NameRequiredDescriptionDefault
event_typeYesURI of the event type to schedule
start_timeYesStart time for the event (ISO 8601 UTC format, e.g., 2025-10-02T18:30:00Z)
utm_mediumNoUTM tracking parameter for medium
utm_sourceNoUTM tracking parameter for source
event_guestsNoArray of additional email addresses to include (max 10)
invitee_nameNoFull name of the invitee (alternative to first_name/last_name)
utm_campaignNoUTM tracking parameter for campaign
invitee_emailYesEmail address of the invitee
invitee_phoneNoPhone number for SMS reminders (E.164 format, e.g., +14155551234)
location_kindNoType of meeting location (e.g., zoom_conference, google_conference, physical, ask_invitee)
invitee_timezoneYesTimezone of the invitee (e.g., America/New_York)
location_detailsNoLocation details (required for physical meetings or custom locations)
invitee_last_nameNoLast name of the invitee
invitee_first_nameNoFirst name of the invitee
questions_and_answersNoArray of question and answer pairs for booking form

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose side effects. It only says 'creating an invitee,' failing to mention email sending, calendar mutations, required permissions, or other behavioral details expected from a scheduling tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler, though 'creating an invitee' is slightly awkward. It efficiently communicates the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 15 parameters, no output schema, and no annotations, this minimal description leaves many operation details (e.g., guest limits, location handling, UTM parameters) unexplained. The agent gets little guidance beyond the schema, so completeness is low.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds only 'specific event type and time,' which does not meaningfully enhance understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('schedule') and resource ('meeting by creating an invitee'), clearly distinguishing it from siblings like cancel_event and list_events. The phrase 'creating an invitee' is slightly awkward but understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for scheduling meetings but provides no explicit comparison to alternatives or conditions for when to use this tool over others. It relies on the reader to infer context from the name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv2.0.0
    • First observedcancel_event
    • First observedexchange_code_for_tokens
    • First observedget_current_user
    • First observedget_event
    • First observedget_event_type_availability
    • First observedget_oauth_url
    • First observedlist_event_invitees
    • First observedlist_event_types
    • First observedlist_events
    • First observedlist_organization_memberships
    • First observedrefresh_access_token
    • First observedschedule_event

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct action or resource: auth (OAuth URL, token exchange, refresh), user info, events (list/get/cancel/schedule), event types (list/availability), invitees, and org memberships. There is no overlap or ambiguity between tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, using clear verbs like get, list, cancel, exchange, refresh, and schedule. The naming is uniform and predictable.

Tool Count5/5

With 12 tools, the set is well-scoped for a Calendly integration. It covers authentication, user, events, event types, invitees, and org memberships without being bloated or sparse.

Completeness4/5

The toolset covers the full scheduling lifecycle (list event types, check availability, schedule, list/get/cancel events) and authentication. Minor gaps like rescheduling or updating events are missing, but core workflows are complete.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/meAmitPatil/calendly-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server