Integrations
Uses .ENV files for flexible configuration of database connections, server settings, logging preferences, and other environment variables.
Provides tools for interacting with Apache Doris databases, enabling database metadata retrieval, SQL query execution, schema exploration, and audit log retrieval through a standardized Model Control Panel interface.
Implemented using FastAPI to provide both SSE and HTTP streaming endpoints for clients to interact with the MCP protocol, supporting tool calls and prompt interactions.
Doris MCP Server
Der Doris MCP (Model Control Panel) Server ist ein Backend-Dienst, der mit Python und FastAPI erstellt wurde. Er implementiert das MCP (Model Control Panel)-Protokoll und ermöglicht Clients die Interaktion mit ihm über definierte „Tools“. Er ist primär für die Verbindung mit Apache Doris-Datenbanken konzipiert und nutzt Large Language Models (LLMs) für Aufgaben wie die Konvertierung von Abfragen in natürlicher Sprache in SQL (NL2SQL), die Ausführung von Abfragen sowie die Verwaltung und Analyse von Metadaten.
Kernfunktionen
- MCP-Protokollimplementierung : Bietet standardmäßige MCP-Schnittstellen, unterstützt Tool-Aufrufe, Ressourcenverwaltung und schnelle Interaktionen.
- Mehrere Kommunikationsmodi :
- SSE (Server-Sent Events) : Wird über die Endpunkte
/sse
(Initialisierung) und/mcp/messages
(Kommunikation) bereitgestellt (src/sse_server.py
). - Streamable HTTP : Wird über den einheitlichen
/mcp
-Endpunkt bereitgestellt und unterstützt Anforderung/Antwort und Streaming (src/streamable_server.py
). - (Optional) Stdio : Interaktion über Standard-Eingabe/Ausgabe (
src/stdio_server.py
) möglich, erfordert spezielle Startkonfiguration.
- SSE (Server-Sent Events) : Wird über die Endpunkte
- Toolbasierte Schnittstelle : Kernfunktionen sind als MCP-Tools gekapselt, die Clients bei Bedarf aufrufen können. Die aktuell verfügbaren Schlüsseltools konzentrieren sich auf die direkte Datenbankinteraktion:
- SQL-Ausführung (
mcp_doris_exec_query
) - Datenbank- und Tabellenliste (
mcp_doris_get_db_list
,mcp_doris_get_db_table_list
) - Metadatenabruf (
mcp_doris_get_table_schema
,mcp_doris_get_table_comment
,mcp_doris_get_table_column_comments
,mcp_doris_get_table_indexes
) - Abrufen von Prüfprotokollen (
mcp_doris_get_recent_audit_logs
) Hinweis: Aktuelle Tools konzentrieren sich hauptsächlich auf direkte DB-Operationen.
- SQL-Ausführung (
- Datenbankinteraktion : Bietet Funktionen zum Herstellen einer Verbindung mit Apache Doris (oder anderen kompatiblen Datenbanken) und Ausführen von Abfragen (
src/utils/db.py
). - Flexible Konfiguration : Konfiguriert über eine
.env
Datei, unterstützt Einstellungen für Datenbankverbindungen, LLM-Anbieter/-Modelle, API-Schlüssel, Protokollierungsebenen usw. - Metadatenextraktion : Kann Metadateninformationen aus Datenbanken extrahieren (
src/utils/schema_extractor.py
).
Systemanforderungen
- Python 3.12+
- Datenbankverbindungsdetails (z. B. Doris-Host, Port, Benutzer, Passwort, Datenbank)
Schnellstart
1. Klonen Sie das Repository
2. Abhängigkeiten installieren
3. Umgebungsvariablen konfigurieren
Kopieren Sie die Datei .env.example
nach .env
und ändern Sie die Einstellungen entsprechend Ihrer Umgebung:
Wichtige Umgebungsvariablen:
- Datenbankverbindung :
DB_HOST
: Datenbank-HostnameDB_PORT
: Datenbankport (Standard 9030)DB_USER
: DatenbankbenutzernameDB_PASSWORD
: DatenbankkennwortDB_DATABASE
: Standarddatenbankname
- Serverkonfiguration :
SERVER_HOST
: Hostadresse, auf der der Server lauscht (Standard0.0.0.0
)SERVER_PORT
: Port, auf dem der Server lauscht (Standard3000
)ALLOWED_ORIGINS
: Von CORS zugelassene Ursprünge (durch Komma getrennt,*
erlaubt alle)MCP_ALLOW_CREDENTIALS
: Ob CORS-Anmeldeinformationen zugelassen werden sollen (Standard:false
)
- Protokollierungskonfiguration :
LOG_DIR
: Verzeichnis für Protokolldateien (Standard./logs
)LOG_LEVEL
: Protokollebene (z. B.INFO
,DEBUG
,WARNING
,ERROR
, StandardINFO
)CONSOLE_LOGGING
: Ob Protokolle an die Konsole ausgegeben werden sollen (Standard:false
)
Verfügbare MCP-Tools
In der folgenden Tabelle sind die wichtigsten Tools aufgeführt, die derzeit über einen MCP-Client aufgerufen werden können:
Werkzeugname | Beschreibung | Parameter | Status |
---|---|---|---|
mcp_doris_get_db_list | Rufen Sie eine Liste aller Datenbanknamen auf dem Server ab. | random_string (Zeichenfolge, erforderlich) | ✅ Aktiv |
mcp_doris_get_db_table_list | Rufen Sie eine Liste aller Tabellennamen in der angegebenen Datenbank ab. | random_string (Zeichenfolge, erforderlich), db_name (Zeichenfolge, optional, standardmäßig aktuelle Datenbank) | ✅ Aktiv |
mcp_doris_get_table_schema | Erhalten Sie die detaillierte Struktur der angegebenen Tabelle. | random_string (Zeichenfolge, Erforderlich), table_name (Zeichenfolge, Erforderlich), db_name (Zeichenfolge, Optional) | ✅ Aktiv |
mcp_doris_get_table_comment | Holen Sie sich den Kommentar für die angegebene Tabelle. | random_string (Zeichenfolge, Erforderlich), table_name (Zeichenfolge, Erforderlich), db_name (Zeichenfolge, Optional) | ✅ Aktiv |
mcp_doris_get_table_column_comments | Ruft Kommentare für alle Spalten in der angegebenen Tabelle ab. | random_string (Zeichenfolge, Erforderlich), table_name (Zeichenfolge, Erforderlich), db_name (Zeichenfolge, Optional) | ✅ Aktiv |
mcp_doris_get_table_indexes | Ruft Indexinformationen für die angegebene Tabelle ab. | random_string (Zeichenfolge, Erforderlich), table_name (Zeichenfolge, Erforderlich), db_name (Zeichenfolge, Optional) | ✅ Aktiv |
mcp_doris_exec_query | Führen Sie die SQL-Abfrage aus und geben Sie den Ergebnisbefehl zurück. | random_string (Zeichenfolge, erforderlich), sql (Zeichenfolge, erforderlich), db_name (Zeichenfolge, optional), max_rows (Ganzzahl, optional, Standard 100), timeout (Ganzzahl, optional, Standard 30) | ✅ Aktiv |
mcp_doris_get_recent_audit_logs | Rufen Sie Audit-Protokolldatensätze für einen aktuellen Zeitraum ab. | random_string (Zeichenfolge, erforderlich), days (Ganzzahl, optional, Standard 7), limit (Ganzzahl, optional, Standard 100) | ✅ Aktiv |
Hinweis: Alle Tools benötigen einen random_string
Parameter als Aufrufkennung, der normalerweise automatisch vom MCP-Client verarbeitet wird. „Optional“ und „Erforderlich“ beziehen sich auf die interne Logik des Tools; der Client muss je nach Implementierung möglicherweise Werte für alle Parameter angeben. Die hier aufgeführten Toolnamen sind die Basisnamen; Clients können sie je nach Verbindungsmodus mit einem Präfix versehen sehen (z. B. mcp_doris_stdio3_get_db_list
).
4. Führen Sie den Dienst aus
Wenn Sie den SSE-Modus verwenden, führen Sie den folgenden Befehl aus:
Dieser Befehl startet die FastAPI-Anwendung und stellt standardmäßig sowohl SSE- als auch Streamable HTTP MCP-Dienste bereit.
Service-Endpunkte:
- SSE-Initialisierung :
http://<host>:<port>/sse
- SSE-Kommunikation :
http://<host>:<port>/mcp/messages
(POST) - Streambares HTTP :
http://<host>:<port>/mcp
(Unterstützt GET, POST, DELETE, OPTIONS) - Integritätsprüfung :
http://<host>:<port>/health
- (Potenzielle) Statusprüfung :
http://<host>:<port>/status
(Bestätigen, ob inmain.py
implementiert)
Verwendung
Für die Interaktion mit dem Doris MCP-Server ist ein MCP-Client erforderlich. Der Client verbindet sich mit den SSE- oder Streamable-HTTP-Endpunkten des Servers und sendet Anfragen (wie tool_call
) gemäß der MCP-Spezifikation, um die Tools des Servers aufzurufen.
Hauptinteraktionsfluss:
- Client-Initialisierung : Stellen Sie eine Verbindung zu
/sse
(SSE) her oder senden Sie eineninitialize
an/mcp
(Streamable). - (Optional) Tools entdecken : Der Client kann
mcp/listTools
odermcp/listOfferings
aufrufen, um die Liste der unterstützten Tools, deren Beschreibungen und Parameterschemata abzurufen. - Tool aufrufen : Der Client sendet eine
tool_call
-Nachricht/Anforderung und gibt dabei dentool_name
undarguments
an.- Beispiel: Tabellenschema abrufen
tool_name
:mcp_doris_get_table_schema
(oder der modusspezifische Name)arguments
: Schließen Sierandom_string
,table_name
unddb_name
ein.
- Beispiel: Tabellenschema abrufen
- Handle-Antwort :
- Nicht-Streaming : Der Client erhält eine Antwort mit
result
odererror
. - Streaming : Der Client erhält eine Reihe von
tools/progress
, gefolgt von einer abschließenden Antwort mit demresult
odererror
.
- Nicht-Streaming : Der Client erhält eine Antwort mit
Auf bestimmte Toolnamen und Parameter sollte im src/tools/
-Code verwiesen oder sie sollten über MCP-Erkennungsmechanismen abgerufen werden.
Verbinden mit Cursor
Sie können Cursor entweder im Stdio- oder im SSE-Modus mit diesem MCP-Server verbinden.
Stdio-Modus
Im Stdio-Modus kann Cursor den Serverprozess direkt verwalten. Die Konfiguration erfolgt in der MCP-Server-Einstellungsdatei von Cursor (normalerweise ~/.cursor/mcp.json
oder ähnlich).
Wenn Sie den Stdio-Modus verwenden, führen Sie bitte den folgenden Befehl aus, um das Umgebungsabhängigkeitspaket herunterzuladen und zu erstellen. Beachten Sie jedoch, dass Sie den Projektpfad in die richtige Pfadadresse ändern müssen :
- Cursor konfigurieren: Fügen Sie Ihrer Cursor-MCP-Konfiguration einen Eintrag wie den folgenden hinzu:Copy
- Wichtige Punkte:
- Ersetzen Sie
/path/to/your/doris-mcp
durch den tatsächlichen absoluten Pfad zum Stammverzeichnis des Projekts auf Ihrem System. Das Argument--project
ist entscheidend, damituv
diepyproject.toml
findet und den richtigen Befehl ausführt. - Der
command
ist aufuv
eingestellt (vorausgesetzt, Sie verwendenuv
für die Paketverwaltung, wie inuv.lock
angegeben). Dieargs
umfassen--project
, den Pfad,run
undmcp-doris
(was einem in Ihrerpyproject.toml
definierten Skript entsprechen sollte). - Die Datenbankverbindungsdaten (
DB_HOST
,DB_PORT
,DB_USER
,DB_PASSWORD
,DB_DATABASE
) werden direkt imenv
Block der Konfigurationsdatei festgelegt. Cursor leitet diese an den Serverprozess weiter. Bei der Konfiguration über Cursor ist für diesen Modus keine.env
Datei erforderlich.
- Ersetzen Sie
SSE-Modus
Im SSE-Modus müssen Sie den MCP-Server zunächst unabhängig ausführen und Cursor dann mitteilen, wie eine Verbindung zu ihm hergestellt werden soll.
- Konfigurieren Sie
.env
: Stellen Sie sicher, dass Ihre Datenbankanmeldeinformationen und alle anderen erforderlichen Einstellungen (wieSERVER_PORT
, wenn Sie nicht den Standardwert 3000 verwenden) in der.env
Datei im Projektverzeichnis richtig konfiguriert sind. - Starten Sie den Server: Führen Sie den Server von Ihrem Terminal im Stammverzeichnis des Projekts aus:Dieses Skript liest typischerweise dieCopy
.env
Datei und startet den FastAPI-Server im SSE-Modus (siehe das Skript undsse_server.py
/main.py
für weitere Einzelheiten). Beachten Sie den Host und den Port, auf dem der Server lauscht (Standard ist0.0.0.0:3000
). - Cursor konfigurieren: Fügen Sie Ihrer Cursor-MCP-Konfiguration einen Eintrag wie den folgenden hinzu, der auf den SSE-Endpunkt des laufenden Servers verweist:Hinweis: Im Beispiel wird der StandardportCopy
3000
verwendet. Wenn Ihr Server auf einem anderen Port (z. B.3010
im Beispiel) läuft, passen Sie die URL entsprechend an.
Nachdem Sie einen der Modi in Cursor konfiguriert haben, sollten Sie in der Lage sein, den Server (z. B. doris-stdio
oder doris-sse
) auszuwählen und seine Tools zu verwenden.
Verzeichnisstruktur
Entwicklung neuer Tools
In diesem Abschnitt wird der Prozess zum Hinzufügen neuer MCP-Tools zum Doris MCP-Server unter Berücksichtigung der aktuellen Projektstruktur beschrieben.
1. Nutzen Sie Dienstprogrammmodule
Bevor Sie eine neue Datenbankinteraktionslogik von Grund auf neu schreiben, überprüfen Sie die vorhandenen Dienstprogrammmodule:
doris_mcp_server/utils/db.py
: Bietet grundlegende Funktionen zum Abrufen von Datenbankverbindungen (get_db_connection
) und Ausführen von Rohabfragen (execute_query
,execute_query_df
).doris_mcp_server/utils/schema_extractor.py
(MetadataExtractor
-Klasse) : Bietet hochrangige Methoden zum Abrufen von Datenbankmetadaten, z. B. zum Auflisten von Datenbanken/Tabellen (get_all_databases
,get_database_tables
), zum Abrufen von Tabellenschemata/Kommentaren/Indizes (get_table_schema
,get_table_comment
,get_column_comments
,get_table_indexes
) und zum Zugriff auf Audit-Protokolle (get_recent_audit_logs
). Enthält Caching-Mechanismen.doris_mcp_server/utils/sql_executor_tools.py
(Funktionexecute_sql_query
) : Bietet einen Wrapper fürdb.execute_query
, der Sicherheitsprüfungen enthält (optional, gesteuert durch die UmgebungsvariableENABLE_SQL_SECURITY_CHECK
), SELECT-Abfragen automatischLIMIT
hinzufügt, die Ergebnisserialisierung (Datum, Dezimalzahlen) übernimmt und die Ausgabe in die standardmäßige MCP-Erfolgs-/Fehlerstruktur formatiert. Es wird empfohlen, dies für die Ausführung von benutzerdefiniertem oder generiertem SQL zu verwenden.
Sie können Funktionen aus diesen Modulen importieren und kombinieren, um Ihr neues Tool zu erstellen.
2. Tool-Logik implementieren
Implementieren Sie die Kernlogik Ihres neuen Tools als async
Funktion in doris_mcp_server/tools/mcp_doris_tools.py
. Dadurch bleiben die primären Toolimplementierungen zentralisiert. Stellen Sie sicher, dass Ihre Funktion Daten in einem Format zurückgibt, das sich problemlos in die Standard-MCP-Antwortstruktur integrieren lässt (siehe _format_response
in derselben Datei als Referenz).
Beispiel: Erstellen wir ein einfaches Tool get_server_time
.
3. Registrieren Sie das Tool (Doppelregistrierung)
Aufgrund der separaten Handhabung der Modi SSE/Streamable und Stdio müssen Sie das Tool an zwei Stellen registrieren:
A. SSE/Streamable-Registrierung ( tool_initializer.py
)
- Importieren Sie Ihre neue Tool-Funktion aus
mcp_doris_tools.py
. - Fügen Sie innerhalb der Funktion
register_mcp_tools
eine neue Wrapper-Funktion hinzu, die mit@mcp.tool()
dekoriert ist. - Die Wrapper-Funktion sollte Ihre Kerntoolfunktion aufrufen.
- Definieren Sie den Werkzeugnamen und geben Sie im Dekorator eine ausführliche Beschreibung (einschließlich Parameter, falls vorhanden) an. Denken Sie daran, die obligatorische Parameterbeschreibung
random_string
aus Gründen der Clientkompatibilität einzuschließen, auch wenn Ihr Wrapper diese nicht explizit verwendet.
Beispiel ( tool_initializer.py
):
B. Stdio-Registrierung ( mcp_core.py
)
- Fügen Sie ähnlich wie bei SSE eine neue Wrapper-Funktion hinzu, die mit
@stdio_mcp.tool()
dekoriert ist. - Wichtig: Importieren Sie Ihre Kerntoolfunktion (
mcp_doris_get_server_time
) in die Wrapper-Funktion (in dieser Datei wird ein verzögertes Importmuster verwendet). - Der Wrapper ruft die Kernfunktion des Tools auf. Der Wrapper selbst muss möglicherweise
async def
sein, abhängig davon, wieFastMCP
Tools im Stdio-Modus verarbeitet, selbst wenn die zugrunde liegende Funktion einfach ist (siehe aktuelle Dateistruktur). Stellen Sie sicher, dass der Aufruf übereinstimmt (z. B. verwenden Sieawait
wenn eine asynchrone Funktion aufgerufen wird).
Beispiel ( mcp_core.py
):
4. Neustart und Test
Nachdem Sie das Tool in beiden Dateien implementiert und registriert haben, starten Sie den MCP-Server neu (sowohl im SSE-Modus über ./start_server.sh
als auch stellen Sie sicher, dass der von Cursor verwendete Stdio-Befehl bei Bedarf aktualisiert wird) und testen Sie das neue Tool mit Ihrem MCP-Client (wie Cursor) in beiden Verbindungsmodi.
Beitragen
Beiträge sind über Issues oder Pull Requests willkommen.
Lizenz
Dieses Projekt ist unter der Apache 2.0-Lizenz lizenziert. Weitere Informationen finden Sie in der Datei LICENSE (sofern vorhanden).
You must be authenticated.
Tools
Backend-Dienst, der das Model Control Panel-Protokoll implementiert, das eine Verbindung zu Apache Doris-Datenbanken herstellt und es Benutzern ermöglicht, SQL-Abfragen auszuführen, Metadaten zu verwalten und möglicherweise LLMs für Aufgaben wie die Konvertierung natürlicher Sprache in SQL zu nutzen.
- Kernfunktionen
- Systemanforderungen
- Schnellstart
- Verwendung
- Verbinden mit Cursor
- Verzeichnisstruktur
- Entwicklung neuer Tools
- Beitragen
- Lizenz
Related Resources
Related MCP Servers
- -securityAlicense-qualityA Model Context Protocol server that provides access to BigQuery. This server enables LLMs to inspect database schemas and execute queries.Last updated -63PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables LLMs to interact with Salesforce data through SOQL queries, SOSL searches, and various API operations including record management.Last updated -1053PythonMIT License
- -securityFlicense-qualityA Model Context Protocol server providing both read and write access to PostgreSQL databases, enabling LLMs to query data, modify records, and manage database schemas.Last updated -4JavaScript
ZenML MCP Serverofficial
-securityFlicense-qualityA server implementing Model Context Protocol that enables LLMs to interact with the ZenML platform, providing access to pipeline data, stack information, and the ability to trigger new pipeline runs.Last updated -13Python