Der MCP-Client dient als Kommunikationsbrücke zwischen deinem Server und MCP-Servern. Er ist dein Zugangspunkt zu allen Tools, die ein MCP-Server bereitstellt, und übernimmt den Nachrichtenaustausch und die Protokolldetails, sodass deine Anwendung das nicht tun muss.
Transportunabhängige Kommunikation
Eine der wichtigsten Stärken von MCP ist die Transportunabhängigkeit - eine elegante Art zu sagen, dass Client und Server je nach deinem Setup über verschiedene Protokolle kommunizieren können.

Das gängigste Setup lässt sowohl den MCP-Client als auch den Server auf derselben Maschine laufen und über Standard-Ein-/Ausgabe kommunizieren. Du kannst sie aber auch verbinden über:
- HTTP
- WebSockets
- Verschiedene andere Netzwerkprotokolle

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

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

CallToolRequest/CallToolResult: Der Client fordert den Server auf, ein bestimmtes Tool mit gegebenen Argumenten auszuführen, und erhält anschließend die Ergebnisse.
Wie alles zusammenwirkt
Hier ist ein vollständiges Beispiel, das zeigt, wie eine Benutzeranfrage durch das gesamte System fließt - von deinem Server über den MCP-Client zu externen Diensten wie GitHub und zurück zu Claude.
Angenommen, ein Benutzer fragt „Welche Repositories habe ich?" Hier ist der schrittweise Ablauf:
- Benutzeranfrage: Der Benutzer übermittelt seine Frage an deinen Server
- Tool-Erkennung: Dein Server muss wissen, welche Tools verfügbar sind, um sie an Claude zu senden
- List-Tools-Austausch: Dein Server fragt den MCP-Client nach verfügbaren Tools
- MCP-Kommunikation: Der MCP-Client sendet eine
ListToolsRequestan den MCP-Server und erhält einListToolsResult - Claude-Anfrage: Dein Server sendet die Anfrage des Benutzers zusammen mit den verfügbaren Tools an Claude
- Entscheidung zur Tool-Nutzung: Claude entscheidet, dass es ein Tool aufrufen muss, um die Frage zu beantworten
- Anfrage zur Tool-Ausführung: Dein Server fordert den MCP-Client auf, das von Claude angegebene Tool auszuführen
- Externer API-Aufruf: Der MCP-Client sendet eine
CallToolRequestan den MCP-Server, der den eigentlichen GitHub-API-Aufruf durchführt - Ergebnisse fließen zurück: GitHub antwortet mit Repository-Daten, die als
CallToolResultdurch den MCP-Server zurückfließen - Tool-Ergebnis an Claude: Dein Server sendet die Tool-Ergebnisse zurück an Claude
- Endgültige Antwort: Claude formuliert eine endgültige Antwort anhand der Repository-Daten
- Benutzer erhält Antwort: Dein Server liefert Claudes Antwort zurück an den Benutzer

Ja, dieser Ablauf umfasst viele Schritte, aber jede Komponente hat eine klare Verantwortlichkeit. Der MCP-Client abstrahiert die Komplexität der Server-Kommunikation und lässt dich dich auf deine Anwendungslogik konzentrieren, während du trotzdem Zugriff auf leistungsstarke externe Tools und Datenquellen erhältst.
Das Verständnis dieses Ablaufs ist entscheidend, da du all diese Teile wiedersehen wirst, wenn du in den kommenden Abschnitten deine eigenen MCP-Clients und -Server erstellst.