calendly-mcp
This server integrates with the Calendly API v2, enabling Claude to manage scheduling without going through Calendly's public forms.
List event types: Retrieve all active event types, including URI, slug, duration, public URL, and form questions.
Check available slots: Find available time slots for a specific event type within a date range (max 7 days), returned in UTC.
Schedule a meeting: Book a meeting for a guest by providing their name, email, event type URI, and preferred slot. Supports additional form fields (WhatsApp, company, notes) and falls back to a pre-filled URL if direct API scheduling fails.
Cancel an event: Cancel a scheduled event by its UUID, with an optional cancellation reason.
Get event details: Fetch full details of a scheduled event, including status, Zoom link, and invitee/guest data.
Create single-use scheduling link: Generate a one-time booking link for an existing event type.
Create one-off meeting link: Create a custom ad-hoc meeting with a specified name, duration (15/30/60/90 min), and custom dates, providing a single-use link.
Allows managing Calendly events: listing event types and available slots, scheduling and canceling events, and retrieving event details including Zoom links and guest info.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@calendly-mcpschedule a 30-minute call with Bob next Monday at 10 AM"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
calendly-mcp
MCP server para integração com Calendly API v2. Permite que qualquer instância do Claude agende, consulte e cancele reuniões no Calendly — e gere links de agendamento single-use — sem passar pelo formulário público.
→ Como funciona o Calendly MCP — a página do projeto, com o sistema explicado visualmente.
Open source, criado por Eric Luciano na Mentoria Automações Inteligentes (Expert Integrado).
O servidor se identifica no handshake MCP com uma linha de procedência; para desativar (ex.: white-label), defina EXPERT_NO_PROVENANCE=1 no ambiente.
Tools disponíveis
Tool | Descrição |
| Lista tipos de evento ativos, com URI, slug, duração, URL pública e perguntas do formulário |
| Horários disponíveis em um intervalo de datas (máx. 7 dias), em UTC e horário de Brasília |
| Agenda uma reunião para um convidado via Scheduling API |
| Cancela um evento pelo UUID, com motivo registrado |
| Detalhes completos de um evento: status, link Zoom e dados dos convidados |
| Link de agendamento single-use para um tipo de evento existente |
| Reunião avulsa com nome, duração (15/30/60/90 min) e datas customizadas + link single-use |
Sobre calendly_schedule
A ferramenta agenda direto pela Scheduling API do Calendly (POST /invitees), preenchendo os campos do formulário (WhatsApp, empresa, observações). Se a API recusar o agendamento direto, retorna uma URL pré-preenchida com todos os dados do convidado — abra no navegador (ou envie ao convidado) e confirme em um clique.
Related MCP server: Google Calendar MCP Server
Instalação
Pré-requisitos
Claude Code instalado
Node.js 18+ e git
Conta Calendly Standard ou superior (Standard já libera a API v2)
Setup assistido (recomendado)
Copie o prompt abaixo e cole em uma sessão do Claude Code. Ele conduz o processo inteiro — inclusive a geração do seu Personal Access Token no Calendly, navegando pelo browser por você (você só faz o login).
Instale e configure o Calendly MCP (https://github.com/ericlucianoferreira/calendly-mcp) nesta máquina, conduzindo o processo inteiro comigo, etapa por etapa. Regras: nunca me peça senha ou código de verificação no chat; segredos só podem existir em arquivo de configuração local ou variável de ambiente, nunca no chat nem em commit; não declare nada pronto sem validar com uma chamada real.
1. PRÉ-REQUISITOS
- Verifique Node.js 18+ (node --version) e git. Se faltar algo, me oriente a instalar antes de continuar.
- Clone https://github.com/ericlucianoferreira/calendly-mcp.git em uma pasta local definitiva (fora de diretórios temporários), rode npm install e guarde o caminho absoluto do index.js.
- Confirme comigo que minha conta Calendly é Standard ou superior (plano que libera a API v2).
2. TOKEN DO CALENDLY (etapa de navegador)
O servidor autentica com um Personal Access Token, gerado em: calendly.com → Integrations & apps → API & webhooks → Personal access tokens (URL direta: https://calendly.com/integrations/api_webhooks).
Antes de me mandar fazer isso manualmente, pergunte com botões (AskUserQuestion): "Essa etapa é no navegador. Quer que eu faça pra você?" com estas opções:
a) "Faz pra mim (Playwright)" — opção DEFAULT. Se o Playwright MCP não estiver disponível, instale com: claude mcp add playwright -- npx -y @playwright/mcp@latest — e me avise se for preciso reiniciar a sessão pra ele conectar. Depois: abra https://calendly.com/login, espere EU fazer o login sozinho, navegue até Personal access tokens, gere um token com o nome "claude-mcp" e copie o valor exibido na tela direto pra configuração do passo 3 — sem repetir o valor no chat.
b) "Faz pra mim (Chrome)" — se eu já uso a extensão Claude in Chrome, siga o mesmo roteiro usando meu Chrome, que já está logado.
c) "Prefiro fazer manualmente" — me passe o passo a passo numerado e prepare a configuração do passo 3 com o valor vazio, me apontando o arquivo e o campo exatos onde devo colar o token (não pedir pra colar no chat).
3. REGISTRO NO CLAUDE CODE
Registre o servidor com a env var correta. Preferência: escreva a configuração direto no arquivo (o token não passa pelo chat) — entrada "calendly" em mcpServers no ~/.claude.json (ou .mcp.json do projeto), com command "node", args ["<caminho-absoluto>/index.js"] e env {"CALENDLY_TOKEN": "<token>"}. Alternativa por CLI: claude mcp add calendly --env CALENDLY_TOKEN=<token> -- node <caminho-absoluto>/index.js. Me explique onde a configuração ficou salva.
4. VALIDAÇÃO REAL (antes de declarar pronto)
Valide o token com uma chamada real à API v2, lendo o valor do arquivo de configuração sem nunca imprimi-lo: liste os tipos de evento (GET https://api.calendly.com/event_types) e me mostre só nomes e durações. Se vier 401, o token está errado — volte à etapa 2.
5. TESTE E2E E RESUMO
Me peça pra reiniciar o Claude Code (pra o MCP conectar) e, na nova sessão, rode o teste de ponta a ponta: calendly_list_event_types e depois calendly_list_available_slots de um tipo de evento real nos próximos 7 dias. Termine com um resumo: o que foi instalado, onde o token está salvo, quais as 7 tools disponíveis e um exemplo de pedido que já posso fazer ("gera um link de 30 minutos pra semana que vem").Durante a etapa de navegador, o login é sempre seu: o Claude abre a página e espera você entrar na conta. O token vai direto para a configuração local da sua máquina.
Setup manual (resumo)
Gere um Personal Access Token: calendly.com/integrations/api_webhooks → Personal access tokens → Generate new token (nome sugerido:
claude-mcp; o valor é exibido uma única vez).Clone e instale:
git clone https://github.com/ericlucianoferreira/calendly-mcp.git cd calendly-mcp npm installRegistre no Claude Code (substitua o caminho e o token):
claude mcp add calendly --env CALENDLY_TOKEN=<seu-token> -- node /caminho/absoluto/calendly-mcp/index.jsOu adicione no
~/.claude.json(dentro demcpServers):"calendly": { "command": "node", "args": ["/caminho/absoluto/calendly-mcp/index.js"], "env": { "CALENDLY_TOKEN": "<seu-token>" } }Reinicie o Claude Code e valide:
use calendly_list_event_typesDeve retornar a lista de tipos de evento ativos da sua conta.
Variáveis de ambiente
Variável | Obrigatória | Descrição |
| Sim | Personal Access Token do Calendly |
Atualização
cd calendly-mcp
git pullReinicie o Claude Code em seguida para reconectar o MCP.
Segurança
O token fica somente na configuração local (
~/.claude.json/.mcp.json) ou em variável de ambiente — nunca em commit, chat ou log.Se o valor vazar em texto plano, revogue o token no Calendly e gere outro.
Licença
MIT
Available Tools
5 toolscalendly_cancelA
Cancela um evento agendado. Requer o UUID do evento (não do invitee).
| Name | Required | Description | Default |
|---|---|---|---|
| event_uuid | Yes | UUID do evento agendado (última parte da URI, ex: abc123-...) | |
| reason | No | Motivo do cancelamento |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description bears full responsibility for behavioral disclosure. It states the tool cancels (destructive) and requires event UUID, but omits details on reversibility, notifications, side effects, or error conditions. Minimal but adequate for a basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no filler, and front-loaded with the primary action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and the action's simplicity, the description is adequate but lacks information on return values (success/error) and whether cancellation triggers any automated actions. It meets minimum viability for a straightforward cancellation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 applies. The description adds value by clarifying that the UUID must be the event's (not invitee's), which is not explicit in the schema description. This distinction enhances correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it cancels a scheduled event and specifies the required parameter (event UUID), differentiating it from similar tools that might use invitee UUID. However, it does not explicitly label the action as destructive or irreversible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a key requirement (use event UUID not invitee UUID) which helps avoid misuse, but does not offer explicit guidance on when to use this tool versus siblings (e.g., after scheduling). The context is clear but lacks exclusionary language.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendly_get_eventA
Retorna detalhes completos de um evento agendado: horário, status, link Zoom e dados do convidado.
| Name | Required | Description | Default |
|---|---|---|---|
| event_uuid | Yes | UUID do evento agendado |
TDQS
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 operation by saying 'returns details,' but does not explicitly state idempotency, authentication needs, or error behavior. The listed fields are useful but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key information. Every word adds value; no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter get tool with no output schema, the description adequately lists the main return fields. Could be improved by mentioning possible error states, but overall meets the need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter (event_uuid) described clearly. The description adds no further meaning beyond the schema, so it is adequate but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns complete details of a scheduled event, listing specific fields (time, status, Zoom link, guest data). It is easily distinguishable from sibling tools like calendly_cancel or calendly_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The purpose implies it is for retrieving event details, but there is no mention of when not to use it or prerequisites (e.g., needing the event UUID from a previous search).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendly_list_available_slotsA
Lista os horários disponíveis para um tipo de evento em um intervalo de datas. Máximo 7 dias por chamada. Retorna horários em UTC.
| Name | Required | Description | Default |
|---|---|---|---|
| event_type_uri | Yes | URI completa do tipo de evento (obtida via calendly_list_event_types) | |
| start_date | Yes | Data de início no formato YYYY-MM-DD (fuso horário de Brasília BRT, UTC-3) | |
| end_date | Yes | Data de fim no formato YYYY-MM-DD. Máximo 7 dias após start_date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, so the description must carry the full burden. It adds the behavior of a 7-day maximum and UTC output, but this information partially duplicates the schema. It omits whether the operation is read-only, authentication needs, or result structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, front-loaded with purpose, and every word adds value. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While it covers the core functionality and a key constraint, it lacks details about output format (e.g., list of start times or intervals) and error behavior. Without an output schema, the description should provide more context about the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the tool description adds no new parameter-level insights. It only reiterates the 7-day limit already present in the end_date schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists available slots for a given event type in a date range, with a maximum 7-day window and UTC return. It is distinct from sibling tools like calendly_schedule, which creates events, and calendly_get_event, which retrieves a specific event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when checking availability, but does not explicitly state when to use this tool versus alternatives. No when-not-to-use or prerequisite information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendly_list_event_typesA
Lista os tipos de evento ativos no Calendly (diagnóstico, apresentação, etc.) com URI, slug, duração e URL pública de agendamento.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool returns URI, slug, duration, and public booking URL for active event types. It does not mention pagination, rate limits, or authentication, but for a simple list with no parameters, it is reasonably transparent. The behavior is clear: a read-only retrieval without 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the verb 'Lista', and conveys the essential information without any fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is complete. It explains what is listed and which fields are returned. No additional output schema exists, but the description suffices. The sibling tools are related but distinct, and the description does not need to cover all edge cases for this straightforward list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no parameters (0 params) and schema description coverage is 100% (empty schema). Baseline per rules is 4. The description adds meaning by specifying the returned fields (URI, slug, duration, public booking URL) that the schema alone does not provide, though no parameters exist to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists active event types with specific attributes (URI, slug, duration, public booking URL). It uses a specific verb 'Lista' and resource 'tipos de evento', and gives examples (diagnóstico, apresentação). This differentiates it from sibling tools like calendly_get_event (single event) and calendly_list_available_slots (slots, not types).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: use when needing a list of active event types and their details. However, no explicit guidance on when not to use it or how it compares to siblings (e.g., when to use calendly_get_event instead). The description lacks statements of preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendly_scheduleA
Agenda uma reunião no Calendly para um convidado via Scheduling API. Se o agendamento direto falhar, retorna URL pré-preenchida para confirmação manual.
| Name | Required | Description | Default |
|---|---|---|---|
| event_type_uri | Yes | URI do tipo de evento (obtida via calendly_list_event_types) | |
| slot_start_iso | Yes | Horário de início do slot. Aceita ISO 8601 com offset (-03:00) ou UTC (Z). Exemplo: 2026-05-28T09:00:00-03:00 | |
| invitee_name | Yes | Nome completo do convidado | |
| invitee_email | Yes | E-mail do convidado | |
| invitee_phone | No | Telefone/WhatsApp do convidado (campo "WhatsApp" do formulário) | |
| invitee_company | No | Empresa do convidado (campo "Nome da Empresa" do formulário) | |
| invitee_notes | No | Observações adicionais para o host |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: fallback to a pre-filled URL on failure. However, it does not explain the success response, side effects, permission requirements, or potential errors. Given no annotations, more detail would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main action, and includes a critical fallback condition. Every word adds value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main action and fallback, but missing details about the success return value, error responses, and confirmation behavior. For a tool with no output schema, this information is important for the agent to handle the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 7 parameters, so the description does not need to add extra meaning. It adds no new information beyond the schema, but the schema already suffices. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it schedules a meeting via the Scheduling API and mentions a fallback behavior (returning a pre-filled URL on failure). This distinguishes it from sibling tools like calendly_cancel or calendly_list_available_slots, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (scheduling) but does not explicitly compare with siblings or state when not to use it. No guidance on prerequisites or alternative tools is provided, leaving some ambiguity for the AI agent.
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.
5 tool updates
v1.0.0- First observed
calendly_cancel - First observed
calendly_get_event - First observed
calendly_list_available_slots - First observed
calendly_list_event_types - First observed
calendly_schedule
TDQS
Each tool serves a distinct purpose: canceling, retrieving details, listing slots, listing event types, and scheduling. No overlap in functionality.
All tools follow consistent verb_noun pattern with 'calendly_' prefix (e.g., calendly_cancel, calendly_list_event_types). Clear and predictable.
5 tools cover the essential operations for a scheduling service without being excessive. Well-scoped for the domain.
Covers core workflow (list types, check slots, schedule, get details, cancel). Missing update/reschedule capability, but not critical for basic usage.
Maintenance
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
AI-native scheduler that lives in Claude. Describe meetings in plain English; Heldly does the rest.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Calendly MCP Pack — wraps the Calendly API v2 for scheduling data.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables Claude to interact with Google Calendar through natural language, providing the ability to view, create, update, and delete calendar events with persistent OAuth2 authentication.20MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with Google Calendar through OAuth authentication, allowing users to list events, create and manage meetings, update or delete calendar entries, and find available time slots using natural language.72MIT
- AlicenseAqualityCmaintenanceEnables interaction with Calendly to manage event types, scheduled events, and invitees. It provides tools for checking user availability and canceling appointments directly through the Calendly API.7MIT
- FlicenseNot gradedqualityCmaintenanceExposes personal Calendly account as MCP tools, allowing users to manage events, view availability, and handle bookings through natural language.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ericlucianoferreira/calendly-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server