# Mit n8n verbinden

Mit n8n baust du Workflows, in denen ein KI-Agent deine Kalender lesen und (in jedem Tarif) Termine anlegen kann — über **alle verbundenen Anbieter gleichzeitig**: Google, Outlook, iCloud, GMX, WEB.DE und mehr. Das kann kein einzelner Google-Calendar- oder Outlook-Node.

Die Adresse (MCP-Server-URL), die du unten einträgst, ist:

```
https://app.kalender-sync.de/mcp
```

:::note[Voraussetzungen]
- Ein Kalender-Sync-Konto mit [verbundenen Kalendern](https://docs.kalender-sync.de/getting-started/connect-first-calendar/) — Lesen und [Termine anlegen](https://docs.kalender-sync.de/ki-assistent/schreibzugriff/) gehen in jedem Tarif.
- **n8n ab Version 2.19.0** (Cloud oder self-hosted). Ältere Versionen verwerfen strukturierte Tool-Ergebnisse — der Agent behauptet dann fälschlich, deine Kalenderliste sei leer. Die Version findest du in n8n unter **Help → About**.
- Ein **Zugriffs-Schlüssel** aus der App (Schritt 1).
:::

## 1. Zugriff und Schlüssel in Kalender Sync erstellen

Öffne in der App **KI-Assistent → Assistent verbinden** und wähle **n8n**. Wie bei jedem Zugang wählst du die Kalender einzeln aus und stellst je Kalender die [Detailtiefe](https://docs.kalender-sync.de/ki-assistent/sichtbarkeit/) ein — nicht freigegebene Kalender existieren für n8n nicht.

Mit **Schlüssel erstellen** bekommst du deinen Zugriffs-Schlüssel (ein Token, beginnt mit `ksa_`). Er wird **nur einmal angezeigt** — kopiere ihn direkt in die n8n-Credentials (Schritt 2). Behandle ihn wie ein Passwort: Wer den Schlüssel hat, hat genau den Zugriff, den du diesem Zugang gegeben hast.

## 2. Workflow bauen

### Der schnelle Weg: mit dem n8n-KI-Builder

n8n kann den Workflow aus einer Beschreibung generieren. Diese Vorlage funktioniert (Builder-Prompts klappen auf Englisch am zuverlässigsten):

```text
Build a workflow with a Chat Trigger connected to an AI Agent.

The AI Agent should use an MCP Client Tool node with these settings:
- Endpoint URL: https://app.kalender-sync.de/mcp
- Server Transport: HTTP Streamable
- Authentication: Header Auth (I will fill in the credential myself)
- Include all available tools

Set the AI Agent's system message to:
"You are a calendar assistant with access to the user's calendars via
Kalender Sync MCP tools. Use list_calendars first to see which calendars
are available and their visibility levels. When asked about availability,
use get_availability. Always mention any warnings the tools return, and
say what your answer does NOT cover."

Use gpt-4.1-mini as the chat model.
```

Der Builder kann keine Credentials anlegen — den Token trägst du danach von Hand ein (nächster Abschnitt, Punkt 3).

### Der manuelle Weg: vier Nodes

1. **Chat Trigger** hinzufügen (oder ein anderer Trigger, siehe Workflow-Ideen unten).
2. **AI Agent**-Node dahinter. Als **Chat Model** empfehlen wir **gpt-4.1-mini** oder ein vergleichbares Nicht-Reasoning-Modell (warum, steht unter Problemlösung).
3. Am Agent unter **Tool** den Node **MCP Client Tool** anhängen:
   - **Endpoint URL:** `https://app.kalender-sync.de/mcp`
   - **Server Transport:** `HTTP Streamable`
   - **Authentication:** `Header Auth` → neues Credential anlegen:
     - **Name:** `Authorization`
     - **Value:** `Bearer ksa_…` (dein Token aus Schritt 1 — das Wort `Bearer`, ein Leerzeichen, dann der Token)
   - **Tools to include:** `All`
4. Dem Agent eine **System Message** geben — die Vorlage aus dem Builder-Prompt oben passt wörtlich.

Wenn alles verbunden ist, zeigt der MCP-Client-Node die verfügbaren Tools an — `list_calendars`, `get_availability`, `search_events` und (bei freigeschaltetem Schreibzugriff) `create_event`, `update_event`, `delete_event`. Die technischen Details zu jedem Tool: [Tool-Referenz](https://docs.kalender-sync.de/ki-assistent/tool-referenz/).

## 3. Testen

Öffne den Chat und frag:

- *„Welche Kalender siehst du und mit welcher Sichtbarkeit?"* — der Agent sollte genau die Kalender nennen, die du in Schritt 1 freigegeben hast, samt Detailtiefe.
- *„Bin ich nächsten Dienstag zwischen 9 und 12 Uhr frei?"* — Verfügbarkeit über alle freigegebenen Kalender hinweg.
- *„Lege morgen 10 Uhr ‚Testtermin per n8n' in [Kalendername] an"* (Kalender mit Schreibzugriff) — und danach: *„Lösch ihn wieder."*

Jeder Aufruf landet im [Zugriffsprotokoll](https://docs.kalender-sync.de/ki-assistent/#was-in-deiner-hand-bleibt) auf der Seite **KI-Assistent** — dort siehst du live, welches Tool wann aufgerufen wurde.

## Workflow-Ideen

**Verfügbarkeits-Bot für Slack oder Telegram.** Slack-/Telegram-Trigger → AI Agent mit Kalender-Sync-Tools → Antwort in den Channel. Kolleg:innen (oder du selbst vom Handy) fragen in natürlicher Sprache nach freien Slots — der Agent prüft Google, Outlook und GMX in einem Aufruf.

**Termin aus Formular.** n8n-Form- oder Webhook-Trigger (z. B. Buchungsanfrage von der Website) → AI Agent extrahiert Datum, Uhrzeit und Anliegen → `create_event` in deinem Arbeitskalender. Der Agent verwaltet nur Termine, die er selbst angelegt hat — deine bestehenden Termine kann er [nicht anfassen](https://docs.kalender-sync.de/ki-assistent/schreibzugriff/).

**Morgen-Briefing.** Schedule-Trigger (werktags 7 Uhr) → AI Agent fasst mit `search_events` und `get_availability` den Tag zusammen → per E-Mail oder Slack: „Heute 4 Termine, größte Lücke 13–15 Uhr."

**Konflikt-Wächter.** Schedule-Trigger stündlich → Agent prüft `get_availability` auf Doppelbuchungen zwischen Job- und Privatkalender → Nachricht nur, wenn sich etwas überschneidet.

## Problemlösung

:::caution[„Ich sehe keine Kalender" — obwohl die Tool-Aufrufe grün sind]
Das ist in fast allen Fällen eine von zwei n8n-Stolperfallen, nicht dein Zugang:

1. **n8n älter als 2.19.0:** Der MCP-Client verwirft dort strukturierte Tool-Ergebnisse, der Agent bekommt eine leere Antwort und ruft das Tool in Schleife auf ([n8n-Issue #26963](https://github.com/n8n-io/n8n/issues/26963)). → n8n aktualisieren.
2. **Reasoning-Modell + Streaming** (z. B. gpt-5-mini mit aktiviertem Streaming im Chat Trigger): Tool-Ergebnisse kommen leer beim Modell an. → Modell auf **gpt-4.1-mini** o. ä. wechseln oder im Chat Trigger den Response Mode von „Streaming" auf „When Last Node Finishes" stellen.

Ob dein Zugang selbst funktioniert, siehst du unabhängig davon im **Zugriffsprotokoll** in der App: Stehen dort erfolgreiche `list_calendars`-Aufrufe, liegt es am Workflow, nicht am Zugang.
:::

- **401 / „Unauthorized":** Token falsch kopiert, abgelaufen oder [widerrufen](https://docs.kalender-sync.de/ki-assistent/#zugang-widerrufen). Prüfe das Credential: Header-Name exakt `Authorization`, Wert exakt `Bearer ksa_…` (mit Leerzeichen). Zur Not in der App einen neuen Token erstellen.
- **Nur SSE als Transport verfügbar:** Dein n8n ist älter als 1.112. Wir unterstützen ausschließlich **HTTP Streamable** — bitte aktualisieren.
- **Ein Kalender fehlt in der Liste:** Er ist für diesen Zugang nicht freigegeben — in der App unter **KI-Assistent → Freigabe bearbeiten** ergänzen. Änderungen wirken sofort, ohne neuen Token.
- **`create_event` schlägt fehl:** Schreibzugriff gibt es [in jedem Tarif](https://docs.kalender-sync.de/ki-assistent/schreibzugriff/) und muss pro Kalender freigeschaltet sein.

## Sicherheit & Kontrolle

Für n8n gilt dasselbe wie für jeden Assistenten-Zugang: Du bestimmst [pro Kalender, was sichtbar ist](https://docs.kalender-sync.de/ki-assistent/sichtbarkeit/), jede Abfrage wird protokolliert (nie der Termininhalt), und der [Widerruf in Kalender Sync](https://docs.kalender-sync.de/ki-assistent/#zugang-widerrufen) macht den Token sofort ungültig — egal, was in n8n gespeichert ist. Lege den Token ausschließlich in n8n-**Credentials** ab, nie direkt in Node-Parametern oder Ausdrücken, damit er nicht in Ausführungs-Logs auftaucht.