MCP-Server läuft nicht? Diagnose nach Symptom, nicht nach Client

Die mit Abstand häufigste Ursache für „mein Assistent sieht meine Daten nicht“ ist kein defekter Server. Es ist ein Client, der nach der Änderung der Konfiguration nie neu gestartet wurde. Die meisten MCP-Clients lesen ihre Konfiguration beim Start und danach nie wieder; eine Datei, die Sie bei geöffneter App bearbeitet haben, ist also eine Datei, die die App nicht gelesen hat. Beenden Sie sie vollständig — unter macOS läuft der Prozess weiter, wenn Sie nur das Fenster schließen — und öffnen Sie sie erneut. In Claude Code führen Sie /mcp aus, statt das Terminal neu zu starten.

Hilft das nicht, lautet die nützliche nächste Frage nicht „welchen Client nutze ich“, sondern „was genau passiert gerade“. Ein fehlender Server, ein Server, der sich verbindet, aber keine Tools anbietet, Tools, die nichts zurückgeben, und Tools, die nur dann scheitern, wenn sie etwas ändern sollen — das sind vier verschiedene Fehler mit vier verschiedenen Lösungen, und die Lösung hängt kaum davon ab, welche App Sie ausführen. Jede Angabe hier wurde am 14. August 2026 gegen die Herstellerdokumentation geprüft.

Zuerst: den Statusbildschirm finden

Bevor Sie irgendetwas ändern, sehen Sie sich an, was der Client bereits weiß. Jeder Client hat genau eine Stelle, die die Frage „hat sich dieser Server verbunden“ beantwortet, und stattdessen aus dem Chatfenster zu raten, ist der sichere Weg, eine Stunde in ein Problem zu stecken, das dieser Bildschirm in einer Sekunde benennt.

Client Wo nachsehen Wie ein gesunder Server aussieht
Claude Code claude mcp list oder das /mcp-Panel ✔ Connected
Claude Desktop Plus-Symbol im Eingabefeld → Connectors Server mit seinen Tools aufgelistet
Cursor Output-Panel (Cmd+Shift+U) → MCP Logs Initialisierung, keine Verbindungsfehler
VS Code MCP: List Servers in der Command Palette Server startet, Show Output-Log ist sauber
Zed Settings → AI → MCP Servers grüner Punkt, Tooltip Server is active

Claude Code ist davon der informativste. claude mcp list gibt neben jedem Server einen Gesundheitsstatus aus — ✔ Connected, ! Needs authentication, ✘ Failed to connect, ⏸ Pending approval — und hängt das Fehlerdetail an dieselbe Zeile an; claude mcp get <name> zeigt dasselbe in einer Issue:-Zeile, samt dem Fehlertext, den der Server selbst zurückgegeben hat.

Der Server fehlt in der Liste vollständig

Zeigt der Statusbildschirm Ihren Server gar nicht, dann liest der Client den Eintrag nicht, den Sie geschrieben haben. Drei Ursachen decken fast alle Fälle ab.

Die Datei ist kein gültiges JSON. Ein überzähliges Komma oder eine fehlende Klammer, und der Client ignoriert die gesamte Datei — nicht nur den kaputten Eintrag — und sagt das meist nicht einmal. Prüfen Sie die Datei in einem beliebigen JSON-Validator, bevor Sie irgendetwas anderes verdächtigen.

Sie haben eine andere Datei bearbeitet als die, die der Client liest. Nahezu jeder Client hat sowohl eine persönliche als auch eine projektbezogene Konfiguration, und die falsche zu bearbeiten erzeugt genau dieses Symptom. Cursor liest global ~/.cursor/mcp.json und innerhalb eines Projekts .cursor/mcp.json; VS Code liest .vscode/mcp.json in einem Arbeitsbereich und eine mcp.json im Benutzerprofil, die man mit MCP: Open User Configuration öffnet. Claude Code hat drei Geltungsbereiche — local und user in ~/.claude.json, project in einer .mcp.json im Wurzelverzeichnis des Repositorys — und ist ein Name in mehreren definiert, gewinnt local vor project und project vor user. Der gesamte Eintrag stammt aus dem gewinnenden Bereich; einzelne Felder werden nicht zusammengeführt.

Der Schlüsselname passt nicht zu diesem Client. Der Schlüssel auf oberster Ebene heißt in VS Code servers, in Zed context_servers, bei allen anderen mcpServers. Ein in VS Code hineinkopierter mcpServers-Block ist kein Fehler, den der Editor meldet — es ist schlicht ein Schlüssel, den er nicht liest. Client für Client steht das in wo die MCP-Konfiguration liegt.

Ein Fall sieht nach einem fehlenden Server aus, ist aber keiner: In Claude Code steht ein projektbezogener Server auf ⏸ Pending approval, bis Sie claude in diesem Ordner interaktiv starten und ihn bestätigen — und Bestätigungen, die ins Repository eingecheckt wurden, gelten erst, wenn Sie dem Arbeitsbereich vertrauen.

Gestern lief es, heute nicht mehr

Wenn sich an der Konfiguration nichts geändert hat und der Server sich trotzdem nicht mehr verbindet, steht dort meist immer noch ein absoluter Pfad auf ein Programm, das es dort nicht mehr gibt. Ein Update, das die App in einen anderen Ordner legt, eine Umbenennung oder das Verschieben aus dem Programme-Ordner zerstören den Pfad, während das JSON weiterhin korrekt aussieht — und nichts in der Fehlermeldung des Clients weist auf den Umzug hin. Prüfen Sie den Wert von command vor allem anderen gegen die Wirklichkeit:

ls -l "/absolute/path/from/your/config"

Dieselbe Fehlerklasse trifft Server, die über einen Versionsmanager gestartet werden. Steht in command schlicht node, npx, python oder uv und kommt Ihre Laufzeitumgebung von nvm, pyenv oder asdf, dann existiert der Pfad in Ihrem Terminal und für den Client nicht, weil der Client keine Login-Shell startet. Ersetzen Sie den bloßen Namen durch den absoluten Pfad — which node liefert ihn — oder lassen Sie command direkt auf die Binärdatei zeigen.

Der Server verbindet sich, bietet aber keine Tools an

Ein grüner Status mit leerer Tool-Liste bedeutet, dass der Handshake geklappt hat und tools/list nichts Brauchbares zurückgab. Dafür gibt es zwei Gründe.

Der erste ist ein Server, der tatsächlich eine leere Tool-Menge meldet. Das bestätigen Sie außerhalb des Clients mit dem MCP Inspector — der Referenz-Testoberfläche, die sich direkt mit einem stdio- oder Streamable-HTTP- Server verbindet und auflistet, was er veröffentlicht. Sieht der Inspector Tools und Ihr Client nicht, liegt der Fehler in der Konfiguration des Clients.

Der zweite ist eine Werkzeugobergrenze. VS Code begrenzt eine einzelne Chat-Anfrage auf 128 aktivierte Tools und verweigert die Anfrage, sobald die Summe darüber liegt — auf einem vollen Rechner ist das schneller erreicht, als man denkt; abschalten können Sie einzelne Server über die Schaltfläche Configure Tools in der Chat-Ansicht. Cursor lässt Sie einzelne Server im Panel Customize in der Seitenleiste deaktivieren, und ein deaktivierter Server startet nicht und taucht im Chat nicht auf — das lohnt sich zuerst zu prüfen, denn ein Schalter, den jemand vor einem Monat umgelegt hat, sieht genauso aus wie ein Server, der gescheitert ist.

Jede Antwort lautet „nichts gefunden“

Die Tools sind aufgelistet, der Assistent ruft sie auf, und die Ergebnisse sind leer. Der Transport ist hier in Ordnung; die Frage betrifft die Daten, nicht die Konfiguration. Prüfen Sie, ob die Bibliothek, die der Server liest, wirklich die gemeinte ist — richtiges Konto, richtiges Gerät, und Inhalte, die tatsächlich auf diesen Rechner synchronisiert wurden und nicht nur auf einem anderen liegen. Sehen Sie sich danach im Log des Clients die Argumente des Aufrufs an: Ein Assistent, der einen Zeitraum oder einen Filter geraten hat, kann auch aus einer völlig gesunden Bibliothek ein leeres Ergebnis erzeugen.

Lesen funktioniert, Ändern scheitert

Wenn Suchen gelingen, aber jeder Versuch, etwas umzubenennen, zu taggen oder zu aktualisieren, fehlschlägt, ist das kein Transportproblem. Server teilen sich üblicherweise in Tools, die lesen, und Tools, die Daten ändern, und die ändernde Hälfte bringt oft eine zusätzliche Voraussetzung mit: eine laufende Anwendung, eine authentifizierte Sitzung, eine Berechtigung, die der Client nicht bekommen hat. Zwei clientseitige Ursachen sollte man zuerst ausschließen. Datenverändernde Tools werden als solche deklariert, also fragt der Client vor dem Aufruf — und eine Rückfrage, die Sie weggeklickt haben, liest sich im Verlauf wie ein Fehler. Und ein Server, der mit einem Read-only-Flag gestartet wurde, veröffentlicht diese Tools gar nicht erst, was eine Konfigurationsentscheidung ist und kein Defekt.

„Is not valid JSON“ und Verbindungen, die sofort abbrechen

Das ist ein Fehler des Servers, nicht Ihrer; erkennenswert ist er, weil die Meldung in die Irre führt. Über stdio verlangt das Protokoll, dass die Standardausgabe nichts als JSON-RPC-Nachrichten enthält. Ein Server, der ein Versionsbanner, eine Startmeldung oder ein farbiges Log nach stdout schreibt, beschädigt damit den Datenstrom, und der Client scheitert mit einem Parse-Fehler, der die ersten Zeichen des Ausgegebenen zitiert — Unexpected token 'S', "Starting s"... is not valid JSON. Die Lösung gehört dem Autor des Servers: Log-Zeilen gehen nach stderr, das der Host ohnehin mitschreibt.

Die Umgebung ist die zweite Startfalle. Ein stdio-Server erbt nur eine begrenzte, plattformabhängige Teilmenge der Umgebungsvariablen — nicht Ihr Shell-Profil — und sein Arbeitsverzeichnis kann undefiniert sein, unter macOS praktisch /. Übergeben Sie, was der Server braucht, über den Schlüssel env in seinem Konfigurationseintrag, und halten Sie jeden Pfad absolut.

Die Reihenfolge der Prüfungen

  1. Den Client vollständig neu starten. Ungefähr die Hälfte aller Meldungen endet hier.
  2. Den Statusbildschirm des Clients öffnen und lesen, was dort steht.
  3. Das JSON validieren und bestätigen, dass Sie die Datei bearbeitet haben, die dieser Client liest.
  4. Prüfen, dass der Pfad in command existiert — als absoluter Pfad.
  5. Prüfen, dass der Server nicht abgeschaltet und die Werkzeugobergrenze nicht voll ist.
  6. Die Daten prüfen — richtiges Konto, richtiges Gerät, synchronisiert.
  7. Erst dann die Logs lesen.

Von oben zu arbeiten kostet eine Minute. Bei Schritt sieben anzufangen, macht aus einem Fünf-Sekunden-Problem einen Nachmittag.

Wie das in Speak-Y aussieht

Speak-Y bringt seinen MCP-Server in der macOS-App mit, weshalb mehrere der oben beschriebenen Fehler dort gar nicht auftreten können: kein npm-Paket zu installieren, keine Laufzeitumgebung, die über nvm aufgelöst werden muss, kein Token, das abläuft. Auftreten kann der veraltete Pfad — und den repariert die App selbst. Beim Start prüft sie die Konfigurationen von Claude Code, Claude Desktop und Cursor und schreibt den Wert von command neu, wo er auf einen alten Ort der App zeigt — und zwar nur bei Einträgen, die wirklich ihre eigenen sind, erkannt an der Binärdatei der App und am Argument --mcp, sodass ein fremder Server mit zufällig gleichem Namen unangetastet bleibt. Muss es von Hand geschehen, steht unter Einstellungen → Integrationen neben jedem erkannten Client Neu installieren; danach starten Sie den Client neu oder führen in Claude Code /mcp aus.

Die Trennung zwischen Lesen und Ändern ist das andere Symptom, das man wiedererkennen sollte. Aufnahmen durchsuchen und Transkripte, Zusammenfassungen und Action Items lesen arbeitet direkt gegen die Bibliothek auf diesem Rechner und braucht sonst nichts Laufendes. Die Tools, die Ordnung schaffen — Tags, Titel, Sprechernamen, erneute Transkription, Veröffentlichen in einem Teamkanal — laufen durch die geöffnete App, scheitern also bei beendetem Speak-Y, während die Suche weiterarbeitet. Diese Asymmetrie ist selbst schon eine Diagnose: Wenn Lesen geht und Ändern nicht, starten Sie die App, statt an irgendeiner Konfiguration zu schrauben. Ein --read-only in den Argumenten des Servers nimmt die ändernden Tools vollständig aus der Sicht des Clients — beabsichtigtes Verhalten, keine Störung. Leere Ergebnisse von einem gesunden Server bedeuten meist, dass die Aufnahme noch auf einem anderen Gerät liegt: Der Server liest diese Festplatte und holt den Rest nicht nach.

Wenn Sie einrichten statt reparieren, sind die Anleitungen pro Client nützlicher als diese Seite: Claude Desktop und Claude Code Schritt für Schritt, und VS Code, Zed und Devin Desktop für die Editoren, deren Konfigurationsform von der aller anderen abweicht.

FAQ

Warum sieht mein KI-Assistent den MCP-Server nicht, den ich gerade eingetragen habe?

Die meisten Clients lesen die MCP-Konfiguration nur beim Start; eine Datei, die bei laufendem Client geschrieben wurde, ist also noch gar nicht geladen. Beenden Sie die App vollständig und öffnen Sie sie erneut — unter macOS genügt das Schließen des Fensters nicht —, und in Claude Code führen Sie /mcp aus, statt das Terminal neu zu starten.

Wie prüfe ich, ob ein MCP-Server wirklich verbunden ist?

Jeder Client hat genau eine Stelle, die das beantwortet. Claude Code: claude mcp list, das neben jedem Server ✔ Connected, ! Needs authentication oder ✘ Failed to connect ausgibt. Claude Desktop: das Plus-Symbol im Eingabefeld, dann Connectors. VS Code: MCP: List Servers aus der Command Palette. Cursor: das Output-Panel mit ausgewähltem MCP Logs. Zed: Settings → AI → MCP Servers, wo ein grüner Punkt Server is active bedeutet.

Wo liegen die MCP-Logs von Claude Desktop?

Unter macOS in ~/Library/Logs/Claude, unter Windows in %APPDATA%\Claude\logs. Live mitlesen können Sie sie mit tail -n 20 -F ~/Library/Logs/Claude/mcp*.log. Die Datei mcp.log enthält allgemeine Verbindungsereignisse, mcp-server-NAME.log das, was der jeweilige Server nach stderr geschrieben hat.

Der Server läuft im Terminal, scheitert aber im Client. Woran liegt das?

Der Client startet den Prozess selbst, nicht über Ihre Login-Shell. Er erbt weder Ihren vollständigen PATH noch mehr als eine begrenzte, plattformabhängige Teilmenge der Umgebungsvariablen, und sein Arbeitsverzeichnis kann undefiniert sein. Nutzen Sie einen absoluten Pfad für command, absolute Pfade in den Argumenten, und übergeben Sie nötige Variablen ausdrücklich über den Schlüssel env.

Nach einem App-Update sieht mein Assistent meine Aufnahmen nicht mehr. Was ist kaputt?

Fast immer der absolute Pfad in der MCP-Konfiguration, der noch auf den früheren Ort der App zeigt. Eine Neuinstallation in einen anderen Ordner, ein umbenanntes Programm oder eines, das aus dem Programme-Ordner verschoben wurde, brechen ihn — während die Konfiguration weiterhin korrekt aussieht. Führen Sie die Ein-Klick-Installation des Clients erneut aus, damit der Pfad neu geschrieben wird.