Diese Anleitung erklärt, wie Sie externe Model Context Protocol (MCP)-Server mit Discourse-AI-Agenten verbinden, sodass jeder MCP-kompatible Tool-Anbieter direkt innerhalb des KI-Bots genutzt werden kann.
Erforderliche Benutzerstufe: Administrator
Was bedeutet “Bring Your Own MCP”?
Model Context Protocol ist ein offener Standard (ursprünglich von Anthropic vorgeschlagen), der es KI-Agenten ermöglicht, über eine standardmäßige HTTP/JSON-RPC-Schnittstelle mit externen Tool-Servern zu kommunizieren. Ein MCP-Server stellt ein Menü an “Tools” bereit – Funktionen mit typisierten Eingaben –, die ein LLM aufrufen kann, um Aufgaben zu erledigen.
Discourse AI fungiert nun als MCP-Client. Sie registrieren jeden HTTPS-MCP-Server im Admin-Bereich, Discourse entdeckt dessen verfügbare Tools, und diese Tools werden zu vollwertigen Bestandteilen innerhalb jedes von Ihnen gewählten KI-Agenten. Es ist kein JavaScript zu schreiben; die Tools werden vom Remote-Server definiert.
Dies unterscheidet sich von benutzerdefinierten Script-Tools, die das Schreiben von JavaScript erfordern, das innerhalb von Discourse ausgeführt wird. Mit MCP bringen Sie einen bereits laufenden externen Server mit.
Zusammenfassung
- Registrierung eines MCP-Servers (URL + optionale Authentifizierung)
- Discourse entdeckt und zwischenspeichert die Tools des Servers automatisch
- Zuweisung des Servers an einen oder mehrere KI-Agenten
- Optionale Einschränkung der Tools, die jeder Agent nutzen darf
- Tools werden zur Laufzeit vom LLM aufgerufen und über Discourse an den externen Server weitergeleitet
Registrierung eines MCP-Servers
Navigieren Sie zu:
Admin → Plugins → Discourse AI → Tools → Reiter MCP-Server → Neuer MCP-Server
Füllen Sie die folgenden Felder aus:
| Feld | Beschreibung |
|---|---|
| Name | Eine für Menschen lesbare Bezeichnung (wird im Agent-Editor und in Protokollen angezeigt) |
| Beschreibung | Wofür dieser Server verwendet wird (Referenz für Administratoren) |
| URL | Der HTTPS-Endpunkt des MCP-Servers – muss eine öffentliche HTTPS-URL sein, keine privaten IPs |
| Authentifizierung | Eine der folgenden Optionen: Keine Authentifizierung, Header-Anmeldeinformationen oder OAuth |
| Timeout (Sekunden) | Wie lange Discourse pro Anfrage wartet – Standardwert 30, Maximum 300 |
| Aktiviert | Umschalter, um den Server vorübergehend zu deaktivieren, ohne ihn zu löschen |
URLs müssen HTTPS verwenden.
localhostund RFC-1918-private Adressen sind blockiert (SSRF-Schutz wird serverseitig durchgesetzt).
Authentifizierungsoptionen
Keine Authentifizierung
Der Server ist öffentlich erreichbar. Es werden keine Anmeldeinformationen gesendet.
Header-Anmeldeinformationen
Ein geheimer Wert wird bei jeder Anfrage als HTTP-Header eingefügt.
- Erstellen Sie zunächst eine Anmeldeinformation unter Admin → KI → Anmeldeinformationen
- Wählen Sie diese im Formular für den MCP-Server als Anmeldeinformation aus
- Legen Sie den Namen des Auth-Headers fest (Standard:
Authorization) - Legen Sie das optionale Auth-Schema-Präfix fest (Standard:
Bearer)
Der an den MCP-Server gesendete Anfrage-Header lautet:
Authorization: Bearer <geheimer-wert>
Sie können sowohl den Header-Namen als auch das Schema ändern, um jede von Ihrem Server erforderliche Authentifizierungsart zu unterstützen (z. B. X-Api-Key: <wert>, indem Sie das Schema leer lassen).
OAuth
Discourse implementiert einen vollständigen OAuth 2.0- und PKCE-Flow als MCP-Client. Dies unterstützt MCP-Server, die ihre Tools hinter OAuth schützen.
Einrichtungsschritte:
- Setzen Sie die Authentifizierung auf
OAuth - Wählen Sie die Client-Registrierung:
- Client-Metadaten-Dokument (Standard) – Discourse veröffentlicht seine eigenen OAuth-Client-Metadaten unter
https://ihre-seite.de/discourse-ai/mcp/oauth/client-metadata. Wenn der MCP-Server die RFC 7591 Dynamic Client Registration unterstützt, registriert sich Discourse automatisch. - Manuelle Client-Anmeldeinformationen – Geben Sie Ihre vorregistrierte OAuth-Client-ID ein und wählen Sie eine OAuth-Client-Geheimnis-Anmeldeinformation aus
- Client-Metadaten-Dokument (Standard) – Discourse veröffentlicht seine eigenen OAuth-Client-Metadaten unter
- Optional können Sie OAuth-Berechtigungen (durch Leerzeichen getrennt) festlegen
- Speichern Sie den Server
- Klicken Sie auf Verbinden – Discourse leitet Sie über die Autorisierungsseite des Anbieters weiter
- Nach der Autorisierung werden Sie zum Admin-Bereich zurückgeführt, und der Status zeigt Verbunden
Erweiterte OAuth-Optionen (Umschalter “Erweiterte Optionen anzeigen”):
| Option | Zweck |
|---|---|
| OAuth-Autorisierungsparameter | JSON-Objekt, das in die Autorisierungsanfrage eingefügt wird (z. B. {"access_type":"offline"}) |
| OAuth-Token-Parameter | JSON-Objekt, das in Token-Austauschanfragen eingefügt wird |
| Refresh-Token erforderlich | Verbindungsabbruch, wenn der Anbieter kein Refresh-Token zurückgibt |
Discourse aktualisiert Zugriffstoken automatisch vor Ablauf und versucht bei Vorhandensein eines Refresh-Tokens erneut, wenn ein 401-Fehler auftritt.
Testen der Verbindung
Bevor Sie einen Server einem Agenten zuweisen, verwenden Sie die Schaltfläche Verbindung testen im Editor-Formular. Dadurch wird sofort eine MCP-Sitzung initialisiert, tools/list aufgerufen und Folgendes zurückgegeben:
- Verhandelte MCP-Protokollversion
- Anzahl der entdeckten Tools
- Namen aller Tools
Wenn der Test fehlschlägt, wird die Fehlermeldung des Servers (oder ein Timeout-Indikator) inline angezeigt.
Wie Discourse Tools entdeckt
Discourse folgt der MCP-Spezifikation 2025-03-26. Die Verbindungssequenz lautet:
Discourse → POST / { method: "initialize", params: { protocolVersion, capabilities, clientInfo } }
Server → { result: { protocolVersion, capabilities } } + Mcp-Session-Id-Header
Discourse → POST / { method: "notifications/initialized" } (Sitzungs-Handshake abgeschlossen)
Discourse → POST / { method: "tools/list", session_id: … }
Server → { result: { tools: [ { name, description, inputSchema } … ] } }
Tool-Definitionen werden pro Server für 1 Stunde zwischengespeichert. Nach Ablauf des Caches wird dieser transparent durch einen Hintergrundjob aktualisiert. Der Cache-Schlüssel ist pro Site/pro Server, sodass Installationen mit mehreren Sites isoliert sind.
Sie können eine Aktualisierung auch manuell auslösen, indem Sie auf Verbindung testen klicken – dies lädt immer Live-Daten.
Der Gesundheitsstatus des Servers (healthy / error) wird bei jeder Cache-Aktualisierung aktualisiert.
Zuweisung von MCP-Servern an KI-Agenten
Sobald ein Server registriert ist, weisen Sie ihn einem Agenten zu:
- Gehen Sie zu Admin → Plugins → Discourse AI → Agenten und bearbeiten oder erstellen Sie einen Agenten
- Scrollen Sie zum Abschnitt MCP-Server (unter dem regulären Tools-Abschnitt)
- Die Liste zeigt alle aktivierten MCP-Server mit ihrer Tool-Anzahl und den geschätzten Token-Kosten an
- Schalten Sie einen Server ein – er steht nun diesem Agenten zur Verfügung
Tipp: Standardmäßig werden alle Tools eines Servers dem Agenten zur Verfügung gestellt. Die Lokalisierungszeichenfolge sagt es treffend: “Ausgewählte MCP-Server geben standardmäßig alle ihre Tools frei. Schränken Sie sie pro Agent ein, um den Token-Verbrauch zu reduzieren und die Tool-Auswahl fokussiert zu halten.”
Auswahl spezifischer Tools pro Agent
Das Vorhandensein von Dutzenden verfügbarer Tools erhöht die Token-Kosten jeder Nachricht (jede Tool-Definition wird im System-Prompt an das Modell gesendet). Um alles schlank zu halten:
- Klicken Sie im Agent-Editor neben einem zugewiesenen MCP-Server auf Tools auswählen
- Ein Modal zeigt jedes Tool, das der Server derzeit offenlegt, mit seiner Beschreibung und Parameterliste an
- Wählen Sie nur die Tools aus, die dieser Agent benötigt
- Klicken Sie auf Speichern – der Agent sieht nun nur noch die ausgewählte Teilmenge
Die ai_agent_mcp_servers-Verbindungstabelle speichert selected_tool_names als JSONB-Array. Ein leeres Array bedeutet “alle Tools aktiviert”.
Tool-Benennung und Konfliktlösung
MCP-Tool-Namen müssen innerhalb der Tool-Liste eines einzelnen Agenten (einschließlich der integrierten und benutzerdefinierten Script-Tools des Agenten) eindeutig sein. Discourse löst Konflikte automatisch:
- Wenn zwei verschiedene MCP-Server ein Tool mit dem gleichen Namen offenlegen, benennt Discourse sie um:
servername__toolname - Wenn ein integriertes Discourse-Tool und ein MCP-Tool denselben Namen haben, wird auch das MCP-Tool umbenannt
- Wenn es nach der Umbenennung immer noch Kollisionen gibt, wird ein numerisches Suffix angehängt (
_2,_3, …)
Der in der LLM-Aufruf verwendete function_name kann sich daher vom rohen tool_name auf dem MCP-Server unterscheiden. Dies wird transparent behandelt – die MCP-Tool-Klasse speichert den ursprünglichen tool_name_value separat und verwendet ihn beim Aufruf des Servers.
Funktionsweise von Tool-Aufrufen zur Laufzeit
Wenn das LLM entscheidet, ein MCP-Tool zu verwenden:
- Wiederverwendung der Sitzung: Discourse sucht in der aktuellen Bot-Kontext (
context.mcp_state) nach einer zwischengespeicherten MCP-Sitzungs-ID für diesen Server. Sitzungen werden pro Bot-Antwortkette erstellt und über Tool-Aufrufe an denselben Server hinweg wiederverwendet. - Initialisierung bei Bedarf: Wenn keine Sitzung existiert, wird ein neuer
initialize- undnotifications/initialized-Handshake ausgeführt. - Aufruf:
POST /mit{ method: "tools/call", params: { name: tool_name, arguments: params } } - Sitzungslaufzeitende: Wenn der Server
404zurückgibt (abgelaufene Sitzung), initialisiert Discourse automatisch neu und versucht es einmal erneut. - Normalisierung der Antwort: MCP-Inhaltselemente vom Typ
textwerden verkettet. Nicht-Text-Elemente werden JSON-seriellisiert.structuredContentwird als schön formatiertes JSON ausgegeben. - Fehlerergebnis: Wenn der Server
isError: truezurückgibt, erhält der Bot eine Fehlermeldung statt eines Ergebnisses.
Die Serverantwort kann reines JSON oder ein SSE-Stream sein – Discourse behandelt beides.
Anzeige der Token-Kosten
Im Agent-Editor zeigt jeder zugewiesene MCP-Server eine geschätzte Token-Anzahl an. Diese wird unter Verwendung des OpenAI-cl100k_base-Tokenizers berechnet, der auf die vollständige JSON-Signatur jedes Tools angewendet wird (Name + Beschreibung + Eingabeschema). Dies ist eine Näherung – die tatsächlichen Kosten hängen vom Tokenizer Ihres LLM ab.
Die Aufschlüsselung der Token-Kosten wird angezeigt, um Ihnen fundierte Entscheidungen darüber zu ermöglichen, welche Server und Tools einem bestimmten Agenten zugewiesen werden sollen.
Fehlerbehebung
| Symptom | Was zu prüfen ist |
|---|---|
| Verbindungstest schlägt mit Timeout fehl | Erhöhen Sie das Timeout (Sekunden). Standardwert ist 30. Wenn der Server langsam initialisiert, versuchen Sie 60–120. |
| Verbindungstest erfolgreich, aber Tools erscheinen nicht im Agenten | Stellen Sie sicher, dass der Server aktiviert ist und dass der Agent ihn im Abschnitt MCP-Server aktiviert hat. |
| OAuth-Status zeigt “Benötigt Aufmerksamkeit” | Der letzte OAuth-Fehler wird im Editor-Formular angezeigt. Häufige Ursachen: Refresh-Token abgelaufen (Klicken Sie auf “Erneut verbinden”), Server gab unerwartete Berechtigungen zurück oder die Client-Metadaten-URL ist von Ihrem Server aus nicht erreichbar. |
Tool-Namen sehen aus wie myserver__sometool |
Normal – ein anderes Tool (integriert oder von einem anderen Server) hatte denselben Namen. Das LLM sieht und verwendet diesen umbenannten Namen automatisch. |
| Gesundheitsstatus zeigt nach einer Weile “error” | Der Hintergrundaktualisierungsjob konnte den Server nicht erreichen. Überprüfen Sie /logs auf Ihrer Site und stellen Sie sicher, dass der MCP-Server von Discourse-Host aus erreichbar ist. |
| Tools mitten im Gespräch nicht mehr funktionsfähig | Sitzungslaufzeitende. Discourse versucht pro Tool-Aufruf automatisch einmal erneut, aber wenn der Server konsequent neu startet, verkürzen Sie seine Sitzungs-TTL oder untersuchen Sie die serverseitigen Protokolle. |
Für eine tiefere Fehlersuche aktivieren Sie den Zugriff auf KI-Transkripte über ai_bot_debugging_allowed_groups und untersuchen Sie das vollständige Gesprächsprotokoll.
Technische Referenz
MCP-Protokoll-Details
| Eigenschaft | Wert |
|---|---|
| Protokollversion | 2025-03-26 |
| Transport | HTTP POST (JSON-RPC 2.0) |
| SSE-Unterstützung | Ja (für Streaming von tools/call-Antworten) |
| Sitzungsverwaltung | Mcp-Session-Id-HTTP-Header |
| Maximale Antwortgröße | 5 MB |
| Client User-Agent | Discourse AI MCP Client / <version> |
Unterstützung von JSON-Schemata
Discourse löst die folgenden JSON-Schema-Konstrukte in Tool-inputSchema-Definitionen, bevor sie an das LLM übergeben werden:
$ref– wird gegen die$defs/definitionsdes Root-Schemas aufgelöstallOf– zusammengeführt (Properties- und Required-Arrays werden union-mäßig zusammengeführt)anyOf/oneOf– die erste nicht-null-Variante wird verwendet
Relevante Quelldateien
plugins/discourse-ai/lib/mcp/client.rb– MCP-HTTP-Client (Sitzung, Aufruf, OAuth-Wiederholversuch)plugins/discourse-ai/lib/mcp/tool_registry.rb– Tool-Caching, Konfliktlösungplugins/discourse-ai/lib/agents/tools/mcp.rb– Tool-Klasse, die MCP-Aufrufe für den Agenten-Laufzeitmodus kapseltplugins/discourse-ai/app/models/ai_mcp_server.rb– Server-Modell, OAuth-Token-Verwaltungplugins/discourse-ai/app/models/ai_agent_mcp_server.rb– Tool-Auswahl pro Agentplugins/discourse-ai/lib/mcp/oauth_flow.rb– OAuth 2.0- und PKCE-Flow
Verwandte Themen
- KI-Bot – Benutzerdefinierte Tools (skriptbasiert)
- Discourse AI Persona-/Agenten-Leitfaden
- Discourse MCP ist da! (Discourse als MCP-Server)
Die Discourse-als-MCP-Server-Funktion (discourse/discourse-mcp) ist das Gegenstück dazu: Sie ermöglicht es externen KI-Clients (Claude Code, Cursor usw.), Ihre Discourse-Site zu lesen und zu schreiben. Diese Anleitung ist das Gegenteil – sie ermöglicht es Ihren Discourse-AI-Agenten, externe MCP-Server aufzurufen.