arrow arrow--cut calendar callback check chevron chevron--large cross cross--large download filter kununu linkedin magnifier mail marker media-audio media-blog media-video menu minus Flieger phone play plus quote share youtube

SQL war gestern

LLMs und MCP-Server im Einsatz mit Datenbanken

Wer schon einmal versucht hat eine Datenbank in natürlicher Sprache abzufragen, stößt schnell auf Fehlermeldungen wie diese:

" ERROR: syntax error at or near 'Um wieviel Prozent ist die Anzahl unserer Bestellungen im letzten Quartal gestiegen' ".

Übersetzt bedeutet das: Die Datenbank versteht keine natürliche Sprache, sondern nur Code. Technisch versierte Mitarbeitende können diese Frage schnell beantworten, indem sie SQL verwenden. Führungskräfte oder Mitarbeitende aus anderen Abteilungen haben jedoch oft Schwierigkeiten diese Fragen in SELECT-, FROM-, WHERE- Formeln zu übersetzen.

Selbst wenn Mitarbeitende über gute SQL-Kenntnisse verfügen, ist ein komplexes System wie eine Datenbank nicht leicht verständlich: Welche Tabellen gibt es? Wie hängen diese zusammen? Diese Fragen stellen selbst für SQL-Expert*innen große Hürden in einem neuen Umfeld dar.

Mit der Anwendung von Künstlicher Intelligenz wie Chatbots werden diese Hürden deutlich kleiner. Bis vor kurzem sah ein erster Ansatz so aus: Ein Chatbot übersetzt eine Frage von natürlicher Sprache in SQL-Code. Der Code muss in ein separates Tool kopiert und ausgeführt werden. Die Resultate müssen danach von dem/der Anwender*in interpretiert werden.

Foto von Maurice Atrops
Maurice Atrops

Data Engineer

Dieser Ansatz ist zwar eine deutliche Verbesserung im Vergleich zu Zeiten vor Chatbots, er hat aber immer noch einige Schwächen. So müssen Anwender*innen unterschiedliche Tools benutzen und Text hin und her kopieren. Gleichzeitig kennt der Chatbot die abzufragende Datenbank nicht. Das führt entweder zu sehr langen Prompts (Meine Datenbank besitzt Tabelle "ord_intl", die Bestellungen enthält...) oder zu falsch generierten Abfragen ( Table "bestellungen" was not found ).

Genau diese Herausforderungen lösen MCP (Model Context Protocol) Server. Diese Anwendungen verbinden Chatbots mit externen Systemen wie Datenbanken oder Geschäftsanwendungen. Anwender*innen können wie gewohnt ihre Fragen an einen Chatbot stellen und erhalten die passende Antwort aus dem jeweiligen System.

Durch MCP-Server können Unternehmen verschiedenste Systeme integrieren und Arbeitsabläufe sowohl vereinfachen als auch deutlich beschleunigen. In diesem Blogbeitrag stellen wir MCP-Server im Detail vor und skizzieren, wie sie im Unternehmenskontext eingesetzt werden können.

Grundlagen MCP-Server

Das Model Context Protocol (MCP) ist ein offener Standard, der von Anthropic, der Firma hinter Claude AI, entwickelt wurde. MCP ermöglicht die Integration von Chatbots (Large Language Models, LLMs) mit externen Tools wie Datenbanken oder Geschäftsanwendungen. Es verfolgt dabei einen standardisierten Ansatz, der die Kommunikation zwischen LLMs und externen System vereinfachen soll. Es wird oft als "USB für KI-Integrationen" bezeichnet, da es speziell zugeschnittene Integrationen zwischen Chatbots und externen Systemen durch eine universelle Schnittstelle ersetzt.

Die Architektur von MCP basiert auf einem Client-Server Modell. Den "Host" bildet der Chatbot, der Daten aus einem externen System benötigt, um eine Anfrage zu beantworten. Der "Client" existiert innerhalb des Hosts und leitet Anfragen an den MCP-Server weiter bzw. nimmt Ergebnisse vom MCP-Server entgegen. Der "Server" ist das externe System, das Daten an den Chatbot senden soll.

Es gibt verschiedene Möglichkeiten, einen MCP-Server zu verwenden. Der einfachste Weg ist die Nutzung eines bestehenden Servers. Zu vielen populären Tools wie PostgreSQL, GitHub oder Google Maps gibt es bereits vorgefertigte Server. Diese können auf Webseiten wie mcpservers.org eingesehen werden. Gleichzeitig gibt es dort genaue Erklärungen, wie man die Server einbindet und welche Funktionen sie bieten.

Wenn die vorhandenen Server nicht ausreichen oder spezielle Funktionen benötigt werden, kann auch ein eigener MCP-Server implementiert werden. Es gibt Referenzimplementierungen u. a. in Python, TypeScript, Java und C#. Die Implementierung unseres einfachen MCP-Servers für PostgreSQL hat beispielsweise nur einige Stunden gedauert und besteht aus weniger als 100 Zeilen Python-Code.

Neben den technischen Neuerungen bieten MCP-Server ganz konkrete Vorteile für Anwendende aus den unterschiedlichsten Abteilungen eines Unternehmens:

  • Kostenreduktion: Die Kontextinformationen über externe Systeme müssen nicht im Prompt mitgegeben werden. Der MCP-Server interagiert mit den Systemen und fragt benötigte Informationen automatisch an. Das hält Prompts kurz und macht die Chatbot-Nutzung kosteneffizienter.
  • Weniger Kontextwechsel: Durch die hochgradige Integration von Chatbot und externen Systemen müssen Mitarbeitende weniger Kontextwechsel durchführen. Das bedeutet, dass Mitarbeitende kontinuierlich mit dem Chatbot arbeiten können, ohne manuell Informationen aus anderen Systemen heraussuchen zu müssen.
  • Standardisierung: MCP-Server standardisieren den Austausch zwischen Chatbots und externen Systemen. Dadurch wird die Anbindung neuer Systeme beschleunigt und die Fehlersuche bei Problemen erleichtert.
  • Personalisierung: Mitarbeitende können freigegebene MCP-Server nach ihren Wünschen hinzufügen und entfernen. So ist eine Personalisierung des Chatbots auf einzelne Personen oder Abteilungen möglich.
  • Flexibilität: MCP-Server bieten nicht nur die Integration von Datenbanken in Chatbots an. Sie können auch andere weitverbreitete Datenquellen in einem Unternehmen anbinden, beispielsweise ERP-, CRM- oder BI-Systeme. In diesem Kontext können MCP-Server neben Datenbankabfragen auch für andere Aufgaben wie automatisierte Workflows, Datenanalysen oder prädiktive Analysen eingesetzt werden.

Fallbeispiel: Anbindung eines MCP-Servers

Für unser Fallbeispiel haben wir zunächst einen bereits existierenden MCP-Server für eine PostgreSQL-Datenbank eingesetzt. Den betreffenden Server haben wir auf mcp.so ausfindig gemacht. Als Chatbot haben wir Claude verwendet, da die Integrationsmöglichkeiten für MCP-Server zum aktuellen Zeitpunkt hier am besten zu sein scheinen.

Zunächst haben wir Claude Desktop als lokales Interface für das Claude-Modell installiert. Claude Desktop stellt eine Konfigurationsdatei unter %APPDATA%\Claude\claude_desktop_config.json (Windows) bereit. In diese Konfigurationsdatei haben wir die zugehörige Konfiguration des Servers eingetragen, die auf mcp.so zur Verfügung gestellt wird.

Um den MCP-Server auszuführen, benötigen wir entweder Node.js oder Docker. Welches Backend verwendet wird, kann über den entsprechenden Befehl in der Server-Konfiguration angegeben werden. Wir haben uns in unseren Experimenten für Docker entschieden. Docker haben wir ebenfalls für unsere PostgreSQL-Datenbank verwendet. Damit simulieren wir eine firmeninterne Datenbank, die nicht öffentlich zugänglich ist. Da unser Team vor Kurzem an der PyCon-Konferenz teilgenommen hat, nutzen wir den Zeitplan der PyCon als Beispieldatensatz. In diesem Zeitplan sind alle Vorträge inkl. Vortragenden, Räume und kurzen Zusammenfassungen enthalten.

Wir schließen die Einrichtung des MCP-Servers ab, indem wir eine Authentifizierung des Servers gegenüber unserer lokalen Datenbank zulassen. Zu diesem Zweck geben wir die benötigten Informationen (URL, Nutzername, Passwort) über die Konfigurationsdatei an den MCP-Server.

Nachdem der Server eingerichtet ist, können wir Claude Desktop neu starten und den MCP-Server benutzen, um Datenbankanfragen in natürlicher Sprache zu stellen.

Prompt: Can you tell me which Pycon Talks are located in the room 'Titanium3'?

Answer: Great! I found the PyCon talks in the Titanium3 room. Here are the talks scheduled for that room:
PyCon Talks in Titanium3:

  • "Why E.ON Loves Python" - by Christer Friberg
    • Time: April 23, 2025, 11:45 AM - 12:15 PM
    • Description: Join me as I share my 20-year journey with Python and its pivot
  • “Why Exceptions Are Just Sophisticated Gotos - and How to Move Beyond”
    • Time: April 23, 2025, 12:25 PM - 1:10 PM
    • Description: “Why Exceptions Are Just Sophisticated Gotos - and How to Move...”

Wie anfangs beschrieben, wäre diese Abfrage nur ein simpler SQL-Befehl gewesen. Mit Chatbots können wir jedoch auch Datenbankabfragen ausführen, die in reinem SQL nur sehr schwer umzusetzen wären:

Prompt: Can you cluster the talks by topic?

Answer: Based on the talk descriptions, I can cluster the PyCon talks into several key topic areas:

  • AI/Machine Learning & LLMs (9 talks)
    • "Reasonable AI" - Human-machine relationships
    • "Reinforcement Learning Without a PhD" - RL for Python developers
    • [...]
  • "Python Performance & Programming (3 talks)
    • [...]
  • [...]

In diesem Beispiel ist leicht zu erkennen, dass die Kombination aus Chatbots und MCP-Servern deutlich mehr sind als reine Code-Generatoren. Chatbots können mit den von MCP-Servern erhaltenen Ergebnissen arbeiten und komplexe logische Zusammenhänge darstellen. Das wäre mit reiner Code-Generation nur sehr schwer möglich.

Fallbeispiel: Lokaler Chatbot

Für ein weiteres Fallbeispiel haben wir einen lokalen Chatbot auf einem Laptop bereitgestellt, um die Performance von MCP-Servern in diesem Umfeld zu testen. Für diesen Fall haben wir Docker benutzt, um das Phi-4 Mini Large Language Modell von Microsoft über OpenWebUI zur Verfügung zu stellen. Wir haben ebenfalls den MCP-Server selbst implementiert. Er ist eine simplere Version des PostgreSQL MCP-Servers, den wir im vorherigen Fallbeispiel benutzt haben.

Prompt: Can you describe the schema of the table ‘pycon_talks’ in the schema ‘public‘?

Antwort: The schema of the table pycon_talks in the public schema contains five columns with their respective data types as follows:

  1. Column Name: start_datetime Data Type: timestamp without time zone
  2. Column Name: end_datetime

[...]

Wir können offensichtlich mit unserer Datenbank kommunizieren, ansonsten könnte der Chatbot keine Fragen über das Datenschema beantworten. Wenn wir allerdings Fragen über unsere Tabelle beantworten wollen, stoßen wir auf Probleme:

Prompt: What Pycon talks are located in the room ‘Titanium3’?

Answer: To find the Pycon talks located in room 'Titanium3', you can run a SQL query on your PostgreSQL database. Assuming that there is an existing table called pycon_talks with columns for start_datetime, end_datetime, description, room and speaker_name as described above; here is how to use these details: [...]

Prompt: Please execute this SQL query you just described

Answer: Sure! I don't actually possess direct physical interaction with databases, but if you're looking for how an expert might approach executing a given command within their own PostgreSQL setup on the server they have access to (after ensuring all prerequisites like proper permissions are met), here's what you'd do. [...]

Prompt: Perform the following sql query: ‘SELECT * FROM pycon_talks WHERE room='Titanium3';’

Answer: Based on the output you provided, here are two Pycon talks that took place in room 'Titanium3':

  1. Title: Join me as I share my 20-year journey with Python and its pivot Speaker Name: Why E.ON Loves Python – Christer Friberg
  2. Title: "Why Exceptions Are Just Sophisticated Gotos - and How to Move Beyon" Speaker Name: Why Exceptions Are Just Sophisticated Gotos - and How to Move Beyon

Wir haben festgestellt, dass es nicht einfach ist, den Chatbot darauf hinzuweisen, dass er sehr wohl mit der Datenbank kommunizieren kann. Zwar erhalten wir bei den meisten unserer Fragen SQL-Abfragen zurück, diese werden jedoch nicht automatisch auf der Datenbank ausgeführt. Gleichzeitig ist die Performance dieser Prompts um einiges schlechter als bei einem Online-Modell. Das liegt an der Hardware, also dem herkömmlichen Business-Laptop.

Es gibt bereits Möglichkeiten, die Bewertung der Antworten von Chatbots zu automatisieren. Mithilfe dieser Methoden könnten wir das "Hinweisen" des Chatbots über seine Datenbankverbindung automatisieren und in diesem Szenario bessere Ergebnisse erzielen. Die genaue Beschreibung dieser Methoden würde den Rahmen dieses Beitrags sprengen, jedoch leisten Projekte wie CrewAI in diesem Bereich bereits enorme Fortschritte.

Unsere Tests mit lokalen Chatbots zeigen, dass es beim Einsatz von MCP-Servern noch einige Herausforderungen gibt. Dies war allerdings zu erwarten, weshalb wir die Nutzung von Chatbots empfehlen, die auf dezidierten Servern und nicht lokal auf den Rechnern von Mitarbeitenden gehostet werden. Da letztere die datenschutzfreundlichste Alternative zu kommerziellen LLMs wie ChatGPT und Claude sind, erwarten wir allerdings auch hier Fortschritte in nächster Zeit.

Herausforderungen

Neben den Vorteilen, die MCP-Server für Chatbots bieten, gibt es einige Fallstricke bei deren Einsatz in Unternehmen. Die folgenden Aspekte sprechen nicht zwangsläufig gegen den Einsatz von MCP-Servern, sollten bei der Erwägung, sie einzuführen, jedoch berücksichtigt werden:

  • Sicherheitsanforderungen: MCP-Server stellen eine zentrale Schnittstelle zwischen Chatbots einerseits und potenziell sensiblen firmeninternen Systemen andererseits dar. Wie auch Chatbots selbst müssen sie besonders gut abgesichert werden, um den Zugriff von Angreifern auf diese kritischen Systeme zu verhindern. Die erhöhten Anforderungen an Verschlüsselung, Credential-Management und das Monitoring von Verbindungen können einige der Zeitvorteile einer standardisierten Integration einbüßen. Gleichzeitig müssen bestehende Modelle noch besser gegen Prompt-Injection-Angriffe abgesichert werden, da auf diese Weise potenziell schützenswerte Daten exfiltriert werden könnten. Rollen- und Rechtekonzepte, beispielsweise welchen Datenbanknutzer der MCP-Server verwendet und was dieser auf der Datenbank darf, helfen, diese Risiken zu verringern.
  • Implementierungsaufwand: Wie bereits erwähnt, ist ein simpler MCP-Server leicht zu implementieren, und es steht bereits ein großes Ökosystem bestehender Lösungen zur Verfügung. Für einige Firmen könnte dies jedoch nicht ausreichen, da sie sehr exotische oder hochgradig personalisierte Anwendungen, wie beispielsweise ERP-Systeme, verwenden. In diesen Szenarien kann es nötig sein, einen MCP-Server selbst zu entwickeln. Das geht mit einer eigenen Reihe an Herausforderungen einher. Wie bei anderen Softwareprojekten auch, stellen sich hier Fragen wie „Haben wir dafür die Kapazität und das Know-how?” oder „Können wir den MCP-Server langfristig warten, falls Änderungen notwendig werden?”.
  • Vertrauen auf Drittanbieter: Bestehende MCP-Server können die Implementierung neuer Projekte deutlich beschleunigen. Jedoch ist auch hier eine gewisse Vorsicht geboten. Unternehmen müssen den Code bestehender MCP-Server exakt verstehen, um sicherzustellen, dass ihre sensiblen Daten nicht ungewünscht verarbeitet werden, beispielsweise indem der MCP-Server Anfragen und Antworten an einen Dritten weiterleitet. Dieses Risiko sorgt für einen potenziell großen Aufwand bei der Nutzung von bestehenden Servern. Gleichzeitig tritt dieses Risiko bei jedem Update eines MCP-Servers erneut auf.
  • Work in Progress: Wie LLMs im Allgemeinen ist auch das MCP-Protokoll noch recht jung und das Feld entwickelt sich täglich weiter. Die stetige Weiterentwicklung kann einen erhöhten Aufwand für Anwender*innen bedeuten, da bestehende Integrationen regelmäßig angepasst werden müssen. Dies betrifft nicht nur Eigenentwicklungen, sondern auch externe MCP-Server.
  • Manuelle Einrichtung: Wie in unseren Fallbeispielen beschrieben, ist die Einrichtung von MCP-Servern ein manueller Prozess.
  • Dabei müssen Konfigurationsdateien von Anwender*innen mit den korrekten Befehlen angepasst werden. Dieser Prozess ist fehleranfällig und die Fehlersuche unterscheidet sich je nach MCP-Server erheblich. Dies könnte die Verwendung von MCP-Servern in einem Umfeld mit hunderten ggf. nicht technikaffinen Nutzer*innen erschweren.
  • Datenschutz: Ein Thema was im Kontext IT und insbesondere Künstliche Intelligenz immer eine große Rolle spielt ist Datenschutz. Auch bei MCP-Servern gibt es im Hinblick auf die DSGVO einige Punkte, die beachtet werden sollten. So ist beispielsweise nicht immer eindeutig, ob MCP-Server aufgrund der Abfrage eines Mitarbeitenden, eines anderen Chatbots oder eines Systemprompts sensible Daten erfragen. Diese Ambivalenz macht es außerdem schwierig, MCP-Server mit den passenden Rechten auszustatten, da sie grundsätzlich auf alle Daten zugreifen müssten. Darüber hinaus lassen sich Datenflüsse in diesen Szenarien nur schwer dokumentieren. Somit ist nur schwer nachvollziehbar, welcher Benutzer aus welchen Gründen auf potenziell sensible Daten zugegriffen hat.

Fazit

Wir haben gezeigt, was MCP-Server sind und wie mögliche Einsatzbereiche aussehen könnten. MCP-Server bieten vielversprechende Möglichkeiten, um Chatbots flexibel mit unterschiedlichen Tools und externen Systemen zu verbinden. Dennoch zeigen sich in der Praxis verschiedene Herausforderungen, die den Einsatz erschweren könnten. Wer MCP-Server nutzen möchte, sollte diese Nachteile im Blick behalten und frühzeitig Lösungen für die wichtigsten Stolpersteine entwickeln. Nichtsdestotrotz sind MCP-Server nach wie vor ein besonders spannender Ansatz, der eng mit Chatbots verzahnt ist.