NeetoCal MCP and CLI: let AI tools manage your scheduling

Connect NeetoCal to Claude, ChatGPT, Cursor, Codex, and other AI tools. Ask questions about your schedule, book and reschedule meetings, set up availability, and automate the rest from your terminal.

What is NeetoCal MCP?

NeetoCal MCP lets AI tools like Claude and ChatGPT work with your NeetoCal account. Once it's connected, you can ask your AI assistant about your schedule, find open slots, book a meeting for a client, or move a meeting that no longer works, in the same conversation where you're already working.

MCP stands for Model Context Protocol, an open standard for connecting AI tools to the apps you use. You don't need to know anything about it. You connect once, sign in to NeetoCal, and start asking.

YouTube video placeholderNeetoCal MCP and CLI demo (about 6 minutes)

YouTube walkthrough: connect NeetoCal to Claude, ask a few questions about the schedule, book a meeting from an email, reschedule a booking, then do the same work from the terminal with the CLI.

Your AI tool talks to the NeetoCal MCP server. NeetoCal hosts it, so there's nothing to install or keep updated, and every workspace uses the same address:

https://connect.neetocal.com/mcp/messages

When you connect, you sign in with your NeetoCal account and pick your workspace. The assistant then works as you: it sees only what you can see, and does only what your role allows. It can reach your meetings, bookings, availability, meeting templates, locations, discount codes, packages, automation rules, and team members. You never name a tool; you ask in plain language. The full list is in the NeetoCal MCP tools reference.

NeetoCal also has a command-line tool, the NeetoCal CLI. It reaches the same data as MCP, but runs in your terminal, in scripts, and in scheduled jobs. It's open source, so you can read exactly what it does, change it, and build on it.

Real prompts for real work

These are real prompts for real scheduling work. Copy any of them and try it with Claude, ChatGPT, or another AI tool. For repeatable jobs in automation, we have included CLI examples too.

Ask NeetoCal questions

NeetoCal isn't only something your AI assistant can operate. It's something you can ask questions about. Try these:

Why don't I have any available slots on Thursday?

When is my next meeting with someone from Acme?

How many Product demo meetings did we have last month?

Who on my team has the most open slots tomorrow afternoon?

Which of my meeting types gets booked the most?

How many bookings were cancelled last month?

Which customers have booked more than three meetings with me this year?

What are my busiest days of the week, based on the last three months?

How much time am I spending in meetings each week?

Which meeting types have the highest cancellation rate?

The assistant reads your meetings and bookings and works out the answer. For questions that span thousands of bookings, the CLI is the better fit. See MCP or CLI.

Plan and troubleshoot

Find a time that works for everyone

Find a 45-minute slot next week when Neeraj, Oliver and Sam are all available. Avoid Monday morning and Friday afternoon. Don't book anything yet. Give me the three best options.

The assistant checks each person's open slots, finds the overlap, and suggests options without booking anything.

Find out why nobody can book me

Customers say they can't find any slots with me next week. Check my availability, existing bookings and time off, and tell me what's blocking the calendar.

Instead of clicking through settings, you get a diagnosis: working hours that are too narrow, a date override you forgot, or a week that's already full.

Answer a scheduling question

Can Jane from Acme book a 60-minute Strategy session with me next Wednesday afternoon? Check my availability and meeting settings and tell me what's possible.

The assistant checks the meeting's durations and the open slots first, then tells you what will work. You decide whether to book.

Prepare for tomorrow

Give me my schedule for tomorrow. For each meeting, tell me who I'm meeting, what type of meeting it is, and whether I've met that person before.

Clean up the calendar

Look at my bookings next week. Flag any days where I have more than four meetings or three meetings back to back. Suggest which meetings would be easiest to move, but don't change anything.

Find a customer

Find every booking I've had with anyone from acme.com in the last six months. Tell me who I met, how many times we met, and when we last spoke.

Find repeat cancellations

Look at cancellations from the last 90 days. Which customers have cancelled more than once? Show me their booking history.

Book, move and cancel

Book a meeting straight from an email

A prospect emails asking to meet next Tuesday afternoon. Paste the email into Claude and ask:

Oliver from this email wants a demo next Tuesday afternoon, New York time. Find an open slot on my Product demo meeting and book him in.

The assistant checks the open slots, picks one that fits, and creates the booking with Oliver's name and email from the thread. You don't retype anything.

Screen recording placeholderBooking from an email in Claude

Screen recording: paste email, assistant lists slots, confirms, booking appears in NeetoCal.

Reschedule without the back and forth

Oliver can't make Thursday's demo. Move it to the first open slot on Friday and note that the client had a conflict.

Handle a day off

I need Friday off. Show me everything already booked that day, find the closest available slot for each booking next week, and show me your proposed changes before moving anything.

This takes several steps: reading Friday's bookings, checking slots for each meeting, and rescheduling only after you approve.

Block time off

I'm on leave October 20 and 21. Block both days in my working hours.

Cancel every booking for someone who left

Jane from Acme has left the company. Cancel all of her upcoming bookings with the reason "Contact no longer at Acme".

Record an offline payment

Jane paid for her coaching session in cash. Record the payment against her booking tomorrow.

Set things up

Create availability from natural language

Make me available Monday through Thursday from 10 AM to 5 PM, but keep 12:30 PM to 1:30 PM free for lunch.

The assistant turns that sentence into your weekly working hours, with the lunch break left out.

Set up a consulting call

I'm starting 30-minute consulting calls. Create the meeting, make it available Tuesday and Thursday afternoons, and use Google Meet.

You get a ready-to-share meeting with its own hours and location.

Image placeholderNew meeting created by the assistant

Screenshot of the Consulting call meeting in NeetoCal after the prompt above.

Set up a meeting with several lengths

Create a 45-minute meeting called Customer onboarding, hosted by me, on Google Meet. Also offer 30 and 60 minute options.

Send a VIP a one-off link

Create a one-off link for my Customer onboarding meeting that I can send to our new enterprise customer.

Launch a promotion

Create a discount code LAUNCH25 for 25% off my Strategy session meeting. It should expire on November 30.

Bring a new teammate on board

Add priya@example.com and sam@example.com to our NeetoCal workspace as Standard members.

Automate with the CLI

Why have a CLI when MCP exists? Because some jobs shouldn't need an AI at all. These run on a schedule, with nothing but the neetocal binary and the tools you already use, such as jq, curl, and your cloud CLI. No model account, no cost per run, and the same result every time.

Get your agenda every morning

# Every weekday at 8am
0 8 * * 1-5 neetocal bookings list --host-email sam@example.com --type upcoming --sorting-key starts_at --sorting-order asc --json | jq -r '.data[] | "\(.starts_at)  \(.name)  \(.meeting.name)"' > ~/agenda.txt

Back up every booking nightly

Export every booking as JSON and save it to your backup bucket.

for type in upcoming past cancelled; do
  page=1
  while :; do
    out=$(neetocal bookings list --type "$type" --page "$page" --page-size 100 --json)
    echo "$out" | jq -c '.data[]'
    [ "$(echo "$out" | jq '.pagination.total_pages')" -le "$page" ] && break
    page=$((page + 1))
  done
done > bookings.jsonl

aws s3 cp bookings.jsonl "s3://your-backup-bucket/neetocal/$(date +%F).jsonl"

Send today's meetings to your CRM

Every night, push today's completed bookings into your internal CRM.

neetocal bookings list --type past --sorting-key starts_at --sorting-order desc --page-size 100 --json \
  | jq -c --arg today "$(date -u +%F)" '.data[] | select(.starts_at | startswith($today))' \
  | while read -r booking; do
      curl -s -X POST -H "Content-Type: application/json" -d "$booking" https://crm.example.com/api/meetings
    done

Watch for cancellations

Every hour, post new cancellations to your operations channel.

touch cancelled-seen.txt
neetocal bookings list --type cancelled --page-size 100 --json | jq -r '.data[].sid' | sort > cancelled-now.txt

comm -13 cancelled-seen.txt cancelled-now.txt | while read -r sid; do
  curl -s -X POST -H "Content-Type: application/json" \
    -d "{\"text\": \"NeetoCal booking $sid was cancelled\"}" "$SLACK_WEBHOOK_URL"
done

mv cancelled-now.txt cancelled-seen.txt

Weekly utilization report

Every Monday, total the hours each host spent in meetings last week and write a CSV.

start=$(date -v-7d +%F)   # on Linux: date -d "7 days ago" +%F
today=$(date +%F)

neetocal bookings list --type past --sorting-key starts_at --sorting-order desc --page-size 100 --json \
  | jq -r --arg start "$start" --arg today "$today" '
      def ts: sub("\\.[0-9]+Z$"; "Z") | fromdate;
      [.data[] | select(.starts_at >= $start and .starts_at < $today)]
      | group_by(.host_email)[]
      | [.[0].host_email, (map((.ends_at | ts) - (.starts_at | ts)) | add / 3600)]
      | @csv' > "utilization-$start.csv"

For teams with more than 100 meetings a week, add the paging loop from the backup example.

Export all past bookings to a spreadsheet

page=1
while :; do
  out=$(neetocal bookings list --type past --page "$page" --page-size 100 --json)
  echo "$out" | jq -r '.data[] | [.starts_at, .name, .email, .meeting.name, .status] | @csv'
  [ "$(echo "$out" | jq '.pagination.total_pages')" -le "$page" ] && break
  page=$((page + 1))
done > past-bookings.csv

Cancel a batch of bookings in one go

A client pauses their engagement and every upcoming session with them has to go.

neetocal bookings list --client-email jane@acme.com --type upcoming --json \
  | jq -r '.data[].sid' \
  | while read -r sid; do
      neetocal bookings update "$sid" --status cancelled --cancel-reason "Engagement paused"
    done

Set up a new employee

When someone joins, add them to NeetoCal and give them a standard intro call, straight from your onboarding script.

neetocal team-members create --emails oliver@example.com --organization-role Standard

neetocal meetings create \
  --name "Intro call with Oliver" --slug oliver-intro \
  --hosts oliver@example.com --kind one_on_one \
  --spot google_meet --duration 30

Let a coding agent build it for you

You don't have to write these scripts yourself. Claude Code, Codex, or another coding agent can write the automation and use the open-source NeetoCal CLI to work with your account. Run neetocal setup claude (or setup codex, setup cursor) once, then ask:

Every weekday at 5 PM, use the NeetoCal CLI to get tomorrow's bookings and create a Markdown agenda. Write the script, test it, and set up the cron job.

Using the NeetoCal CLI, find every booking from acme.com in the last quarter and write a script that exports them to CSV every Monday.

You get the convenience of a chat, and the result is a script you can read, run, and commit.

Screen recording placeholderClaude Code building a NeetoCal automation

Terminal recording: the 5 PM agenda prompt, Claude Code running neetocal commands, writing the script, and adding the cron job.

MCP or CLI: which should you use?

Both reach the same meetings, bookings, and availability. Neither can do more than the other. Pick based on how the work reaches NeetoCal.

Use MCP when:

  • The details are in your chat. An email, a message, or a pasted note becomes a booking with no retyping.
  • You haven't decided the steps yet. "Someone double-booked me on Thursday, sort it out" means looking at what's there and choosing.
  • You're asking a question. "Why can't anyone book me next week?" needs someone to look around and explain.
  • You don't use a terminal. NeetoCal hosts the server. There's nothing to install.

Use the CLI when:

  • No AI should be in the loop. A cron job or CI step runs the CLI with nothing but the binary. No model account, no cost per run.
  • The output feeds another program. The CLI prints raw JSON or a bare ID for jq, a spreadsheet, or your own script.
  • You're working through thousands of records. The CLI pages through everything unattended.
  • The run has to be repeatable. A command records exactly what ran and does the same thing every time.

You can also have both. With neetocal setup claude, your AI assistant drives the CLI for you, so a plain-language request still ends in a command you can read and reuse.

Connect NeetoCal to your AI tool

Claude

  1. Open NeetoCal in the Claude directory and click Connect to Claude.
  2. Sign in to NeetoCal and choose your workspace and permissions.

This works in Claude on the web, desktop, and mobile. On a Claude Team or Enterprise plan, an admin may need to turn on NeetoCal under Organization settings, then Connectors.

Screen recording placeholderConnecting NeetoCal to Claude

Screen recording of the two steps above, ending with a first prompt.

ChatGPT

  1. In ChatGPT, open Settings, then Security and login, and turn on Developer mode.
  2. Go to chatgpt.com/plugins and click +.
  3. Name it NeetoCal, set the connection to Server URL, and paste https://connect.neetocal.com/mcp/messages.
  4. Leave authentication on OAuth, accept the notice, and click Create. Then sign in to NeetoCal.

Claude Code

claude mcp add --transport http neetocal https://connect.neetocal.com/mcp/messages

Then start Claude Code, run /mcp, pick neetocal, and sign in.

Cursor, Codex, VS Code, Windsurf, and Gemini CLI

Each of these connects to the same server address. The NeetoCal MCP setup guide has the exact configuration for each one.

To check the connection, ask your assistant: "List my upcoming NeetoCal bookings."

Install the NeetoCal CLI

macOS with Homebrew:

brew install neetozone/tap/neetocal

macOS or Linux:

curl -fsSL https://neeto-downloads.s3.amazonaws.com/cli/NeetoCal/latest/install.sh | sh

Windows (PowerShell):

irm https://neeto-downloads.s3.amazonaws.com/cli/NeetoCal/latest/install.ps1 | iex

Then sign in. This opens your browser, and there's no API key to manage:

neetocal login --subdomain your-workspace

To teach your AI coding assistant how to use the CLI, run one of these from your project folder:

neetocal setup claude      # Claude Code
neetocal setup cursor      # Cursor
neetocal setup codex       # Codex
neetocal setup copilot     # GitHub Copilot
neetocal setup gemini      # Gemini CLI
neetocal setup windsurf    # Windsurf

Every command supports --json for scripts and --toon, a compact format that uses fewer tokens when an AI tool reads the output. See the NeetoCal CLI reference for every command.

Permissions and safety

  • Your assistant works as you. When you sign in with NeetoCal, it can see and change only what your role allows.
  • You choose the access. Read is always on. Create and update, and Delete, are separate choices. Leave them off for a read-only connection.
  • Deletes are careful. Deleting a meeting that has bookings keeps its history, and removing a team member deactivates them.
  • You can disconnect anytime. Remove the NeetoCal connector from your AI tool and its access ends.

MCP actions change your live workspace. A good habit is to ask your assistant to show you its plan before it books, moves, or cancels anything, as several prompts above do.

Open source

The NeetoCal CLI is open source on GitHub. You can read every command, see exactly what it sends to NeetoCal, and adapt it to your own workflows. It's written in Go and runs on macOS, Linux, and Windows.

The CLI is built on neeto-cli-commons, the shared foundation behind every Neeto CLI, so what you learn in one works the same way in the others.

Found a bug or want a new command? Open an issue or a pull request.

Frequently asked questions

Do I need to know what MCP is?

No. Connect NeetoCal to your AI tool once, sign in, and ask in plain language.

Can ChatGPT manage my NeetoCal bookings?

Yes. Connect ChatGPT to the NeetoCal MCP server and it can look up bookings, check availability, create and reschedule bookings, and do other NeetoCal actions your permissions allow. Today you add NeetoCal to ChatGPT as a custom connector in Developer mode. See Connect NeetoCal to your AI tool.

Can Claude manage my NeetoCal calendar?

Yes. Connect NeetoCal from the Claude directory and you can ask Claude to check availability, find bookings, schedule or reschedule meetings, and do other supported NeetoCal actions in plain language.

Can I use NeetoCal with Claude Code?

Yes, in two ways. Add the NeetoCal MCP server with claude mcp add, or run neetocal setup claude so Claude Code can drive the NeetoCal CLI. You can use both.

Can I use NeetoCal MCP with Cursor or Codex?

Yes. Cursor, Codex, VS Code with GitHub Copilot, Windsurf, and Gemini CLI all connect to the same NeetoCal MCP server. The setup guide has the configuration for each.

Which AI tools work with NeetoCal?

Claude, ChatGPT, Claude Code, Cursor, Codex, VS Code with GitHub Copilot, Windsurf, and Gemini CLI connect to the MCP server. The CLI works with any AI coding assistant that can run terminal commands.

Does NeetoCal MCP require an API key?

No. You sign in with your NeetoCal account and approve access, so there's no key to copy or rotate. Developer tools such as Claude Code, Cursor, and Codex can use a NeetoCal API key instead if you prefer, but a key reaches the whole workspace rather than acting as you.

Can NeetoCal MCP create and cancel bookings?

Yes. With the Create and update permission, your assistant can create bookings, reschedule them, cancel them with a reason, and approve or reject bookings.

Can I give AI read-only access to NeetoCal?

Yes. Read access is always on, while Create and update, and Delete, are separate permissions. Leave them unchecked if you want your AI assistant to look at NeetoCal without changing anything.

Can I automate NeetoCal without using AI?

Yes. The NeetoCal CLI works directly from your terminal, shell scripts, cron jobs, and CI workflows. You don't need Claude, ChatGPT, or another AI service to use it.

Is the NeetoCal CLI open source?

Yes. It's on GitHub, and you can use it, read it, and change it.

Where is the NeetoCal MCP server hosted?

NeetoCal hosts the MCP server at https://connect.neetocal.com/mcp/messages. You don't need to download or run a server yourself.

Does NeetoCal MCP work on the free plan?

Yes. The MCP server and the CLI are included in every NeetoCal plan, including the free plan.

Can the AI see my whole workspace?

When you sign in with NeetoCal, it sees only what you can see. It acts with your role, not as an admin.

Di adiós a los dolores de cabeza por programación — ¡comienza ahora!