Skip to main content
Glama

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

calendly_list_event_types

Lista tipos de evento ativos, com URI, slug, duração, URL pública e perguntas do formulário

calendly_list_available_slots

Horários disponíveis em um intervalo de datas (máx. 7 dias), em UTC e horário de Brasília

calendly_schedule

Agenda uma reunião para um convidado via Scheduling API

calendly_cancel

Cancela um evento pelo UUID, com motivo registrado

calendly_get_event

Detalhes completos de um evento: status, link Zoom e dados dos convidados

calendly_create_scheduling_link

Link de agendamento single-use para um tipo de evento existente

calendly_create_one_off_link

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)

  1. Gere um Personal Access Token: calendly.com/integrations/api_webhooksPersonal access tokensGenerate new token (nome sugerido: claude-mcp; o valor é exibido uma única vez).

  2. Clone e instale:

    git clone https://github.com/ericlucianoferreira/calendly-mcp.git
    cd calendly-mcp
    npm install
  3. Registre no Claude Code (substitua o caminho e o token):

    claude mcp add calendly --env CALENDLY_TOKEN=<seu-token> -- node /caminho/absoluto/calendly-mcp/index.js

    Ou adicione no ~/.claude.json (dentro de mcpServers):

    "calendly": {
      "command": "node",
      "args": ["/caminho/absoluto/calendly-mcp/index.js"],
      "env": { "CALENDLY_TOKEN": "<seu-token>" }
    }
  4. Reinicie o Claude Code e valide:

    use calendly_list_event_types

    Deve retornar a lista de tipos de evento ativos da sua conta.

Variáveis de ambiente

Variável

Obrigatória

Descrição

CALENDLY_TOKEN

Sim

Personal Access Token do Calendly

Atualização

cd calendly-mcp
git pull

Reinicie 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 tools
calendly_cancelA

Cancela um evento agendado. Requer o UUID do evento (não do invitee).

ParametersJSON Schema
NameRequiredDescriptionDefault
event_uuidYesUUID do evento agendado (última parte da URI, ex: abc123-...)
reasonNoMotivo do cancelamento

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_uuidYesUUID do evento agendado

TDQS

A3.8/5.0
Behavior3/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 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_type_uriYesURI completa do tipo de evento (obtida via calendly_list_event_types)
start_dateYesData de início no formato YYYY-MM-DD (fuso horário de Brasília BRT, UTC-3)
end_dateYesData de fim no formato YYYY-MM-DD. Máximo 7 dias após start_date.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/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 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_type_uriYesURI do tipo de evento (obtida via calendly_list_event_types)
slot_start_isoYesHorá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_nameYesNome completo do convidado
invitee_emailYesE-mail do convidado
invitee_phoneNoTelefone/WhatsApp do convidado (campo "WhatsApp" do formulário)
invitee_companyNoEmpresa do convidado (campo "Nome da Empresa" do formulário)
invitee_notesNoObservações adicionais para o host

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 5 tool updatesv1.0.0
    • First observedcalendly_cancel
    • First observedcalendly_get_event
    • First observedcalendly_list_available_slots
    • First observedcalendly_list_event_types
    • First observedcalendly_schedule

TDQS

A4/5.0
Disambiguation5/5

Each tool serves a distinct purpose: canceling, retrieving details, listing slots, listing event types, and scheduling. No overlap in functionality.

Naming Consistency5/5

All tools follow consistent verb_noun pattern with 'calendly_' prefix (e.g., calendly_cancel, calendly_list_event_types). Clear and predictable.

Tool Count5/5

5 tools cover the essential operations for a scheduling service without being excessive. Well-scoped for the domain.

Completeness4/5

Covers core workflow (list types, check slots, schedule, get details, cancel). Missing update/reschedule capability, but not critical for basic usage.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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/ericlucianoferreira/calendly-mcp'

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