In der heutigen Zeit gewinnt die Künstliche Intelligenz immer mehr an Bedeutung, und mit ihr wachsen auch die Anforderungen an sichere und leistungsfähige Entwicklungsumgebungen. Ein besonders wichtiger Aspekt ist dabei das Protokoll MCP (Model Context Protocol), das im AI-Entwicklungssektor zunehmend an Popularität gewinnt. Die Kommunikation zwischen Client und Server im MCP-Protokoll basiert auf einer klassischen Client/Server-Architektur. Für Anwender bedeutet das, dass der MCP Server lokal ausgeführt werden muss, um die erforderlichen Dienste bereitstellen zu können. Doch die herkömmlichen Methoden, den MCP Server zu betreiben, bergen einige gravierende Sicherheitsrisiken.
Gerade wenn Entwickler Tools wie npx im NPM-Ökosystem oder uvx im Python-Ökosystem nutzen, besteht eine reale Gefahr, Opfer von sogenannten Supply-Chain-Angriffen zu werden. In solchen Fällen kann durch die ungewollte Ausführung bösartiger Pakete vertrauliche Information offengelegt oder das System kompromittiert werden. Die Sicherheitsproblematik ist kein theoretisches Problem mehr. In den letzten Jahren kam es immer wieder zu erfolgreichen Angriffen auf Open-Source-Pakete, die Millionen von Entwicklern und Unternehmen maßgeblich schädigten. Die sogenannten Dependency Confusion-Angriffe sind nur ein Beispiel für diese Form der Gefährdung.
Dabei nutzen Angreifer die Tatsache aus, dass interne Pakete und öffentliche Pakete denselben Namen haben, und schleusen so ihre bösartigen Versionen im Paketmanager ein. Ein bekanntes Sicherheitsrisiko wurde beispielsweise Anfang 2021 durch den Sicherheitsforscher Alex Birsan dokumentiert, der mit der Dependency-Confusion-Technik interne Server zahlreicher großer Unternehmen infiltrieren konnte. Weitere Vorfälle zeigten, wie beliebte Bibliotheken wie ua-parser-js oder coa kompromittiert wurden, um schädlichen Code zu verbreiten, darunter Passwortdiebstahl, Kryptowährungs-Mining und Ransomware. Besonders alarmierend ist, dass Angreifer immer raffiniertere Methoden wie Typosquatting – also das absichtliche Verwenden von Namen ähnlich zu bekannten Bibliotheken – einsetzen, um Entwickler in die Falle zu locken. Diese Angriffe wirken sich nicht nur auf die Softwareentwicklung, sondern auch direkt auf Endnutzer und Unternehmen aus.
Um sich gegen diese Risiken zu schützen, kommen Container-Technologien wie Docker zunehmend zum Einsatz. Dank der Isolationseigenschaften von Docker können MCP Server in einer Sandbox-Umgebung ausgeführt werden, die das System vor unerwünschtem Zugriff schützt und gleichzeitig eine flexible Steuerung und Verwaltung ermöglicht. Docker ermöglicht es, Anwendungen mit ihren Abhängigkeiten in einer isolierten Umgebung zu betreiben, die vom Host-System getrennt ist. Dadurch wird das Risiko minimiert, dass schädlicher Code das Host-System kompromittiert oder vertrauliche Daten abgreift. Darüber hinaus können verschiedene Versionen und Konfigurationen des MCP Servers durch Docker-Container parallel und unabhängig voneinander betrieben werden, was die Entwicklungs- und Testprozesse deutlich erleichtert.
Eine wichtige Komponente, die den sicheren Einsatz des MCP Servers in Docker erleichtert, ist das Projekt MCP Proxy. Dieses Projekt wurde ursprünglich entwickelt, um MCP Server auf einem Server laufen zu lassen und die Client-Last zu reduzieren. Dabei lag ein besonderer Fokus auf der Vereinfachung der Mobile Client-Anbindung. Besonders hervorzuheben ist, dass MCP Proxy MCP Server in Docker Container einbettet und das MCP-Protokoll in das Ereignisstrom-Protokoll SSE (Server-Sent Events) umwandelt. Dies erlaubt die Kommunikation via SSE direkt vom MCP Client zum MCP Server, ohne dass dieser lokal direkt ausgeführt werden muss.
Der Nutzen dieser Architektur zeigt sich besonders in der erhöhten Sicherheit. Indem die Kommandos nicht mehr direkt per npx oder uvx auf dem Host-System ausgeführt werden, sondern innerhalb eines Docker Containers laufen, verringert sich das Risiko, dass Schadcode unbemerkt auf den Rechner gelangt oder Systemdateien ausgelesen werden. Zwar ist es derzeit noch möglich, dass einige Konfigurationsdateien des MCP Proxy gelesen werden können, doch der Entwickler arbeitet bereits an Verbesserungen wie restriktiveren Dateiberechtigungen und Ausführung der Befehle als nicht privilegierter Benutzer. Somit wird das Angriffsfenster weiter verkleinert und das Sicherheitsniveau angehoben. Für Anwender, die einen eigenen VPS besitzen und Docker bereits installiert haben, ist es denkbar einfach, MCP Proxy zu starten.
Die Ausführung erfolgt beispielsweise über einen Docker-Run-Befehl, der den MCP Proxy Container startet, die nötigen Ports freigibt und die Konfigurationsdatei in den Container einbindet. Für diejenigen, die keinen eigenen Server betreiben möchten, bieten kostenfreie oder kostengünstige Container-Hosting-Dienste wie claw.cloud eine attraktive Alternative. Trotz Containergröße-Limitationen lassen sich durch entsprechende Cache- und Speicherkonfigurationen stabile und performante Umgebungen schaffen. Dabei ist auf ausreichend CPU, Speicher und vor allem Speicherplatz zu achten, um Performanceneinbrüche und Containerabstürze zu vermeiden.
Die Konfiguration des MCP Proxy erfolgt über eine zentrale JSON-Datei, die alle Parameter inklusive der Server-Definitionen und Authentifikationsmechanismen enthält. Dies ermöglicht eine flexible Anpassung an verschiedene Anwendungsfälle, etwa durch Angabe unterschiedlicher MCP Server sowie die Integration persönlicher Tokens für APIs. Besonders einfach ist es, die Nutzung von MCP Proxy in Clients wie ChatWise umzusetzen, indem lediglich die Umstellung auf das SSE-Protokoll vorgenommen wird. Dieses Vorgehen macht die Einbindung sowohl für Desktop- als auch für mobile Clients besonders transparent und unkompliziert. Zusammenfassend stellt Docker als Sandbox-Technologie eine hervorragende Lösung dar, um MCP Server sicher und effizient zu betreiben.