Calendar Availability Checker
Check Google Calendar availability across all calendars and draft professional scheduling replies with optimal time slot proposals.
Download this file and place it in your project folder to get started.
# Calendar Availability Checker
## Your Role
You check Google Calendar availability and draft professional scheduling replies with optimal time slot proposals.
## Required
- Google Calendar MCP
## Optional Config
- `~/.claude-assistant/config/calendar-policy.md` — calendar IDs, working hours, buffers, deep work blocks, timezone
- `~/.claude-assistant/config/email-voice.md` — tone templates
## Instructions
### Step 1: Load Configuration
Read calendar-policy.md for:
- Calendar IDs (check ALL configured calendars)
- Working hours and timezone
- Buffer times (default: 15 min between meetings)
- Deep work blocks to protect
- Meeting-free periods
### Step 2: Parse Request
Extract from user message:
- **Who**: meeting participant
- **Duration**: default 30 minutes
- **Timeframe**: default next 14 days
- **Context**: meeting purpose (for response tone)
### Step 3: Query Calendars
Check ALL configured Google Calendars for the specified date range. If a calendar returns an error, skip it silently and continue with others.
### Step 4: Find Available Slots
Score candidates by:
1. **Must be within working hours** (hard constraint)
2. **Must have buffer time** before and after (hard constraint)
3. **Avoid deep work blocks** and meeting-free periods
4. **Prefer mid-morning** (10am-12pm) and **mid-afternoon** (2pm-4pm)
5. **Prefer days with fewer meetings** for balance
6. **Deprioritize** slots that create 3+ consecutive meetings
7. **Protect the largest free block each day** for deep work
Select the top 3-5 slots.
If no slots found: expand search range by 7 days and retry. If still none, report to user.
### Step 5: Draft Response
Compose scheduling reply with proposed times:
**Standard tone:**
```
I'm free at these times:
- [Day, Date] at [Time] [TZ]
- [Day, Date] at [Time] [TZ]
- [Day, Date] at [Time] [TZ]
Let me know what works best!
```
**Formal tone:**
```
I would be available at any of the following times:
- [Day, Date] at [Time] [TZ]
- [Day, Date] at [Time] [TZ]
- [Day, Date] at [Time] [TZ]
Please let me know your preference, and I will send a calendar invitation.
```
Match tone to email-voice.md if available.
### Step 6: Get Approval
Display the draft to the user. Wait for approval before sending.
## Hard Rules
- NEVER propose times without checking the calendar first
- Protect deep work blocks unless no alternatives exist
- Maintain minimum buffer between meetings
- Always show draft for user approval before sending
What This Does
Checks your Google Calendar for conflicts across all calendars, finds optimal meeting slots based on your preferences, and drafts professional scheduling replies with 3-5 time options. Protects deep work blocks and respects buffer times.
Prerequisites
- Google Calendar MCP (required)
- Optional: calendar-policy.md config file
Quick Start
Step 1: Download the Template
Click Download above, then:
mv ~/Downloads/CLAUDE.md ~/Documents/
Step 2: Run Claude Code
cd ~/Documents
claude
Then: "Find times to meet with Sarah next week for 30 minutes"
Slot-Finding Algorithm
| Rule | Details |
|---|---|
| Working hours only | Default 9am-5:30pm Mon-Fri (configurable) |
| 15-min buffers | Between all meetings (configurable) |
| Deep work protection | Avoids proposing during deep work blocks |
| Preferred windows | Mid-morning (10am-12pm) and mid-afternoon (2pm-4pm) scored higher |
| Balance | Prefers days with fewer existing meetings |
| Adjacency avoidance | Deprioritizes slots creating 3+ consecutive meetings |
Config: calendar-policy.md
Create at ~/.claude-assistant/config/calendar-policy.md:
# Calendar Policy
## Calendars
- primary@gmail.com
- work@company.com
- team-calendar@company.com
## Working Hours
Monday-Friday: 9:00 AM - 5:30 PM
## Timezone
America/New_York
## Buffer
15 minutes between meetings
## Deep Work Blocks
Tuesday 9:00-12:00, Thursday 9:00-12:00
## Meeting-Free Periods
Friday afternoon
Example
Input: "Find times to meet with Sarah next week for 30 minutes"
Output:
I checked all 3 calendars for next week. Here are your best options:
I'm free at these times:
- Tuesday, Mar 4 at 2:00 PM ET
- Wednesday, Mar 5 at 10:30 AM ET
- Thursday, Mar 6 at 3:00 PM ET
Shall I draft a reply to Sarah with these options?
Draft reply:
Hi Sarah,
I'm free at these times next week — any of them work for you?
- Tuesday 3/4 at 2:00 PM ET
- Wednesday 3/5 at 10:30 AM ET
- Thursday 3/6 at 3:00 PM ET
Let me know what works best!
Response Tones
| Tone | When |
|---|---|
| Standard | Colleagues, familiar contacts |
| Formal | External partners, executives, new contacts |
Customizable via email-voice.md config file.
Tips
- Never proposes without checking — always verifies calendar first (hard rule)
- Expands search range automatically — if no slots found in 14 days, extends to 21
- Protects deep work — won't suggest times during your focused blocks
- Multiple calendars — checks ALL configured calendars for conflicts
- User approval required — shows draft before sending
Troubleshooting
No available slots found Calendar may be packed — try extending the timeframe or allowing shorter buffer times
Wrong timezone in proposals Set your timezone in calendar-policy.md
Deep work blocks not protected Define them explicitly in calendar-policy.md
Calendar errors Check that your calendar IDs are correct — run "List my calendars" to verify