Files
mop-skills/skills/google-calendar/SKILL.md
T

7.8 KiB

name, description
name description
google-calendar Read, search, create, update, and delete Google Calendar events across the Family Calendar and Regensburg & more Calendar. Supports visual color-coding (Arzt=Rot, Mila=Gelb, Moritz=Blau, Amelie=Grün, Familie=Orange), conflict & travel-buffer checking, address locations, and packing checklists.

📅 Google Calendar (Familie & Regensburg)

Full two-way Google Calendar integration for Moritz, Amelie, and family, managing two distinct calendars via a dedicated GCP Service Account:

  1. 👨‍👩‍👧 Familienkalender (family):
    • Primary personal & family schedule: doctor visits, daycare/kindergarten, birthdays, visits, work trips, family outings, shared commitments.
    • Default calendar for all personal appointment requests.
  2. 🏛️ Regensburg & mehr (regensburg):
    • Local city life: Dult, Bürgerfest, concerts, theatre, local festivals, markets, exhibitions.
    • Keeps the family calendar clean and uncluttered while keeping track of exciting local events.

🎨 Farbleitsystem (Visual Color Coding)

OpenClaw assigns Google Calendar colors automatically based on event titles or explicit categories:

Farbe colorId Kategorie / Person Typische Stichwörter
🔴 Rot (Tomate) 11 Arzt & Gesundheit Arzt, Kinderarzt, Zahnarzt, U1..U9, Impfung, Klinik, Physio, Blutabnahme
🟡 Gelb (Banane) 5 Mila & Kinder Mila, Kita, Kindergarten, Krabbelgruppe, Spielplatz, Babyschwimmen, Kinderturnen
🔵 Blau (Heidelbeere) 9 Moritz Moritz, Arbeit, Büro, Job, Dienstreise
🟢 Grün (Salbei) 2 Amelie Amelie, Amy
🟠 Orange (Mandarine) 6 Familie & Feiern Familie, Ausflug, Urlaub, Feier, Party, Geburtstag, Besuch, Oma, Opa, Essen
⚪ Grau (Graphit) 8 Haushalt & Wartung Haushalt, Auto, TÜV, Werkstatt, Müll, Handwerker

🛠️ MCP Tools

You have access to 8 dedicated calendar tools:

  1. calendar_list_events(calendar="family"|"regensburg", time_min=None, time_max=None, query=None, category=None, color_id=None, max_results=25):

    • Lists appointments within a timeframe including start/end, color name, location, recurrence status, and description.
    • time_min / time_max: ISO format (e.g. 2026-09-20 or 2026-09-20T08:00:00). Defaults to start of today until 30 days ahead. Automatically expands recurring events into individual occurrences.
    • category / color_id: Filter by person or category (e.g. category="arzt" or color_id="11").
    • query: Text filter to search summaries and descriptions.
  2. calendar_check_conflicts(calendar="family"|"regensburg", start_time, end_time=None, buffer_minutes=15):

    • Proactively checks if a proposed slot conflicts with existing events or leaves less than buffer_minutes travel buffer.
    • Returns has_conflict, direct_conflicts, has_buffer_warning, and buffer_warnings.
  3. calendar_create_event(calendar="family"|"regensburg", summary, start_time, end_time=None, recurrence=None, show_as_busy=True, transparency=None, reminder_minutes=None, category=None, color_id=None, description=None, location=None, all_day=False, inclusive_end=True, check_conflicts=True):

    • Adds a new appointment with automatic color coding, recurrence, transparency, phone reminders, and overlap detection.
    • recurrence: Standard RFC 5545 rule or shortcuts:
      • recurrence="RRULE:FREQ=WEEKLY;BYDAY=SA" (weekly Saturday market)
      • recurrence="RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA;UNTIL=20261231T230000Z" (daily except Sun until year end)
      • Shortcuts: "weekly", "daily", "monthly", "workdays".
    • show_as_busy / transparency:
      • For Regensburg city events, markets, festivals, exhibitions: set show_as_busy=False or transparency="transparent" so they are visible on the calendar without blocking family schedule slots or triggering false conflict warnings!
    • reminder_minutes: List of popup alert minutes before event (e.g. [15, 60] or 1440 for 1 day before).
    • inclusive_end: For multi-day all-day events, automatically includes the end date without off-by-one errors.
  4. calendar_update_event(calendar="family"|"regensburg", event_id, summary=None, start_time=None, end_time=None, recurrence=None, show_as_busy=None, transparency=None, reminder_minutes=None, update_series=False, category=None, color_id=None, description=None, location=None):

    • Updates fields, recurrence, transparency, reminders, or recolors an existing event.
    • update_series=True: If event is an occurrence of a series, updates the entire master series instead of just this single occurrence.
  5. calendar_delete_event(calendar="family"|"regensburg", event_id, delete_series=False):

    • Deletes an event.
    • delete_series=True: If event is part of a recurring series, deletes the entire recurring series instead of just this single occurrence.
  6. calendar_move_event(event_id, source_calendar="family", destination_calendar="regensburg"):

    • Moves an event atomically from one calendar to another (e.g. turning an interesting city event from Regensburg into a fixed family plan, or correcting a wrongly booked calendar).
  7. calendar_find_free_slots(calendar="family"|"regensburg"|"both", time_min=None, time_max=None, duration_minutes=60, day_start_hour=8, day_end_hour=20):

    • Queries freebusy to find open, available time windows across calendars.
    • Perfect for answering questions like: "Wann haben wir diese Woche am Nachmittag 2 Stunden frei für einen Ausflug?".
  8. calendar_get_event(calendar="family"|"regensburg", event_id):

    • Retrieves full event metadata.

🧭 Routing & Best Practices for OpenClaw

1. Conflict Guard (Terminkonflikte & Puffer)

  • When a user asks to add an event, check calendar_check_conflicts or inspect the conflict_warning from calendar_create_event.
  • If an overlap or tight buffer (< 15 Min.) exists, explicitly warn the user:

    „⚠️ Achtung: Am Freitag um 17:30 Uhr hat Moritz schon 'Moritz Gartenparty Arbeit' (17:30 - 18:30). Dein Termin 'Spielplatz' würde sich damit überschneiden. Soll ich ihn trotzdem eintragen?“

2. Informational Events vs. Family Commitments (Transparency)

  • When adding city events, festivals, or weekly markets to the regensburg calendar, always pass show_as_busy=False (or transparency="transparent").
  • This keeps the event clearly visible on the calendar while allowing family appointments to be scheduled in parallel without false conflict alerts.

3. Recurring Series (RRULE)

  • When the user asks to add recurring appointments (e.g. weekly markets, sports training, trash collection):
    • Use recurrence="RRULE:FREQ=WEEKLY;BYDAY=..." or convenient shortcuts.
    • Do NOT create manual cron scripts or multiple single events when a native Google Calendar recurrence series can be used.

4. Smart Location & Google Maps Integration

  • If a place or venue is mentioned (e.g. "Dr. Müller in Prüfening", "Westbad"):
    • Resolve the full address or ask the user, and store it in location.
    • This activates Google Maps departure alerts on their smartphone („Aufbruch in 15 Min. wegen Verkehr“).

5. Proaktive Rückfragen & Checklisten (Mental Load Entlastung)

  • When booking medical/baby appointments (e.g. Kinderarzt, U-Untersuchungen, Zahnarzt):
    • Auto-generate or suggest a helpful checklist in description:
      📋 Mitnehmen:
      - U-Heft & Impfpass
      - Versichertenkarte
      - 2x Wickelzeug & Schnuller
      
    • Suggest a reminder (reminder_minutes=[60, 1440]):

      „Termin eingetragen! 🏥 Ich habe eine Erinnerung 1 Stunde vorher eingerichtet. Soll ich noch eine Packliste im Termin hinterlegen?“

6. Timezone & DateTime Precision

  • All dates and times operate in Europe/Berlin (CET/CEST).