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

8.5 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 & CLI Fallbacks

Important

OpenClaw Tool Naming: In OpenClaw, MCP tools from the calendar server are prefixed with calendar__:

  • calendar__calendar_list_events
  • calendar__calendar_check_conflicts
  • calendar__calendar_create_event
  • calendar__calendar_update_event
  • calendar__calendar_delete_event
  • calendar__calendar_move_event
  • calendar__calendar_find_free_slots
  • calendar__calendar_get_event

If MCP execution is unavailable or fails with Tool not found, ALWAYS fall back to the direct Python CLI:

# Suchen:
/home/node/.openclaw/mcp-venv/bin/python3 /home/node/mop-skills/mop-skills/skills/google-calendar/scripts/google_calendar.py list --calendar regensburg --query "Suchbegriff"

# Löschen (inkl. Serie):
/home/node/.openclaw/mcp-venv/bin/python3 /home/node/mop-skills/mop-skills/skills/google-calendar/scripts/google_calendar.py delete <event_id> --calendar regensburg --series

1. calendar__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__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__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"
    • Shortcuts: "weekly", "daily", "monthly", "workdays".
  • show_as_busy / transparency:
    • For Regensburg city events, 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__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__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__calendar_move_event(event_id, source_calendar="family", destination_calendar="regensburg"):

  • Moves an event atomically from one calendar to another.

7. calendar__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.

8. calendar__calendar_get_event(calendar="family"|"regensburg", event_id):

  • Retrieves full event metadata.

🧭 Routing & Best Practices for OpenClaw

⚠️ Strikte Guardrails:

  1. STRIKTE REGEL: NIEMALS ERFOLG VORTÄUSCHEN (NO FAKE CONFIRMATIONS)! Wenn ein Tool fehlschlägt oder not found meldet, behaupte niemals, dass der Termin gelöscht oder erstellt wurde! Nutze den CLI-Fallback oder berichte den Fehler wahrheitsgemäß.
  2. STRIKTE REGEL: KEINE MÄRKTE IN DEN KALENDER EINTRAGEN! Weder Wochenmärkte (Katharinenmarkt, Neupfarrplatz, etc.) noch Bio-Bauernmärkte dürfen in die Kalender eingetragen werden. Dies überfrachtet den Kalender.

1. Conflict Guard (Terminkonflikte & Puffer)

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

2. Informational Events vs. Family Commitments (Transparency)

  • When adding city events, festivals, or exhibitions 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. sports training, trash collection):
    • Use recurrence="RRULE:FREQ=WEEKLY;BYDAY=..." or convenient shortcuts.

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.

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).