Calendly MCP Server & CLI
A free, open source Calendly MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents find open times, book and cancel meetings, and read meeting recaps.
0.0(0 ratings)- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
claude mcp add calendly \
-e CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN \
-- npx -y @thenavidm/calendly-mcp-cli@latest - 2
In Claude Code, type /mcp. Calendly should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
claude mcp add calendly -e CALENDLY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" -- npx -y @thenavidm/calendly-mcp-cli@latest - 2
In Claude Code, type /mcp. Calendly should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
claude mcp add calendly \
-e CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN \
-- npx -y @thenavidm/calendly-mcp-cli@latest - 2
In Claude Code, type /mcp. Calendly should show as connected.
/mcp
- 1Download the extension
Download the Claude Desktop extension.
- 2
Double-click it, and Claude Desktop installs it.
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
codex mcp add calendly \
--env CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN \
-- npx -y @thenavidm/calendly-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
codex mcp add calendly --env CALENDLY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" -- npx -y @thenavidm/calendly-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
codex mcp add calendly \
--env CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN \
-- npx -y @thenavidm/calendly-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Open Cursor's settings, go to the MCP tab, and click Add new global MCP server.
- 2
Add the server.
Put your own token in place of the example.
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Open the MCP tab again. It should show 66 tools.
- 1
Open the Command Palette and run MCP: Open User Configuration.
- 2
Add the server to that mcp.json.
If the file already has servers, add only this one inside servers. Put your own token in place of the example.
{
"servers": {
"calendly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
}
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
copilot mcp add calendly \
--env CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN \
-- npx -y @thenavidm/calendly-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get calendly
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
copilot mcp add calendly --env CALENDLY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" -- npx -y @thenavidm/calendly-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get calendly
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
copilot mcp add calendly \
--env CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN \
-- npx -y @thenavidm/calendly-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get calendly
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own token in place of the example.
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
%USERPROFILE%\.gemini\settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own token in place of the example.
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own token in place of the example.
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own token in place of the example.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"calendly": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/calendly-mcp-cli@latest"],
"enabled": true,
"environment": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
%USERPROFILE%\.config\opencode\opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own token in place of the example.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"calendly": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/calendly-mcp-cli@latest"],
"enabled": true,
"environment": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own token in place of the example.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"calendly": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/calendly-mcp-cli@latest"],
"enabled": true,
"environment": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
} - 3
Restart OpenCode.
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
openclaw mcp add calendly \
--command npx \
--arg -y \
--arg @thenavidm/calendly-mcp-cli@latest \
--env CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN - 2
Check that it starts and lists its tools.
openclaw mcp doctor calendly --probe
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
openclaw mcp add calendly --command npx --arg -y --arg @thenavidm/calendly-mcp-cli@latest --env CALENDLY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" - 2
Check that it starts and lists its tools.
openclaw mcp doctor calendly --probe
- 1
Add it with a single command in a terminal.
Put your own token in place of the example.
openclaw mcp add calendly \
--command npx \
--arg -y \
--arg @thenavidm/calendly-mcp-cli@latest \
--env CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN - 2
Check that it starts and lists its tools.
openclaw mcp doctor calendly --probe
- 1
In the agent panel, click the … menu, then MCP Servers, Manage MCP Servers and View raw config.
- 2
Add the server to mcp_config.json.
If the file already has servers, add only this one inside mcpServers. Put your own token in place of the example.
{
"mcpServers": {
"calendly": {
"command": "npx",
"args": ["-y", "@thenavidm/calendly-mcp-cli@latest"],
"env": {
"CALENDLY_API_TOKEN": "YOUR_PERSONAL_ACCESS_TOKEN"
}
}
}
}
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own token in place of the example.
mcp_servers:
calendly:
command: "npx"
args: ["-y", "@thenavidm/calendly-mcp-cli@latest"]
env:
CALENDLY_API_TOKEN: "YOUR_PERSONAL_ACCESS_TOKEN"
- 1
Open your Hermes config.
%USERPROFILE%\.hermes\config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own token in place of the example.
mcp_servers:
calendly:
command: "npx"
args: ["-y", "@thenavidm/calendly-mcp-cli@latest"]
env:
CALENDLY_API_TOKEN: "YOUR_PERSONAL_ACCESS_TOKEN"
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own token in place of the example.
mcp_servers:
calendly:
command: "npx"
args: ["-y", "@thenavidm/calendly-mcp-cli@latest"]
env:
CALENDLY_API_TOKEN: "YOUR_PERSONAL_ACCESS_TOKEN"
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.claude/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Claude Code to use calendly-cli.
Running calendly-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.claude\skills\calendly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\calendly-mcp-cli\SKILL.md" "$HOME\.claude\skills\calendly\" - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Claude Code to use calendly-cli.
Running calendly-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.claude/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Claude Code to use calendly-cli.
Running calendly-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.agents/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Codex to use calendly-cli.
Running calendly-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.agents\skills\calendly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\calendly-mcp-cli\SKILL.md" "$HOME\.agents\skills\calendly\" - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Codex to use calendly-cli.
Running calendly-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.agents/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Codex to use calendly-cli.
Running calendly-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Cursor to use calendly-cli.
Running calendly-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Cursor to use calendly-cli.
Running calendly-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Cursor to use calendly-cli.
Running calendly-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask VS Code to use calendly-cli.
Running calendly-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask VS Code to use calendly-cli.
Running calendly-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask VS Code to use calendly-cli.
Running calendly-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.copilot/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Copilot CLI to use calendly-cli.
Running calendly-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.copilot\skills\calendly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\calendly-mcp-cli\SKILL.md" "$HOME\.copilot\skills\calendly\" - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Copilot CLI to use calendly-cli.
Running calendly-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.copilot/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask Copilot CLI to use calendly-cli.
Running calendly-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Gemini CLI to use calendly-cli.
Running calendly-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Gemini CLI to use calendly-cli.
Running calendly-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Gemini CLI to use calendly-cli.
Running calendly-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.config/opencode/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask OpenCode to use calendly-cli.
Running calendly-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\calendly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\calendly-mcp-cli\SKILL.md" "$HOME\.config\opencode\skills\calendly\" - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask OpenCode to use calendly-cli.
Running calendly-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.config/opencode/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask OpenCode to use calendly-cli.
Running calendly-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.openclaw/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask OpenClaw to use calendly-cli.
Running calendly-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.openclaw\skills\calendly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\calendly-mcp-cli\SKILL.md" "$HOME\.openclaw\skills\calendly\" - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask OpenClaw to use calendly-cli.
Running calendly-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/calendly
cp "$(npm root -g)/@thenavidm/calendly-mcp-cli/SKILL.md" ~/.openclaw/skills/calendly/ - 3
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 5
Ask OpenClaw to use calendly-cli.
Running calendly-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Antigravity to use calendly-cli.
Running calendly-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Antigravity to use calendly-cli.
Running calendly-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Antigravity to use calendly-cli.
Running calendly-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Hermes to use calendly-cli.
Running calendly-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Hermes to use calendly-cli.
Running calendly-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
Ask Hermes to use calendly-cli.
Running calendly-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
List every command, then try one.
calendly-cli
calendly-cli get-current-user
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
setx CALENDLY_API_TOKEN "YOUR_PERSONAL_ACCESS_TOKEN" - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
List every command, then try one.
calendly-cli
calendly-cli get-current-user
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/calendly-mcp-cli@latest - 2
Save your Calendly details, so every new session has them.
Put your own token in place of the example.
echo 'export CALENDLY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
calendly-cli doctor - 4
List every command, then try one.
calendly-cli
calendly-cli get-current-user
Needs Node 22 or newer and a Calendly personal access token. Make one in two minutes.
It's free and open source. If it saves you time, star it on GitHub, so more people find it.
This free Calendly MCP server and CLI gives your AI real access to your Calendly account: event types, availability, bookings, contacts, meeting recaps and your organization. It finds open times, books and cancels meetings, manages event types and availability, keeps your contacts, and reads meeting recaps and transcripts.
It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 66 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.
In this guide, I'll show you:
- What the Calendly MCP server & CLI is, and what you can ask it
- How to install it and check that it works
- When to use the MCP server, and when the CLI
- Every tool, and how to keep your account safe
Every tool on this page comes from the server itself, and every cost was measured in Claude Code.
Key takeaways
What is the Calendly MCP server & CLI?
The Calendly MCP server & CLI is a free, open source program that lets AI agents manage your Calendly scheduling for you, in two ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.
You ask in plain language. Your AI picks the right tool, and the server makes the call to Calendly's own API.
The CLI is the same program as commands. calendly-cli list-events runs the same code your AI runs when you ask what's booked this week, whether an agent like Claude Code runs it or you do.
In an AI OS, the layer that connects your AI to your context, your data and your tools, a server like this is how your AI reaches Calendly. I explain how the parts fit together in how to build an AI operating system, and here's how I use AI myself.
What can you ask it?
Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:
Try askingWhat meetings do I have booked this week?
When am I free for a 30-minute call next Tuesday?
Book sam@example.com into my intro call at 3pm Thursday, New York time.
Make a one-time booking link for my coaching call.
Pull the action items from yesterday's meeting recap.
Cancel my 10am meeting on Friday, with a short apology.
The second one shows why this is useful. Your AI reads the real open times for that event type, so it never suggests a slot that's already taken.
It works well next to my Google Workspace MCP server and Kit MCP server, so your AI can check your Google Calendar and email the people who booked in the same chat. Every server I've made is on my MCP servers page.
For your schedule, my free time zone converter and time zone overlap calculator help too. Calendly is one of my side hustle apps, for letting clients book a call from a link.
How to install the Calendly MCP server
Pick your app in the box at the top of this page. Each one is a single command or a pasted block, and they all run through npx, so there's nothing to install first.
Windsurf, Zed and Cline take the same server, though they don't have a tab in the box yet. Follow the box's Cursor tab, and put its block here instead:
| App | Where the block goes |
|---|---|
| Windsurf | In the Cascade panel, open the Actions menu (…) and choose Open MCP config file, then paste the block. |
| Cline | Click the MCP Servers icon in the Cline panel, open the Configure tab, click Configure MCP Servers, and paste the block. |
| Zed | Go to Settings, then AI, then MCP Servers, and choose Add Server, then Add Local Server. Enter the block's command, arguments and variables, and Zed saves them under context_servers. |
Watch out: Calendly shows a new token only once. Copy it as soon as you click Create Token.
Set up your Calendly account
It takes two minutes.
CALENDLY_API_TOKEN in the command for your app, in place of the example.Start with users:read, which the doctor needs, and add only what you'll ask for, like scheduled_events:read for your meetings or availability:read for open times. A token can't gain scopes later, so make a new one when you need more.
Some features depend on your Calendly plan:
| What you want | What Calendly needs |
|---|---|
| Book a meeting for someone | A paid Standard plan or higher |
| Routing forms | Teams or higher |
| Meeting recaps and transcripts | A paid plan |
| Activity log, sent messages and data deletion | Enterprise |
If you've built your own Calendly OAuth app, put its tokens in a private file and point CALENDLY_TOKENS_FILE at it instead. The server refreshes the token in that file on its own.
To keep the token out of your app's config, save it alone in a file only you can read, and point CALENDLY_TOKEN_FILE at that file's full path instead.
Check that it works
Run the doctor with --network. It checks your settings, then reads your Calendly user to prove the token works. It never books, cancels or invites anyone.
npx -y @thenavidm/calendly-mcp-cli doctor --networkWhen every line has a check mark, restart your app and ask it what's booked this week. A 403 on a tool usually means the token lacks that scope, or your plan doesn't include that feature.
In Claude Code, /mcp also shows whether the Calendly server is connected. It's one of the Claude Code commands worth knowing.
Use the Calendly CLI
The CLI is the same 66 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.
Every tool name becomes a command with dashes, so list_events runs as calendly-cli list-events.
npm install -g @thenavidm/calendly-mcp-cli
calendly-cli
calendly-cli get-current-user
calendly-cli list-event-types --user https://api.calendly.com/users/YOUR_USER_ID --count 10
calendly-cli list-event-type-available-times --event-type https://api.calendly.com/event_types/YOUR_EVENT_TYPE_ID --start-time 2026-10-12T00:00:00Z --end-time 2026-10-19T00:00:00Z
calendly-cli list-events --user https://api.calendly.com/users/YOUR_USER_ID --status active --count 20The bare calendly-cli lists every command, calendly-cli which <words> finds the command for a task, and calendly-cli <command> --help shows what a command takes. Bookings, cancellations and every other change need --confirm, the terminal's version of your approval.
calendly-cli install <app> adds the server to Claude Code, Codex, Claude Desktop, Cursor, VS Code or Gemini CLI, in each app's own format.
These are the flags you'll use most:
| Flag | What it does |
|---|---|
--json | Prints JSON |
--compact | Prints the JSON on one line |
--select a,b.c | Keeps only those fields, and a dotted path goes deeper |
--agent | Machine mode: compact JSON, no prompts, and it never confirms anything |
--confirm | Lets a write that asks first go ahead |
--dry-run | Shows what a write would do, without doing it |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | It worked |
| 1 | Something unexpected went wrong |
| 2 | The command was typed wrong, or a write needed --confirm |
| 3 | It wasn't found |
| 4 | Calendly rejected the credentials |
| 5 | Calendly failed or couldn't be reached |
| 7 | You hit a rate limit, so wait and try again |
| 10 | Nothing is set up yet |
MCP server or CLI: which one?
Both are the same program with the same 66 tools. The difference is when your AI pays for them, in the tokens it reads.
- MCP server
- 40,000 tokens
- CLI
- Nothing
- MCP server
- 1,200 tokens
- CLI
- Nothing
- MCP server
- Nothing more, or in Claude Code the tools it picks
- CLI
- 1,400 tokens, once
- MCP server
- 800,000 tokens
- CLI
- 1,400 tokens
- MCP server
- Yes
- CLI
- No, there's no terminal there
- MCP server
- No
- CLI
- Yes
An app that loads every tool up front sends the full list with every message, whether you mention Calendly or not. Claude Code doesn't by default: its tool search sends only the tool names and the server's instructions, and loads a tool's full definition when your AI reaches for it.
The CLI costs nothing until Calendly comes up. Then your agent reads its skill file once and runs the commands it needs. With the skill added, Claude Code also lists its one-line description with every message, about 60 tokens.
When the whole conversation is about Calendly, the gap closes. Then the MCP server is the better experience, because you ask in plain language and your AI never has to look up a command.
How to spend less
In Claude Code, leave tool search on, which it is unless you've set ENABLE_TOOL_SEARCH=false.
Turn the server off when you aren't scheduling. In Claude Code that's the /mcp panel, and every AI app has its own switch. CALENDLY_READ_ONLY=1 cuts it to the 44 reading tools.
Or install the CLI and connect the server later, on the days it earns its place. Every tool stays in reach, and the standing cost drops to nothing.
Every number here was measured on October 5, 2026 in Claude Code 2.1.286 with Claude Opus 5.5. It's the same one-line prompt with and without the server connected, once with tool search off so every tool loads, and once with Claude Code's default. The skill was measured the same way, and other apps and models count tokens a little differently.
Book, cancel and set availability
create_invitee books a real meeting. Calendly sends the calendar invites, notifications and workflows right away, and there's no draft. A link from create_scheduling_link is different, because nobody is booked until someone uses it.
Open times come from list_event_type_available_times, 31 days at a time, and a time can be gone by the moment you book it. Times go in as UTC, and the invitee's time zone only changes how the invite shows the time.
Updating an event type's availability replaces all its rules at once, so your AI reads the current rules first and sends back the full set with your change.
Recaps and transcripts come from Calendly's notetaker, on paid plans. Editing a recap changes its summary and notes, not what was said.
Calendly allows 50 requests a minute per user on the Free plan and 500 on paid plans. Bookings have tighter limits of their own, like 100 a day on paid plans below Enterprise.
Watch out: Cancelling a meeting sends the usual cancellation to everyone on it, and inviting someone to your organization emails them. Both ask first.
Every Calendly tool
The tables below list all 66 tools, grouped by what they're for. Of these, 44 only read, and 22 change something in your Calendly account.
Booked meetings
cancel_event- What it does
- Cancels a booked meeting, with a reason.
- Kind
- Asks first
create_invitee- What it does
- Books a meeting for someone, which sends real calendar invites.
- Kind
- Asks first
create_no_show- What it does
- Marks an invitee as a no-show.
- Kind
- Asks first
delete_no_show- What it does
- Removes a no-show mark.
- Kind
- Asks first
get_no_show- What it does
- Reads a no-show mark.
- Kind
- Reads
get_event- What it does
- Reads one booked meeting.
- Kind
- Reads
get_event_invitee- What it does
- Reads one invitee and their answers.
- Kind
- Reads
list_event_invitees- What it does
- Lists a meeting's invitees.
- Kind
- Reads
list_events- What it does
- Lists your booked meetings, by date, status or invitee.
- Kind
- Reads
Event types and booking links
create_event_type- What it does
- Creates an event type.
- Kind
- Asks first
list_event_types- What it does
- Lists your event types.
- Kind
- Reads
create_one_off_event_type- What it does
- Creates a one-off meeting with its own dates.
- Kind
- Asks first
get_event_type- What it does
- Reads one event type.
- Kind
- Reads
update_event_type- What it does
- Changes an event type.
- Kind
- Asks first
list_event_type_available_times- What it does
- Lists open times for an event type, up to 31 days at a time.
- Kind
- Reads
list_event_type_hosts- What it does
- Lists an event type's hosts.
- Kind
- Reads
list_user_locations- What it does
- Lists the meeting locations you can use, like Zoom or a phone call.
- Kind
- Reads
create_scheduling_link- What it does
- Makes a booking link that works for a set number of bookings.
- Kind
- Asks first
create_share- What it does
- Makes a customized copy of an event type to share.
- Kind
- Asks first
Availability
get_availability_schedule- What it does
- Reads one of your availability schedules.
- Kind
- Reads
list_event_type_availability_schedules- What it does
- Reads an event type's availability rules.
- Kind
- Reads
update_event_type_availability_schedules- What it does
- Replaces an event type's availability rules.
- Kind
- Asks first
list_availability_schedules- What it does
- Lists your availability schedules.
- Kind
- Reads
list_user_busy_times- What it does
- Lists when you're busy, up to 7 days at a time.
- Kind
- Reads
Contacts
create_contact- What it does
- Adds a contact.
- Kind
- Asks first
list_contacts- What it does
- Lists your contacts.
- Kind
- Reads
delete_contact- What it does
- Deletes a contact.
- Kind
- Asks first
get_contact- What it does
- Reads one contact.
- Kind
- Reads
update_contact- What it does
- Changes a contact's details.
- Kind
- Asks first
get_contact_custom_field_definition- What it does
- Reads one custom contact field.
- Kind
- Reads
list_contact_custom_field_definitions- What it does
- Lists your custom contact fields.
- Kind
- Reads
Meeting recaps and transcripts
delete_recap- What it does
- Deletes a meeting recap.
- Kind
- Asks first
get_recap- What it does
- Reads a meeting recap from Calendly's notetaker.
- Kind
- Reads
update_recap- What it does
- Changes a recap's summary, action items or discussion notes.
- Kind
- Asks first
get_transcript- What it does
- Reads a meeting's transcript.
- Kind
- Reads
list_recaps- What it does
- Lists your meeting recaps.
- Kind
- Reads
Your organization, teams and groups
get_group- What it does
- Reads one group.
- Kind
- Reads
get_group_relationship- What it does
- Reads one person's place in a group.
- Kind
- Reads
list_group_relationships- What it does
- Lists who belongs to your groups.
- Kind
- Reads
list_groups- What it does
- Lists your groups.
- Kind
- Reads
get_organization- What it does
- Reads your organization.
- Kind
- Reads
get_organization_invitation- What it does
- Reads one invitation to your organization.
- Kind
- Reads
revoke_organization_invitation- What it does
- Takes back an invitation to your organization.
- Kind
- Asks first
get_organization_membership- What it does
- Reads one member of your organization.
- Kind
- Reads
remove_from_organization- What it does
- Removes someone from your organization.
- Kind
- Asks first
get_team- What it does
- Reads one team.
- Kind
- Reads
invite_to_organization- What it does
- Invites someone to your organization by email.
- Kind
- Asks first
list_organization_invitations- What it does
- Lists your organization's invitations.
- Kind
- Reads
list_organization_memberships- What it does
- Lists your organization's members.
- Kind
- Reads
list_teams- What it does
- Lists your teams.
- Kind
- Reads
Routing forms
get_routing_form- What it does
- Reads one routing form.
- Kind
- Reads
get_routing_form_submission- What it does
- Reads one routing form answer.
- Kind
- Reads
list_routing_form_submissions- What it does
- Lists a routing form's answers.
- Kind
- Reads
list_routing_forms- What it does
- Lists your routing forms.
- Kind
- Reads
Webhooks
create_webhook- What it does
- Adds a webhook that sends booking events to your own URL.
- Kind
- Asks first
list_webhooks- What it does
- Lists your webhooks.
- Kind
- Reads
delete_webhook- What it does
- Deletes a webhook.
- Kind
- Asks first
get_webhook- What it does
- Reads one webhook.
- Kind
- Reads
get_sample_webhook_data- What it does
- Shows what a webhook event looks like.
- Kind
- Reads
Enterprise only
list_activity_log- What it does
- Lists your organization's activity log, on Enterprise.
- Kind
- Reads
delete_invitee_data- What it does
- Deletes everything Calendly holds about given email addresses, on Enterprise.
- Kind
- Asks first
delete_scheduled_event_data- What it does
- Deletes all meeting data in a date range, on Enterprise.
- Kind
- Asks first
list_outgoing_communications- What it does
- Lists the emails and texts Calendly sent for you, on Enterprise.
- Kind
- Reads
Your user and accounts
get_current_user- What it does
- Reads your Calendly user, with the links the other tools need.
- Kind
- Reads
get_user- What it does
- Reads one user.
- Kind
- Reads
list_accounts- What it does
- Lists the accounts you've set up, without their tokens.
- Kind
- Reads
Is the Calendly MCP server safe?
A booking, a cancellation or an invitation reaches real people's calendars and inboxes. So 22 tools ask first: every booking, cancellation and no-show, and every change to an event type, availability, contact, recap, your organization or a webhook. They're the ones marked "Asks first" in the tool tables above.
Reading your meetings, open times and recaps never asks, because it changes nothing.
When your AI calls one of them, the call needs a yes first. Where you use it decides who gives it:
- Claude Code (2.1.246 and later) asks you before every call, in every one of its permission modes.
- An app that can show forms asks you in a form.
- Any other app takes your AI's
confirm: trueas the yes, so tell your AI to check with you first. - An agent with no person to ask needs
CALENDLY_CONFIRM=model, so itsconfirm: truecounts in every app. - In a terminal, you add
--confirmto the command.
If the answer is no, nothing reaches Calendly.
Make it read-only
Set CALENDLY_READ_ONLY=1 and every tool that asks first disappears from the tool list, leaving 44 reading tools. A token with only read scopes does the same at Calendly's end.
Keep a log of every write
Set CALENDLY_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked, with what it was about to do and who approved it.
Watch out: Invitee answers, notes and transcripts are written by other people, and one can try to give your AI orders. Treat them as data, and use CALENDLY_READ_ONLY=1 for an agent working on its own.
Your data
Your requests go straight to Calendly, with no server of ours in between and no tracking. Your token stays in your app's config, your shell or your token file.
Invitees, contacts and transcripts are other people's personal data, so keep what your AI reads out of public places.
To cut access, revoke the token on the API & Webhooks page, and remove the server from your app's config.
Connect more than one Calendly account
Set CALENDLY_ACCOUNTS to a JSON list with a name and a token, a token file or an OAuth tokens file for each account, and CALENDLY_DEFAULT_ACCOUNT to the one that acts when a tool names none. Every tool takes an optional account.
An account never borrows another one's token. Several accounts for one Calendly user still share that user's request limit.
Calendly MCP server settings
Every setting is an environment variable, in your app's config or your shell.
CALENDLY_API_TOKEN- Default
- none
- What it does
- Holds your personal access token
CALENDLY_TOKEN_FILE- Default
- none
- What it does
- Points at a private file holding the token, instead
CALENDLY_ACCESS_TOKEN- Default
- none
- What it does
- Holds an OAuth access token, which the server can't refresh
CALENDLY_TOKENS_FILE- Default
- none
- What it does
- Points at a private file with your OAuth tokens, which the server refreshes
CALENDLY_ACCOUNTS- Default
- none
- What it does
- Lists several accounts, as JSON
CALENDLY_DEFAULT_ACCOUNT- Default
- the first one
- What it does
- Picks the account that acts when a tool names none
CALENDLY_REQUEST_TIMEOUT_MS- Default
30000- What it does
- Gives up on a Calendly request after this many milliseconds
CALENDLY_MIN_REQUEST_INTERVAL_MS- Default
1300- What it does
- Waits this many milliseconds between requests
CALENDLY_MAX_RETRIES- Default
2- What it does
- Retries a rate-limited read this many times, and never a write
CALENDLY_READ_ONLY- Default
- off
- What it does
1hides every tool that changes something
CALENDLY_ALLOW_DESTRUCTIVE- Default
- on
- What it does
0refuses the tools that ask first
CALENDLY_AUDIT_LOG- Default
- none
- What it does
- Names a file that gets one line per attempted write
CALENDLY_SURFACE- Default
full- What it does
searchlists three tools that find, describe and run the rest
CALENDLY_TOOL_TIMEOUT_MS- Default
- none
- What it does
- Gives up on any tool after this many milliseconds
CALENDLY_CONFIRM- Default
human- What it does
modellets your AI'sconfirm: trueapprove on its own, for an agent with no person to ask
CALENDLY_HTTP_PORT- Default
8787- What it does
- Sets the port for
--http
CALENDLY_HTTP_HOST- Default
127.0.0.1- What it does
- Sets the address for
--http, and any other needs a token
CALENDLY_HTTP_TOKEN- Default
- none
- What it does
- Sets the bearer token every
--httprequest needs
CALENDLY_HTTP_ALLOWED_ORIGINS- Default
- none
- What it does
- Lists other websites allowed to call
--http, comma separated
CALENDLY_DEBUG- Default
- off
- What it does
1prints debug lines
Troubleshooting
Run the doctor first. It names the step that failed and the fix.
| What you see | What to do |
|---|---|
| A 403 error | The token lacks that scope, or your plan doesn't include that feature. Make a new token with the scope |
| A time range is refused | Use a future range in UTC, up to 31 days for open times and 7 for busy times |
| A booking is refused | Check the invitee's name, email and time zone, and leave out the location for a round-robin event type |
| A webhook won't save | It needs a public HTTPS address you own, and the read scope for its events |
| Only the first page came back | Add --all-pages, which stops at 1,000 items unless you set more |
| A recap isn't there | Recaps need a paid plan, and a meeting the notetaker recorded |
| "…so it will not run without confirm: true" | That's the safety check working. Approve it when your app asks |
If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.
More free tools for your calendar and clients
Work in Gmail and Google Calendar, or follow up with your email list.
Free tools
FAQs about the Calendly MCP server & CLI
Here are the questions people ask most about the Calendly MCP server and CLI.
The Calendly MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor manage your Calendly scheduling.
It has 66 tools for event types, availability, bookings, contacts, recaps and your organization, and the same tools run as a CLI that agents like Claude Code and Codex use, or that you type yourself.
An MCP server is a standard way to give an AI app real access to a tool, so it can act instead of guessing.
MCP stands for Model Context Protocol, and Claude, Codex, Cursor and many other AI apps speak it.
Every server I've made is on my MCP servers page.
The Calendly CLI is the same program as the Calendly MCP server, run as commands.
AI agents like Claude Code, Codex and OpenCode run them for you, and you can type them in a terminal or a script.
One npm package installs both.
Use the Calendly MCP server in an AI app with no terminal, like Claude Desktop's chat, and the CLI in a terminal, a script or a cron job.
In an AI app that can run commands, like Claude Code, Codex or Cursor, the CLI is the lighter choice, because it costs nothing until it runs.
Yes, the Calendly MCP server is free and open source under the AGPL-3.0-or-later license.
Calendly's API works on every plan, though booking for someone needs a paid plan, and some features need Teams or Enterprise.
Yes, it books a meeting for someone after you approve it, on a paid Standard plan or higher.
The booking sends real calendar invites right away, since there's no draft.
Start with users:read, which the doctor uses, and add only what you'll ask for, like scheduled_events:read for your meetings or availability:read for open times.
A token can't gain scopes later, so make a new one when you need more.
Yes, it reads recaps and transcripts from Calendly's notetaker, on a paid plan, for meetings the notetaker recorded.
Yes, the Calendly MCP server connects as many accounts as you set up in CALENDLY_ACCOUNTS, each with its own token.
Every tool takes an optional account, and an account never borrows another one's token.
To disconnect the Calendly MCP server, revoke its token on the API & Webhooks page, which cuts access right away.
Then remove the server from your AI app's config.
The Calendly MCP server works with any app that speaks MCP.
That includes Claude Code, Claude Desktop, Codex, Cursor, VS Code, Windsurf, Zed, Cline, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Antigravity and Hermes.
I did.
I'm Navid Moazzez, and I made the Calendly MCP server & CLI as one of my free tools on navid.me.
You can read more about me.
The code is on GitHub under the AGPL-3.0-or-later license, and the package is on npm.
More MCP servers & CLIs
Related free tools
Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Read the affiliate disclaimer.
On this page
The most actionable AI newsletter for founders
Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.
No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.
P.S. Sign up now to get free access to my ultimate AI tools guide for creators.
