Der MCP-Client dient als Kommunikationsbrücke zwischen deinem Server und MCP-Servern. Stell ihn dir als deinen Zugangspunkt zu allen Tools vor, die ein MCP-Server bereitstellt. Wenn du externe Tools oder Dienste nutzen musst, übernimmt der Client die gesamte Nachrichtenübermittlung und die Protokolldetails für dich.
Transportunabhängige Kommunikation
Eine der wichtigsten Stärken von MCP ist die Transportunabhängigkeit - eine elegante Art zu sagen, dass Client und Server über verschiedene Kommunikationsmethoden miteinander sprechen können. Das gängigste Setup lässt sowohl den MCP-Client als auch den Server auf derselben Maschine laufen, wo sie über Standard-Ein-/Ausgabe kommunizieren.

Du bist jedoch nicht auf diesen Ansatz beschränkt. MCP-Clients und -Server können sich auch verbinden über:
- HTTP
- WebSockets
- Verschiedene andere Netzwerkprotokolle

Nachrichtentypen
Nach der Verbindung tauschen Client und Server bestimmte Nachrichtentypen aus, die in der MCP-Spezifikation definiert sind. Die wichtigsten Nachrichtentypen, mit denen du arbeiten wirst, sind:

ListToolsRequest/ListToolsResult: Der Client fragt den Server „welche Tools bietest du an?" und erhält eine Liste der verfügbaren Tools zurück.

CallToolRequest/CallToolResult: Der Client bittet den Server, ein bestimmtes Tool mit bestimmten Argumenten auszuführen, und erhält dann die Ergebnisse.

Vollständiges Ablaufbeispiel
So arbeiten alle Teile in einem realen Szenario zusammen. Nehmen wir an, ein Nutzer fragt „Welche Repositories habe ich?" - hier ist der vollständige Kommunikationsablauf:

Der Prozess beginnt, wenn ein Nutzer eine Anfrage an deinen Server sendet. Dein Server erkennt, dass er Claude eine Liste der verfügbaren Tools bereitstellen muss, bevor er die Anfrage stellt.

Dein Server fragt den MCP-Client nach Tools, der eine ListToolsRequest an den MCP-Server sendet und ein ListToolsResult zurückerhält.

Jetzt hat dein Server alles, was er braucht, um die erste Anfrage an Claude zu stellen - sowohl die Frage des Nutzers als auch die verfügbaren Tools.

Claude prüft die Tools und entscheidet, dass es eines aufrufen muss, um die Frage zu beantworten. Es antwortet mit einer Tool-Nutzungsanfrage.

Dein Server bittet den MCP-Client, das von Claude angeforderte Tool auszuführen. Der MCP-Client sendet eine CallToolRequest an den MCP-Server, der dann die eigentliche Anfrage an GitHub stellt.

GitHub liefert die Repository-Daten zurück, die als CallToolResult durch den MCP-Server, dann zum MCP-Client und schließlich zu deinem Server fließen.

Dein Server sendet die Tool-Ergebnisse in einer Folgenachricht zurück an Claude. Claude hat nun alle Informationen, die es benötigt, um eine vollständige Antwort zu formulieren.

Schließlich antwortet Claude mit der formatierten Antwort, die dein Server an den Nutzer zurückgibt.
Ja, dieser Ablauf umfasst viele Schritte, aber jede Komponente hat eine klare Verantwortlichkeit. Der MCP-Client abstrahiert die Komplexität der Serverkommunikation und lässt dich dich auf den Aufbau deiner Anwendungslogik konzentrieren. Wenn wir unseren eigenen MCP-Client und -Server implementieren, wirst du sehen, wie jedes Teil in der Praxis zusammenpasst.