Two root causes behind AI scheduling mistakes: missing find_free_time calls and broken timezone handling. Includes a reusable prompt pattern that prevents both.
AI agents double-book calendars for two reasons: they do not check for conflicts before creating events, and they get timezone math wrong. Both problems are solvable with the right tools and prompts. This post explains exactly what goes wrong and how to fix it.
This is the most common failure. You ask an agent to schedule a meeting and it calls create_event directly. No conflict check. If there is already something on your calendar at that time, you now have two events.
It happens because language models are optimized to complete tasks, and "create a meeting at 2pm Tuesday" looks like a task with a clear completion state. The agent completes it. The issue is that "create a meeting" should really mean "find a time where I have no conflicts and then create a meeting."
Say you tell an agent: "Schedule a call at 3pm tomorrow." The agent creates an event at 3pm. But 3pm in which timezone? The model may default to UTC, or to its training data's most common timezone, or it may make an assumption based on context clues and get it wrong.
The result: you meant 3pm Pacific, the agent created 3pm UTC (which is 7am or 8am Pacific depending on DST), and now you have a calendar event showing up at the wrong time or overlapping something else.
This gets worse with recurring events, all-day events that span timezone boundaries, and any time you are working across multiple calendars in different geographic regions.
If the agent only has access to one calendar, it cannot check for conflicts on another. If you have a personal Google Calendar and a work Google Calendar in different accounts, an agent with access to only one of them will happily schedule on top of something on the other.
A properly equipped calendar agent should use find_free_time before create_event. This is a distinct MCP tool that checks existing events and returns slots that are actually open. It is not the same as listing events and hoping the agent reasons correctly about gaps.
CalendarMCP includes find_free_time as a first-class tool. Here is what a correct scheduling prompt looks like:
Schedule a 45-minute product review meeting next Tuesday or Wednesday morning
(9am-12pm Pacific). Before creating anything, use find_free_time to confirm
there is an open slot. If there are multiple options, suggest them to me first
rather than creating automatically.This prompt forces the agent to:
find_free_time with the correct parametersDo not let the agent guess. Put the timezone in every scheduling request:
# Instead of:
Schedule a call at 3pm tomorrow
# Do this:
Schedule a call at 3pm Pacific (America/Los_Angeles) tomorrowThe IANA timezone name (America/Los_Angeles) is more reliable than abbreviations like PST or PT, because abbreviations are ambiguous and models sometimes interpret them incorrectly.
If you have multiple Google accounts or multiple calendars in the same account, make sure the MCP server has access to all of them. With CalendarMCP, you can connect multiple Google accounts under one API key and grant per-calendar read or write access.
Then in your prompt: "Check all my calendars for conflicts, not just the primary one."
Here is a reusable prompt pattern that prevents the most common failure modes:
I need to schedule [event description] for [duration].
Rules:
- Check ALL my connected calendars for conflicts, not just the primary one
- Use find_free_time to confirm the slot is open before creating anything
- All times are in [Your/Timezone, e.g. America/Los_Angeles] unless I say otherwise
- If multiple slots are available, list them and wait for my confirmation before creating
- If the requested time is already occupied, tell me what is there and suggest alternatives
- Never create recurring events without explicitly confirming the recurrence pattern with me first
Time preferences: [your preferences, e.g. "weekday mornings 9-12, avoid Fridays"]Keep this somewhere accessible and paste it when scheduling. The overhead is about ten seconds per scheduling request in exchange for never having a double-booking.
Not every calendar MCP server has a find_free_time tool. Some only offer list, create, update, delete. With those, you are relying on the model to reason correctly about gaps from a list of events, which is slower and more error-prone.
A dedicated find_free_time tool is faster (one API call vs N list calls), more reliable (the logic runs server-side, not in the model), and works correctly across multiple calendars in a single query.
If your current setup does not have it, that is the first thing to fix.
CalendarMCP's find_free_time tool covers all connected calendars in one call, handles timezone-aware date math server-side, and returns results in a format that is easy for models to reason about. Set it up at calendarmcp.ai.
Connect your Google Calendar to Claude and any MCP client in about two minutes.
Connect Google Calendar