Guide
Letting an AI book meetings on a calendar you actually keep.
Finding an hour that 4 people can make is the task most worth handing over, and the one most easily got wrong. Here is what an assistant can see, what it can change, which actions email somebody, and the one answer you must never let it round in your favour. It needs a calendar connected, which is a separate step from connecting the mailbox.
- Reading About 13 minutes
- Works on Microsoft 365, Google, or any CalDAV calendar
- Calendar tools Up to 21, metered like the rest
The short version
- It needs a calendar connected: approve calendar access on Microsoft 365, or on any other mailbox sign in to Google or give the address of your calendar server.
- It reads free/busy, not other people's meetings.
- An attendee it can't see comes back as unknown, and must never be read as free.
- Booking your own time emails nobody. Inviting people emails everybody, and says so first.
- A recurring meeting makes it ask which you meant. It won't guess.
The surface
What AI calendar scheduling can actually do
Start with the boundary, because it decides whether the rest of this page is for you: the calendar tools need a diary connected, and connecting a mailbox doesn't connect one.

There are 3 routes to a diary: calendar access approved on a Microsoft 365 sign-in, a Google sign-in for a Google calendar, or the address of a CalDAV calendar server. The last 2 work on any mailbox, whoever hosts the mail.
A mailbox with none of them gets no calendar tools at all. Not tools that answer "this mailbox has no calendar": none, so your assistant never offers something that was going to fail. Which route is yours, and what each one gets you, is its own guide.
Once a diary is connected, your assistant can:
- read the diary between 2 dates, or search it by subject, location or organiser
- open one event, with everybody invited and how each of them answered
- ask when a group of people are free, or ask Microsoft directly for the times a meeting would fit
- block your own time
- invite people, reschedule, cancel, or forward an invitation
- accept, decline, or decline and propose another time in the same breath
- set your out-of-office reply for a date range, and snooze a reminder
The full list is on the tool reference, with what each one refuses as well as what it does.
The rest of this page is about the 4 things that decide whether AI calendar scheduling is a good idea or a slow-motion accident. Each is invisible in a demo, and obvious 3 weeks later in somebody else's meeting.
The one that matters
Free/busy, and why unknown is not free
An attendee whose diary can't be read comes back as unknown. Read that as free, and the meeting lands on top of somebody's afternoon.
There are 2 ways to find a time here, and they answer different questions. Asking who is free returns the raw availability and leaves the judgement to you. Asking Microsoft for meeting times hands the judgement over: it applies everybody's working hours and ranks the candidates by how likely everyone is to make them.
Both start in the same place. Ask when several people are free and you don't get their diaries. You get blocks marked busy, free, tentative or out of office, one row per person, with no subjects and no attendees on them.
That's what anybody in your organisation already sees in Outlook's scheduling assistant. It's a limit of what we ask Microsoft for, not a filter applied afterwards.
The fourth answer: unknown
Sometimes a person's availability can't be read at all. They're in a different organisation, or the sharing was never set up, or the address doesn't resolve.
Microsoft doesn't fail the request when that happens. It returns 200 OK and marks that one attendee as unreadable, inside an otherwise perfectly successful response. Every other name in the list comes back correctly.
If you're writing the client and not looking for it, the natural shape of the code turns that person into an empty row. And an empty row looks exactly like a free afternoon.
Microsoft's own reference for its meeting-suggestion API is unusually frank about how much weight it gives this. The sentence is worth reading slowly:
For each attendee, a free status for a specified meeting time period corresponds to 100% chance of attendance, unknown status 49%, and busy status 0%.
Microsoft Learn, user: findMeetingTimes
49 per cent: not zero, and not a hundred. It's a deliberate hair under a coin toss. An unreadable attendee drags a suggestion's confidence down without ruling it out, and a room full of unknowns can never quite reach the 50 per cent default.
Microsoft has thought carefully about this and still chose to score it rather than refuse. That's the right call for a suggestion engine. It's a trap for anything reporting to a person, because "we don't know" and "probably fine" look identical once a language model has turned them into a sentence.
So the rule here is flat. Where availability can't be read, the answer is unknown, it's labelled unknown, and it's never shown as free. The tool descriptions say it and the results say it, in deliberately blunt words, because they have to survive being summarised.
If you take one thing from this page into your evaluation of any scheduling tool, make it this. Ask what it does with somebody it can't see, and be suspicious of any answer that isn't immediately specific.
2 different acts
Booking your own time, or inviting other people to a meeting
These feel like one job, and they're 2. Every awkward outcome I have seen from calendar automation comes from treating them as one.
-
Blocking your own time emails nobody.
create_eventputs an hour in your own diary. It changes a row in a database that nobody else reads, and sends nothing. -
Inviting people emails everybody, and says so first.
schedule_meetingputs an hour in 4 people's diaries. That's 4 emails and 4 other things moved, and it can't be quietly undone. Before it runs, it says who will receive an invitation.
So they're separate tools with separate names, and the boundary between
them is enforced, not just documented.
delete_event refuses outright the moment anybody
else is on the event, and names the tool that cancels a meeting
properly instead.
That refusal exists for one failure: an event vanishing from your calendar while 4 other people carry on holding the time. That's worse than either cancelling it properly or leaving it alone.
The same reasoning is why cancelling is marked destructive, along with every other tool on this page that emails somebody. A cancellation reaches everybody, and there's no version of it that doesn't.
Asking twice does not book twice
Every write carries an idempotency key made from the request itself. So a conversation that stutters, retries, or asks for the same meeting a second way doesn't produce 2 meetings.
It's the sort of thing nobody notices working and everybody notices failing, usually in front of the people who received both invitations.
Repeats
Recurring meetings, and the question it will always ask
Change a repeating meeting and it asks whether you mean this one or the whole series. It never guesses.
A weekly stand-up is 2 things wearing one name: the series, and each Tuesday it lands on. Outlook keeps them apart and asks which you meant every time you move one. That's mildly annoying, and entirely correct.
An assistant has the same choice and a much worse way to fail. Pick the series when you meant one occurrence and it rewrites a year of Tuesdays. Nobody finds out until they turn up to a meeting that's no longer there.
So there's no default. To change an event that belongs to a series, you say whether you mean this occurrence or the whole series, and the tool refuses rather than choosing.
Reading follows the same rule. A repeating meeting comes back on every date it actually falls on, the way it appears in Outlook, not once as a recurrence rule somebody then has to interpret. A fortnight of a weekly meeting is 2 entries carrying the same series id.
The repeat itself is described in words, "every week on Tuesday", rather than handed over as a pattern object. Where the pattern is one this connector doesn't recognise, it says exactly that. It never picks the nearest thing it does know, which is how confident wrong answers get made.
Time
Timezones, working hours and "three o'clock"
Every answer comes back in your mailbox's own timezone and says which, and your working hours decide what "tomorrow afternoon" means.
A time with no timezone on it isn't a time. That sounds pedantic until the first time somebody answers from an airport. And a diary answer that leaves one out is wrong roughly twice a year even for people who never travel, because British Summer Time exists.
Every calendar answer comes back in the mailbox's own timezone, and says which. That isn't a formatting preference. It's why the calendar permission asks for mailbox settings as well as the calendar itself: your timezone comes from that setting, and so do your working hours.
Without working hours, "tomorrow afternoon" can't be turned into a range at all. They're also what stop a suggested slot landing at 7 in the evening just because your diary happened to be empty then.
If you are evaluating a scheduling tool
One detail is where I lost the most time building this. Microsoft's header for choosing a response timezone governs the response only. The 2 dates you send to bound the request are read as UTC regardless.
So a client that sets the header and then passes local dates will silently lose events at both ends of the window. The fix here is unglamorous and reliable: pad the requested window generously either side, then filter what comes back against the local times you were actually asked about.
Slightly more data over the wire, no timezone arithmetic of our own to be wrong about, and no events quietly missing from the edges of a day.
Consent
Which calendar tools your AI client stops on
Every calendar tool that emails another person is marked destructive, so a careful AI client stops and asks you before it runs one.

Every tool this server publishes carries a label saying what running it would do: read only, a change you can put back, or something irreversible or outward-facing. Your AI client reads those labels (annotations, in the protocol's terms) and decides whether to run a tool quietly or stop and ask you first.
It's the same mechanism described on the tool reference, and the calendar tools use it exactly as the mail tools do.
Everything that emails another person is marked destructive
That's inviting, rescheduling, cancelling, forwarding an invitation, answering one, proposing another time, and setting an out-of-office reply. Deleting an event is destructive too, for the older reason that it can't be taken back.
Blocking your own time, changing it and reading the diary stay reversible or read-only. That's a judgement about what can be recalled, not about what feels significant, and it's the judgement the protocol asks a server to make.
The line is worth understanding, because it moved. Until 12 September 2026, booking a meeting was marked reversible even though it emails people, on the argument that cancelling it reaches everybody the invitation did.
That argument was wrong about the thing that matters. The invitation has still been read, in somebody else's inbox, in your name, and no cancellation unreads it.
Your client decides whether to stop
What the protocol won't do is make that decision for your client. Its specification is direct about where the responsibility sits:
For trust & safety and security, there SHOULD always be a human in the loop with the ability to deny tool invocations.
Model Context Protocol specification, Tools
Note the word: should, not must. The specification describes what a well-behaved client ought to do, and clients differ in how strictly they apply it.
So the label is the fact, and your own client's behaviour is the thing to check, just as its connector settings, not our list, decide whether it can reach a remote server at all. Before you let anything invite people for you, run one meeting through it and watch whether your client actually stops.
Private data, untrusted text, and a way out
There's a second reason to care, and it isn't about mistakes. Simon Willison's name for the combination is worth borrowing:
Access to your private data... Exposure to untrusted content... The ability to externally communicate in a way that could be used to steal your data.
Simon Willison, The lethal trifecta for AI agents
A calendar assistant has all 3 by design. That isn't a reason to avoid one, but it is a reason to know what you're holding.
Your diary and your mail are the private data. An event body, a meeting subject or an invitation from a stranger is text somebody else wrote, which makes it untrusted content in exactly Willison's sense. And sending mail is the external channel.
That's why every piece of third-party text this server returns is fenced off before a model sees it. It's also why the security page has a section on the email itself being the attack, rather than a badge.
Providers
Which calendars it reaches, and how each one connects
Connecting a mailbox doesn't connect a diary, because they're separate services with separate credentials. Which of the 3 routes is yours depends on where the diary lives, not where the mail lives.
-
Microsoft 365 does it in the same sign-in.
Approve calendar access when you connect the mailbox, and every tool on this page is there.
A mailbox connected before calendar access existed keeps working for mail, and gains the diary when its owner signs in again. Microsoft doesn't widen a permission already granted. Nothing is wrong with the connection: it simply has to be asked again.
-
Every other mailbox does it with an address.
IMAP is a mail protocol, and there's no calendar inside it at any host, so connecting the mail can't connect the diary.
What most hosts run alongside it is a calendar server speaking CalDAV, and giving us its address makes the calendar tools appear. Fastmail, iCloud and Nextcloud all run one. On Fastmail and iCloud the same app password opens the mail and the diary, so it's usually one field.
-
A CalDAV calendar is asked what it can do, not assumed.
No 2 servers are quite alike. One will send invitations to other people and answer who is free; another only stores events.
The account is opened before anything is saved, and its answer decides which tools are registered. So what your client is offered is what will work on your calendar, not a list that hopes.
-
Google Calendar is a sign-in of its own, on any mailbox.
The app password a Gmail mailbox connects with is a mail credential: it opens IMAP and SMTP and nothing else. Google refuses it on its own CalDAV endpoint too, so the address route was never going to rescue this one.
What reaches a Google diary is a Google permission, which is why it's a button, not a field. It covers the diary and never the mail, and the Google account doesn't have to be the address the mailbox is on.
-
3 tools have no Google equivalent, so they're absent there
rather than offered and failing.
They are declining with a counter-proposal, forwarding an invitation, and the out-of-office. The last is the one to know about. Google Calendar's out-of-office event declines meetings without emailing anybody, which isn't the automatic reply you'd be asking for.
The guide to connecting a calendar covers all 3 routes and what each one gets you.
Limits
What AI calendar scheduling will not do
-
A calendar has to be connected separately
Calendar tools appear once a diary is connected, which is its own step: calendar access approved on a Microsoft 365 sign-in, a Google sign-in for Google Calendar, or the address of a CalDAV calendar server. A mailbox with none of the 3 gets the email tools and no calendar tools at all.
-
Unknown is not free
When somebody's calendar cannot be read, the answer is unknown rather than free. Free/busy across organisations depends on an arrangement between them, and a name that comes back blank has told you nothing.
-
A calendar search needs dates
Reading or searching the diary needs a start and an end. A diary has no end, so there is no "everything" to return, and the answer always names the window it looked in.
-
No room browsing
It cannot list the meeting rooms an organisation has. Reading a room directory needs a permission only an IT administrator can approve, and asking every customer for that to power one convenience is the wrong trade. A room with an email address can still be invited and its free/busy checked, exactly like a person.
-
No files on calendar events
Files attached to a calendar event are not read or written yet. Attachments on email are, and event attachments are a separate piece of work rather than an oversight.
-
No send-later of its own, and no rules
Our server holds no email to send later, and nothing files or answers mail on its own. Your AI can send a draft at a set time from a scheduled task in its own app. A routine reads, drafts or flags; it never sends.
-
It is not an assistant that watches
Nothing touches your diary while you are away. There is no rule engine and no background process reading it, and the email routines use no calendar tools, so a meeting is only ever rearranged because you asked in a conversation. Setting an out-of-office reply for a future date range is not an exception: Microsoft applies that setting at the time, exactly as it would if you had ticked the box in Outlook yourself.
Can an AI book meetings in my calendar?
Yes, once a calendar is connected. It can block time in your own diary, invite people to a meeting with an online link, reschedule or cancel one and tell everybody, and answer an invitation you have been sent. A Google or CalDAV calendar gets as much of that as you allowed at sign-in, or as its server supports. Every tool that will email somebody says so before it runs. A mailbox with no calendar gets no calendar tools.
Will it book a meeting over something I am already doing?
Not on the strength of an answer it could not read. It checks free/busy for everybody you name, and where somebody cannot be seen, because they are in another organisation or permission was never granted, they come back as unknown, never as free. Microsoft reports those one attendee at a time inside an otherwise successful response, so a tool that reads a blank as an empty afternoon looks fine until the meeting lands in somebody's day.
Does it work with Google Calendar?
Yes, on any mailbox, whoever hosts the mail. It takes a Google sign-in of its own, because the app password a Gmail mailbox connects with opens the mail and nothing else. The Google account does not have to be the mailbox's address. 3 Outlook features have no Google equivalent and are absent there: declining with a counter-proposal, forwarding an invitation, and the out-of-office. Any other calendar with a CalDAV address works too, such as Fastmail, iCloud or Nextcloud.
Which calendar tools will send an email to somebody else?
Inviting people to a meeting, changing one they are on, cancelling one, forwarding an invitation, and answering an invitation when you choose to tell the organiser. Each puts a real message in somebody's inbox from your address. Blocking time in your own diary sends nothing, and neither does reading, searching or checking availability. The tool that deletes an event refuses outright once anybody else is invited, and names the cancel tool instead.
Will it change every week of a recurring meeting if I only meant one?
Not by guessing, because it is not allowed to guess. A repeating meeting is 2 things at once: the series, and each date it lands on. To change an event in a series you say which of the 2 you meant, and there is no default that quietly picks one. Reading the diary shows a repeating meeting on every date it falls on, the way Outlook does, with the series id on each.
What timezone does it answer in?
Your mailbox's own, which is a setting in Microsoft 365 rather than something we choose, and every answer states it rather than leaving you to assume. That is why the calendar permission includes mailbox settings: without your timezone a time cannot be stated correctly, and without your working hours "tomorrow afternoon" cannot be turned into anything. Working hours are also what stop a suggested slot landing at 7 in the evening merely because the diary was empty then.
Do calendar calls come out of a separate allowance?
No. They are metered exactly like the mail tools, out of the same daily allowance on the same mailbox, and there is nothing extra to buy. Checking when 4 people are free, booking the meeting and sending the invitations is 3 calls. Free is 5 calls a day per mailbox and Pro is 1,000, both published ceilings.
Attribution
Sources
- Microsoft Learn: user: findMeetingTimes The confidence arithmetic quoted above, including the 49% an unknown attendee scores, and the working-hours rules that decide which slots are suggested. Read 2 September 2026.
- Microsoft Learn: calendar: getSchedule The free/busy call itself: what it returns per person, and its note that a calendar with more than 1,000 entries in the window comes back as a 5006 rather than as a failed request. Read 2 September 2026.
- Model Context Protocol specification: Tools The human-in-the-loop guidance quoted above, and the tool annotations a client reads to decide what to ask you about. Read 2 September 2026.
- Simon Willison: The lethal trifecta for AI agents The 3 capabilities that make an agent worth thinking carefully about, quoted above. Read 2 September 2026.
- The calendar tools behind everything on this page Each one with what it does and where it refuses, taken from the server's own registration code.
Keep going
Read next
Ask it what you have on Thursday.
One call, in your own timezone, with the repeats where they belong. That's the cheapest honest test of AI calendar scheduling there is, and it tells you in a minute whether you trust it with the invitations.