Skip to content

Commit 7f48883

Browse files
committed
Enter the meet plugin, now it's easier to find free overlapping time to meet with one or more people across timezones.
1 parent 7ba986b commit 7f48883

File tree

8 files changed

+425
-0
lines changed

8 files changed

+425
-0
lines changed

.claude-plugin/marketplace.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@
6868
"name": "must-gather",
6969
"source": "./plugins/must-gather",
7070
"description": "A plugin to analyze and report on must-gather data"
71+
},
72+
{
73+
"name": "meet",
74+
"source": "./plugins/meet",
75+
"description": "A plugin to help find time and schedule meetings on your Google Calendar"
7176
}
7277
]
7378
}

PLUGINS.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ This document lists all available Claude Code plugins and their commands in the
88
- [Git](#git-plugin)
99
- [Hello World](#hello-world-plugin)
1010
- [Jira](#jira-plugin)
11+
- [Meet](#meet-plugin)
1112
- [Must Gather](#must-gather-plugin)
1213
- [Olm](#olm-plugin)
1314
- [Openshift](#openshift-plugin)
@@ -82,6 +83,16 @@ A plugin to automate tasks with Jira
8283

8384
See [plugins/jira/README.md](plugins/jira/README.md) for detailed documentation.
8485

86+
### Meet Plugin
87+
88+
find overlapping free time to meet with people
89+
90+
**Commands:**
91+
- **`/meet:create-event` `<natural_language_prompt_for_the_event>`** - Create a new event on Google Calendar.
92+
- **`/meet:find-time` `<email_addresses> [duration_in_minutes] [days_ahead]`** - Find overlapping free time to meet with one or more people.
93+
94+
See [plugins/meet/README.md](plugins/meet/README.md) for detailed documentation.
95+
8596
### Must Gather Plugin
8697

8798
A plugin to analyze and report on must-gather data

docs/data.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,27 @@
391391
}
392392
],
393393
"has_readme": true
394+
},
395+
{
396+
"name": "meet",
397+
"description": "A plugin to help find time and schedule meetings on your Google Calendar",
398+
"version": "0.0.1",
399+
"commands": [
400+
{
401+
"name": "create-event",
402+
"description": "Create a new event on Google Calendar.",
403+
"synopsis": "/meet:create-event <natural_language_prompt_for_the_event>",
404+
"argument_hint": "<natural_language_prompt_for_the_event>"
405+
},
406+
{
407+
"name": "find-time",
408+
"description": "Find overlapping free time to meet with one or more people.",
409+
"synopsis": "/meet:find-time <email_addresses> [duration_in_minutes] [days_ahead]",
410+
"argument_hint": "<email_addresses> [duration_in_minutes] [days_ahead]"
411+
}
412+
],
413+
"skills": [],
414+
"has_readme": true
394415
}
395416
]
396417
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "meet",
3+
"description": "find overlapping free time to meet with people",
4+
"version": "0.0.1",
5+
"author": {
6+
"name": "github.com/openshift-eng"
7+
}
8+
}

plugins/meet/.mcp.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"mcpServers": {
3+
"google-calendar": {
4+
"command": "npx",
5+
"args": ["@cocal/google-calendar-mcp"]
6+
}
7+
}
8+
}

plugins/meet/README.md

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
# Meet Plugin
2+
3+
Google Calendar integration for Claude Code, providing AI-powered tools to find meeting times and schedule events seamlessly.
4+
5+
## Features
6+
7+
- 🔍 **Smart Time Finding** - Find overlapping free time across multiple participants' calendars
8+
- 📅 **Natural Language Event Creation** - Create calendar events using intuitive natural language descriptions
9+
- 🌐 **Timezone Handling** - Automatic timezone detection and conversion for global teams
10+
- 🤖 **Google Meet Integration** - Automatically adds Google Meet links to virtual meetings
11+
-**Intelligent Parsing** - Understands relative dates, time expressions, and participant lists
12+
- 🎯 **Business Hours Optimization** - Prioritizes business hours and excludes weekends by default
13+
14+
## Prerequisites
15+
16+
- Claude Code installed
17+
- Google Calendar API access configured
18+
- Google Calendar MCP server(bundled)
19+
20+
## Setup
21+
22+
### 1. Google Cloud Setup
23+
24+
1. Go to the [Google Cloud Console](https://console.cloud.google.com)
25+
2. Create a new project or select an existing one
26+
3. Enable the [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com) for your project. Ensure that the right project is selected from the top bar before enabling the API
27+
4. Create OAuth 2.0 credentials:
28+
- Go to **Credentials**
29+
- Click **"Create Credentials"** > **"OAuth client ID"**
30+
- Choose **"User data"** for the type of data that the app will be accessing
31+
- Add your app name and contact information
32+
- Add the following scopes:
33+
- `https://www.googleapis.com/auth/calendar.events`
34+
- `https://www.googleapis.com/auth/calendar`
35+
- Select **"Desktop app"** as the application type (Important!)
36+
- Download the auth key
37+
38+
### 2. Environment Configuration
39+
40+
After completing previous step, you must specify the credentials file path using the `GOOGLE_OAUTH_CREDENTIALS` environment variable prior to starting Claude Code, this tells the `google-calendar-mcp` MCP server where to look for auth keys.
41+
42+
```bash
43+
export GOOGLE_OAUTH_CREDENTIALS=~/.config/client_secret_xxxxxxxxx.json
44+
claude
45+
```
46+
47+
## Installation
48+
49+
```bash
50+
# Add the marketplace (one-time setup)
51+
/plugin marketplace add openshift-eng/ai-helpers
52+
53+
# Install the plugin
54+
/plugin install meet@ai-helpers
55+
```
56+
57+
## Available Commands
58+
59+
### `/meet:find-time` - Find Overlapping Free Time
60+
61+
Find overlapping available time with multiple participants by analyzing calendar availability and suggesting optimal meeting times.
62+
63+
**Usage:**
64+
```bash
65+
# Basic usage with two people
66+
67+
68+
# Including custom date range
69+
70+
71+
# Multiple participants with longer timeline
72+
73+
```
74+
75+
**Features:**
76+
- Analyzes free/busy information across all participants
77+
- Filters out blocks shorter than requested duration
78+
- Excludes weekends unless specifically requested
79+
- Prioritizes business hours
80+
- Provides alternative suggestions if no perfect matches found
81+
- Displays times in user's primary calendar timezone
82+
83+
See [commands/find-time.md](commands/find-time.md) for full documentation.
84+
85+
---
86+
87+
### `/meet:create-event` - Create Calendar Events
88+
89+
Create new calendar events using natural language descriptions with automatic Google Meet integration and intelligent parsing.
90+
91+
**Usage:**
92+
```bash
93+
# Simple meeting
94+
/meet:create-event Team standup tomorrow at 9am for 30 minutes
95+
96+
# Meeting with specific attendees
97+
/meet:create-event Project review Friday 2pm with [email protected] and [email protected]
98+
99+
# Detailed planning session
100+
/meet:create-event Quarterly planning session next Monday 10am-12pm with the whole engineering team
101+
102+
# Quick 1:1 meeting
103+
/meet:create-event Coffee chat with Sarah tomorrow 3pm for 45 minutes
104+
105+
# All-hands meeting
106+
/meet:create-event Monthly all-hands meeting first Friday of next month 2-3pm with leadership team
107+
```
108+
109+
**Features:**
110+
- Natural language parsing for dates, times, and attendees
111+
- Automatic Google Meet link generation
112+
- Intelligent defaults (1-hour duration, virtual location)
113+
- Handles relative dates ("tomorrow", "next Friday", "in 2 hours")
114+
- Timezone conversion and validation
115+
- Email validation for attendees
116+
- Graceful error handling with helpful suggestions
117+
118+
See [commands/create-event.md](commands/create-event.md) for full documentation.
119+
120+
---
121+
122+
## Workflow Examples
123+
124+
### Planning a Team Meeting
125+
126+
1. **Find available time:**
127+
```bash
128+
129+
```
130+
131+
2. **Create the meeting:**
132+
```bash
133+
/meet:create-event Sprint planning session Thursday 2pm with [email protected],[email protected],[email protected],[email protected]
134+
```
135+
136+
### Scheduling a Quick Sync
137+
138+
```bash
139+
# One command to create immediate meeting
140+
/meet:create-event Quick sync with John tomorrow 11am for 15 minutes
141+
```
142+
143+
### Cross-timezone Meeting
144+
145+
```bash
146+
# Find time considering global participants
147+
148+
149+
# Create with specific timezone considerations
150+
/meet:create-event Global standup next Monday 8am PST with [email protected],[email protected],[email protected]
151+
```
152+
153+
## Troubleshooting
154+
155+
### "Could not access calendar for {email}"
156+
- Verify the email address is correct
157+
- Ensure the user has shared their calendar or given appropriate permissions
158+
- Check that your Google Calendar API credentials have the necessary scopes
159+
160+
### "No overlapping free time found"
161+
- Try a shorter meeting duration
162+
- Expand the date range (more days ahead)
163+
- Consider including weekend options
164+
- Check if participants have conflicting recurring meetings
165+
166+
### OAuth/Authentication Issues
167+
- Verify `GOOGLE_OAUTH_CREDENTIALS` environment variable is set correctly
168+
- Ensure the credentials file exists and is readable
169+
- Check that the Google Calendar API is enabled in your Google Cloud project
170+
- Verify OAuth scopes include calendar access
171+
172+
### MCP Server Issues
173+
- Ensure `@cocal/google-calendar-mcp` is available via npm
174+
- Check that the MCP server is properly configured
175+
- Verify network connectivity for API calls
176+
177+
For command-specific troubleshooting, see the individual command documentation.
178+
179+
## Security and Privacy
180+
181+
- **Credentials**: OAuth credentials are stored locally and never transmitted to AI Helpers
182+
- **Calendar Data**: Free/busy information is queried in real-time and not stored
183+
- **Privacy**: Only calendar availability is accessed, not detailed event content
184+
- **Scope**: The plugin only requests minimal necessary Calendar API permissions
185+
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
---
2+
description: Create a new event on Google Calendar.
3+
argument-hint: <natural_language_prompt_for_the_event>
4+
---
5+
6+
## Name
7+
meet:create-event
8+
9+
## Synopsis
10+
```
11+
/meet:create-event <natural_language_prompt_for_the_event>
12+
```
13+
14+
## Description
15+
The `meet:create-event` command creates a new calendar event on Google Calendar based on natural language input. It intelligently parses event details from user descriptions, automatically adds Google Meet links for virtual participation, and handles timezone conversions and date parsing.
16+
17+
## Implementation
18+
19+
### Phase 1: Parse Natural Language Input
20+
- Parse `$ARGUMENTS` to extract key event details:
21+
- `summary` (event title/subject)
22+
- `start` (start date and time)
23+
- `end` (end date and time)
24+
- `attendees` (list of email addresses)
25+
- `description` (additional details, agenda, notes)
26+
- Handle relative date expressions ("tomorrow", "next Friday", "in 2 hours")
27+
- Parse time expressions ("9am", "2:30 PM", "noon")
28+
- Extract participant information from various formats
29+
30+
### Phase 2: Validate and Clarify Missing Information
31+
- Check for essential information (event summary and start time)
32+
- If crucial details are missing, ask user for clarification with specific questions
33+
- Validate email addresses for attendees
34+
- Set reasonable defaults:
35+
- Duration: 1 hour if end time not specified
36+
- Location: Virtual (Google Meet) if not specified
37+
- Convert relative dates to absolute dates with proper timezone handling
38+
39+
### Phase 3: Format Event Data
40+
- Convert all dates and times to ISO 8601 format
41+
- Use `get-current-time` tool to determine user's timezone
42+
- Ensure start time is before end time
43+
- Format attendee list properly for calendar API
44+
- Prepare event description with any additional context
45+
46+
### Phase 4: Ask For User Confirmation
47+
- Display the summary, meeting time, attendees, description
48+
- Ask user to confirm
49+
- If user confirms, proceed to phase 5, otherwise, modify the summary, meeting time, attendees, description based on user's input until user confirms you correctly intepreted the intent.
50+
51+
### Phase 5: Create Calendar Event
52+
- Use the `create-event` tool from the `plugin:meet:google-calendar` MCP server
53+
- Automatically attach Google Meet link for virtual participation
54+
- Create event on user's primary calendar
55+
- Include all parsed attendees, description, and meeting details
56+
- Handle calendar API responses and potential conflicts
57+
58+
### Phase 6: Confirmation and Error Handling
59+
- Confirm successful event creation with key details
60+
- Provide Google Meet link and calendar invitation status
61+
- Handle common errors gracefully:
62+
- Calendar permission issues
63+
- Invalid attendee emails
64+
- Scheduling conflicts
65+
- Timezone conversion errors
66+
- Suggest alternatives if event creation fails
67+
68+
## Return Value
69+
- **Success Format**: Confirmation message with:
70+
- Event title and time details
71+
- List of invited attendees
72+
- Google Meet link for virtual participation
73+
- Calendar invitation status
74+
- **Error Format**: Clear error message with:
75+
- Description of what went wrong
76+
- Specific suggestions for resolution
77+
- Alternative approaches if applicable
78+
79+
## Examples
80+
81+
1. **Simple meeting**:
82+
```
83+
/meet:create-event Team standup tomorrow at 9am for 30 minutes
84+
```
85+
86+
2. **Meeting with specific attendees**:
87+
```
88+
/meet:create-event Project review Friday 2pm with [email protected] and [email protected]
89+
```
90+
91+
3. **Detailed planning session**:
92+
```
93+
/meet:create-event Quarterly planning session next Monday 10am-12pm with the whole engineering team
94+
```
95+
96+
4. **Quick 1:1 meeting**:
97+
```
98+
/meet:create-event Coffee chat with Sarah tomorrow 3pm for 45 minutes
99+
```
100+
101+
5. **All-hands meeting**:
102+
```
103+
/meet:create-event Monthly all-hands meeting first Friday of next month 2-3pm with leadership team
104+
```
105+
106+
## Arguments
107+
- `natural_language_prompt_for_the_event` ($1): Natural language description of the event to create, including title, time, attendees, and any other relevant details (required)

0 commit comments

Comments
 (0)