[ jd303 ]

Now that you've read how to set up Claude Code, let's look at some useful things you can do with it.

Somewhere around the fifth time I missed a school "you need to send your kid to school with this esoteric 2 week backorder costume today" because the email was buried under a fundraising blast and a Bloomz notification about something I definitely did not care about, I decided I needed to fix my "add this thing to my calendar" workflow. I didn't want a "build an integration" solution. I also didn't want a "set up a Zapier workflow and pray it still works in six months" solution. Instead, I just decided to tell Claude to go read my email and tell me what I missed.

What followed was maybe an hour of building a context file that tells Claude exactly how to do this - what to search for, what to skip (filters), how to cross-reference the calendar, and most importantly: do not touch anything without asking me first.

This setup uses Gmail, which downloads my email into Outlook, and then uses Outlook Calendar. I know, I know... but I like to color code my Outlook Calendar with Categories. Red: medical. Green: paycheck. Poop brown: Cleveland Browns game. Anyway, you can just configure Claude to do this with Google Calendar, too.

One honest downside of this whole setup: there's no automatic way to assign those categories or colors. Google Calendar doesn't have the concept, so the API can't set them. Claude adds the events, you go back into Outlook and bulk-assign. It's maybe 30 seconds of clicking. IT STILL SAVES TIME.

I use Outlook Google Calendar Sync, but you can also just use Google Calendar to get it on your Android phone. I bet there's something that Apple can also do, but I'm not going to cover that because it's probably walled gardened into a custom ecosystem. Sorry. Claude will give you hints, though.

The first thing you really need to do is set up the MCP for Google Calendar. I'm not going to go through that whole rigmarole of adding that, but Claude will in the next section. Instead, I want you to think about (and gather) all the emails you want Claude to know about, exclude, and use to update your calendar with important events.

[ claude ]

Before You Start: Connecting Gmail and Google Calendar

This workflow requires two MCP integrations: Gmail and Google Calendar. You have two ways to set them up.

Option 1: Claude.ai web UI (easier, what jd303 did)

Go to claude.ai, open Settings, and look for Integrations. Add Gmail and Google Calendar from there. Once connected, those integrations are available in Claude Code sessions too since they're tied to your account.

Option 2: Claude Code CLI (recommended)

Run these two commands in your terminal:

claude mcp add --transport http gmail https://gmailmcp.googleapis.com/mcp/v1
claude mcp add --transport http google-calendar https://calendarmcp.googleapis.com/mcp/v1

That writes the config to ~/.claude/settings.json automatically. If either server needs you to authenticate with Google, run /mcp inside Claude Code after adding them and it will walk you through it.

This approach is better for this kind of workflow. It lives with your Claude config, it's portable across machines, and you're not depending on a browser session being active.

What's in Play

Two MCP servers: Gmail and Google Calendar. No code, no integration platform, no webhook. Claude has read access to both and proposes calendar changes before making any.

The workflow runs in four stages:

  1. Run Gmail searches in parallel by category
  2. Check snippets. Only fetch full threads when a snippet shows an actionable date.
  3. Pull the calendar and cross-reference
  4. List proposed additions and wait for approval
[ jd303 ]

Why These Filters

Here's the thing about school email: the signal-to-noise ratio is terrible. Our kid's school (well, the teachers) sends useful stuff like field trips, early dismissals, and no-school days, but it's buried under a constant stream of Box Tops reminders, yearbook deadlines (actually some of these are useful), and fundraising blasts that I will never act on. Bloomz is its own special problem. It's the school communication app, and it sends both real notifications and autoreply garbage that bypasses subject line filters if you're not careful.

CMAS is the Colorado state assessment. The school sends notices about testing windows, but those dates are already on the district calendar and don't need to be on mine. My calendar is for things I need to show up for or send a kid (or an item) somewhere. Testing is the school's logistics problem, not mine.

Once I realized how useful this was, I expanded it to medical and event emails. Appointment reminders have consistent subject line patterns (or email addresses), ticket confirmations from AXS and Ticketmaster are basically structured data dressed up as email (we go to a lot of shows)... and the neighborhood HOA stuff is lowest priority but still important. Stuff goes into my calendar if there's an actual meeting or action item, otherwise I skip it. I'll keep my entire filters so you can stalk me and my allergy specialist and dentist, just so you can get an idea of how this all works. Also my dentist will drill you if you piss him off.

[ claude ]

Search Queries

Four searches, run in parallel. Default window is newer_than:14d. Bump to 30d if you've let it sit for a while.

School

(from:dpsk12.org OR from:dpsk12.net OR from:bloomz.net OR from:g.greyhame@dpsk12.net) newer_than:14d -subject:(yearbook OR "box tops" OR fundrais OR donate OR "school store" OR booster OR volunteer OR "last chance" OR "due tomorrow") -from:autoreply@bloomz.net -subject:(CMAS OR "testing window" OR "state assessment")

The exclusions are doing real work here. School email is 80% fundraising noise and 20% things you actually need. The filter strips the noise at query time so Claude isn't wading through 40 emails about Box Tops.

autoreply@bloomz.net gets its own exclusion because it bypasses subject filters. CMAS and state assessment dates are also excluded. They're on the district calendar already and don't need to be on yours.

Medical

(from:cortex-allergy.net OR "Cortex Allergy" OR "Syn" OR "Grafton" OR "NeuraClinic" OR subject:(appointment OR reminder OR confirmation OR "your visit") (doctor OR dental OR allergy OR clinic OR medical)) newer_than:14d

Events / Tickets

(from:axs.com OR from:ticketmaster.com OR from:holdmyticket.com OR from:ritualnoize.com OR from:wetware.live OR "Denver Performing Arts" OR "Buell Theatre" OR "Comedy Works" OR "Madison Cube Garden" OR subject:("your tickets" OR "order confirmation" OR "ticket confirmation" OR "you're going")) newer_than:14d

Ticketers: AXS, Ticketmaster, Hold My Ticket | Venues: Ritual Noize, DPAC, Buell Theatre, Comedy Works, Madison Cube Garden

Neighborhood / HOA

(DOOP OR "New New Denver" OR "Hoverville") newer_than:14d

Snippet-First

For each result, check the snippet before calling get_thread. Most emails surface the relevant date in the preview. Fetching full threads on 30 emails to find 3 calendar items is wasteful. Skip it unless the snippet shows something actionable.

Filters

These senders and subjects get skipped entirely, no processing:

Senders: autoreply@bloomz.net, Nature and Science Museum, Denver Art Museum, KUNC, The Colorado Sound, Denverite, Axios, City Cast Denver, 4 Mile House, Bowlero

Subject patterns: CMAS / state assessment / testing window, yearbook / box tops / fundrais / donate / school store / booster, "last chance" / "due tomorrow" from school senders, newsletter / weekly digest / roundup from neighborhood senders

Calendar Check

Pull with fullText to avoid dumping everything:

  • School events: fullText: "Hogwarts"
  • Medical: date range only, after finding the email
  • Events: fullText with venue or artist name from the email

startTime is the current ISO timestamp, not midnight. Future events only. endTime is end of school year for school queries; six months out for medical and events.

Priority Order

  1. Medical: time-sensitive, reschedule window is usually tight
  2. Paid tickets: money is already spent, needs to be on the calendar
  3. School events with specific dates: field trips, early dismissals, no-school days
  4. School general info: snippet only, skip get_thread unless a date is visible
  5. Neighborhood/HOA: lowest priority, add only if action is required

Event Naming Rules

  • School events get a - Hogwarts suffix for easy Outlook filtering
  • Do not add CMAS or state testing dates
  • Do not add fundraising deadlines unless explicitly asked
  • Google Calendar API can't set Outlook categories. After Claude adds events, bulk-categorize in Outlook:
    • School events: "School/Education"
    • Medical: "Health"
    • Concerts/shows: "Entertainment"
    • Neighborhood: "Community"
[ jd303 ]

The Approval Gate

The approval gate is non-negotiable. I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. A wetware calibration booked for a Tuesday at 2pm that I never scheduled. You give Claude calendar write access without a confirmation step and you will eventually show up somewhere that doesn't exist.

Before touching the calendar, Claude lists exactly what it wants to add or update (event title, date, time, calendar) and waits for an explicit yes. No "I went ahead and." One confirmation, then it acts.

[ claude ]

Making It a Slash Skill

Instead of loading the context file manually every session, you can package the whole workflow as a Claude Code slash command. One file, and /email-calendar-sync becomes a real command.

Step 1: Create the directory and file

The commands directory doesn't exist by default. Create it and the file in one shot:

mkdir -p ~/.claude/commands && touch ~/.claude/commands/email-calendar-sync.md

Steps 2-4 describe what goes in the file. You can open it in an editor (nano ~/.claude/commands/email-calendar-sync.md) and paste it in, or just tell Claude Code: "write my email-calendar-sync skill file with the following content" and paste steps 2-4. Claude will handle it.

Step 2: Add frontmatter

---
name: Email Calendar Sync
description: Search Gmail for school, medical, event, and neighborhood emails, cross-reference Google Calendar, and propose calendar additions. Waits for approval before touching anything.
---

Step 3: Write the skill body

The body is instructions to Claude. Replace the placeholders with your actual providers, email addresses, and school/neighborhood terms.

## Search Queries

Run these four Gmail searches in parallel. Default: newer_than:14d.
Use newer_than:30d if catching up after a gap.

SCHOOL:
(from:YOUR_SCHOOL_DOMAIN OR from:YOUR_SCHOOL_APP) newer_than:14d
-subject:(fundrais OR donate OR booster OR "box tops" OR yearbook OR volunteer)
-subject:(CMAS OR "testing window" OR "state assessment")

MEDICAL:
(from:YOUR_DOCTOR_DOMAIN OR "YOUR_DOCTOR_NAME" OR "YOUR_DENTIST_NAME"
OR subject:(appointment OR reminder OR confirmation OR "your visit")
(doctor OR dental OR allergy OR clinic)) newer_than:14d

EVENTS/TICKETS:
(from:axs.com OR from:ticketmaster.com OR from:holdmyticket.com
OR "YOUR_LOCAL_VENUE" OR subject:("your tickets" OR "order confirmation"
OR "ticket confirmation" OR "you're going")) newer_than:14d

NEIGHBORHOOD:
(YOUR_HOA_NAME OR "YOUR_NEIGHBORHOOD_NAME") newer_than:14d

## Snippet-First

Check the snippet before calling get_thread. Only fetch the full thread
if the snippet shows an actionable date or event.

## Ignore List

Skip entirely, no processing:
- Senders: autoreply from school apps, newsletters, museum/arts marketing lists
- Subjects: CMAS, state assessment, testing window, fundraising, "last chance",
  "due tomorrow", weekly digest, roundup

## Calendar Check

Pull with fullText filter using your school name, doctor name, or venue.
Use current ISO timestamp as startTime (not midnight).
Cross-reference results against email findings.

## Priority Order

1. Medical (reschedule risk)
2. Paid tickets (money already spent)
3. School events with specific dates
4. School general info (snippet only)
5. Neighborhood/HOA (action required only)

Step 4: Bake in the approval gate

This line goes at the end of the skill body, and it is not optional:

Before calling any Calendar write tool, list every proposed change
(event title, date, time, calendar) and wait for explicit approval.
Do not add or modify anything without confirmation.

Once the file exists, /email-calendar-sync appears in Claude Code's command list. Type it and the whole workflow kicks off: context loaded, searches run, calendar checked, proposed changes listed for review.

If you're tracking your Claude config in git (and you should be), don't forget to like and subscribe! ...err. Commit and push. That must be jd303's stupid sense of humor rubbing off on me. The ~/.claude/commands/ directory needs to be in your allowlist if your .gitignore uses a deny-all pattern.

git add ~/.claude/commands/email-calendar-sync.md
git commit -m "Add email-calendar-sync skill"
git push
[ jd303 ]

This Work Works at Work Too

I run the same basic workflow at work. AWS sends a constant stream of service notification emails (deprecation notices, upgrade windows, end-of-support dates) and every one of them probably needs a Jira ticket. Before, those emails sat in a folder until I remembered to go look. Now Claude scans them, pulls out the relevant dates and action items, and creates the tickets. Or the Epics, and assigns the emails to sub-tasks.

The pattern is the same - parallel searches, snippet-first, proposed actions listed before anything gets written. The difference is the output. Instead of calendar events, it's Jira issues with due dates, summaries, and the right project key.

One gotcha worth knowing: if you download email via Outlook or any client in POP/download mode, Gmail can mark messages as read and move them to trash. Claude searches the inbox by default and won't find them. Pass includeTrash: true on every search. Same deal if you have multiple Google accounts connected -- be explicit about which one, or Claude will guess.

We'll get into the Jira side in a future post. The pattern is the same everywhere. Teach Claude what to look for, what to skip, and what to do with what it finds.

Hopefully this optimizes your workflows and helps you not forget to send birthday cupcakes to school or donuts to the office. Glazed if you're boring, filled if you're trying too hard.