Ausgemusterte MCP-Server entfernen, ohne Zugriffe zurückzulassen
Ausgemusterte MCP-Server sicher entfernen: Finde jede Konfiguration und jeden Launcher, widerrufe aktive Zugangsdaten, lösche alte Tools und belege, dass kein Zugriff mehr besteht.

Ausgemusterte MCP-Server verdienen dieselbe Behandlung wie veraltete Deployment-Skripte: Gehe davon aus, dass sie noch funktionieren, bis du das Gegenteil bewiesen hast. Ein veralteter Eintrag kann einen lokalen Befehl starten, einen Agenten zu einem entfernten Endpunkt leiten, eine alte Umgebungsvariable offenlegen oder einen Zugang zu Zugangsdaten erhalten, für die niemand mehr zuständig ist.
Ich habe erlebt, wie Entwickler einen Konfigurationsblock löschten, die Aufgabe für erledigt erklärten und Monate später feststellten, dass dasselbe Tool weiterhin über eine Editor-Erweiterung oder eine Repository-Datei gestartet wurde. Die Lösung ist keine größere Tabelle. Du musst Ermittlung, Widerruf, Entfernung und den Nachweis trennen, dass der Zugriffspfad tatsächlich geschlossen ist.
Eine entfernte Konfiguration widerruft noch keinen Zugriff
Ausgemusterte MCP-Server zu entfernen bedeutet, jeden Weg zu schließen, über den ein Agent Arbeit ausführen kann, statt einen Server lediglich aus dem Menü eines Clients auszublenden. Die Serverdefinition ist nur ein Teil dieses Wegs.
Eine typische lokale Einrichtung besteht aus vier Teilen: einer Client-Konfiguration, einem Startbefehl, der an diesen Befehl übergebenen Konfiguration oder Umgebung sowie den Berechtigungen beim Zieldienst. Bei einer entfernten Einrichtung ersetzt eine URL den lokalen Befehl, doch Client-Konfiguration und Berechtigungen am anderen Ende bleiben bestehen. Teams entfernen häufig den ersten Teil und lassen den Rest intakt.
Die Spezifikation des Model Context Protocol beschreibt Server als Anbieter von Fähigkeiten wie Tools, Ressourcen und Prompts. Sie unterstützt außerdem verschiedene Transportwege, darunter stdio und HTTP-basierte Verbindungen. Dieser Unterschied ist bei der Ausmusterung wichtig. Ein stdio-Server läuft möglicherweise nur, wenn ein lokaler Client seinen Befehl startet. Ein entfernter Dienst kann dagegen verfügbar bleiben, nachdem jeder Entwickler den lokalen Verweis darauf gelöscht hat.
Verwechsle diese Fälle nicht:
- Ein Konfigurationseintrag teilt einem bestimmten Client mit, wo er einen Server findet.
- Ein Launcher ist die ausführbare Datei, das Skript, der Container-Befehl, die Erweiterung oder der Dienst, der den Server startet oder erreicht.
- Eine Berechtigung ist das Token, die SSH-Identität, die OAuth-Autorisierung, die Kontositzung oder die Netzwerkberechtigung, durch die die Aktion erfolgreich ausgeführt werden kann.
- Ein Ausführungsnachweis zeigt, dass ein Client oder Agent diesen Pfad tatsächlich verwendet hat.
Wer das verwechselt, erzeugt zwei problematische Ergebnisse. Du lässt möglicherweise ein altes Tool auf Produktionsdaten zugreifen oder widerrufst eine Zugangsdaten, die ein aktives Tool noch benötigt, und machst aus einer routinemäßigen Bereinigung einen Vorfall.
Beginne mit einer verbindlichen Ausmusterungsregel: Wenn ein Server keinen aktuellen Besitzer, keinen dokumentierten Zweck und keinen Nachweis einer kürzlich beabsichtigten Nutzung hat, deaktivierst du ihn während der Untersuchung. «Vielleicht brauchen wir ihn irgendwann» ist keine Zuständigkeit. Ein Repository kann die Einrichtung privat aufbewahren, falls jemand sie später mit neuen Zugangsdaten wiederherstellen muss.
Inventarisiere zuerst die Clients, bevor du die Festplatte durchsuchst
Dein erstes Inventar sollte Clients und nicht Server auflisten, weil jeder Client Konfigurationen an anderen Orten liest. Entwickler haben häufig mehr als einen Agenten-Client installiert, dazu eine Editor-Integration, eine Terminal-Hilfe und projektspezifische Einstellungen neben dem Quellcode.
Notiere jeden Ort, der auf dem Gerät eine MCP-Verbindung initiieren kann. Berücksichtige Desktop-Anwendungen, Befehlszeilen-Agenten, IDE-Erweiterungen, lokale Skripte, die einen Agenten aufrufen, sowie jede Remote-Entwicklungsumgebung, die das Home-Verzeichnis einbindet. Frage den Entwickler, was er tatsächlich nutzt, und überprüfe die Antwort anschließend. Erinnerungen sind ein schlechter Beleg, wenn das Tool während eines Prototyps vor sechs Monaten einmal lief.
Halte für jeden Client seine Version, die in der eigenen Dokumentation genannten Konfigurationsorte und die Unterstützung für Einstellungen auf Benutzer- und Projektebene fest. Rate keinen Pfad, nur weil ein anderer Client ihn verwendet hat. Speicherorte ändern sich, und ein erfundener Pfad vermittelt falsche Sicherheit.
Eine nützliche Inventarzeile enthält genug Details, um später eine Ausmusterungsentscheidung zu treffen:
| Feld | Eintrag |
|---|---|
| Client und Konfigurationspfad | Welches Programm die Datei liest und wo sie liegt |
| Servername | Die Bezeichnung, die dem Agenten oder Benutzer angezeigt wird |
| Transport und Launcher | stdio-Befehl, URL, Erweiterung, Container oder Skript |
| Besitzer und Zweck | Eine verantwortliche Person und die aktive Arbeit, die unterstützt wird |
| Zielsysteme | Erreichte APIs, Hosts, Repositories, Datenspeicher oder lokale Ordner |
| Quelle der Berechtigung | Token-Speicher, Umgebungsvariable, SSH-Identität, OAuth-Berechtigung oder verwaltete Identität |
| Entscheidung | Behalten, ersetzen, aussetzen oder ausmustern |
Projekteinstellungen sorgen für die meisten Überraschungen. Ein Entwickler kann seine Home-Konfiguration bereinigen und trotzdem jedes Mal einen Server starten, wenn er ein altes Repository öffnet. Durchsuche den aktuellen Branch, ignorierte Dateien für die lokale Einrichtung, Beispielkonfigurationen und Onboarding-Skripte. Prüfe auch gemeinsam genutzte Dotfile-Repositories. Ein veralteter Server bleibt oft erhalten, weil jemand einen praktischen Ausschnitt in eine Vorlage kopiert hat.
Betrachte das Inventar nicht als Compliance-Dokument. Nutze es als Grundlage für konkrete Maßnahmen. Wenn du das Zielsystem und die Quelle der Berechtigung eines Servers nicht benennen kannst, markiere ihn als ungeklärt und verhindere seine beiläufige Nutzung, bis diese Informationen vorliegen.
Suche nach Launchern, nicht nur nach Dateien mit MCP im Namen
Eine Textsuche nach «mcp» findet offensichtliche Konfigurationen, doch Launcher verstecken sich unter allgemeinen Skriptnamen und Paket-Binärdateien. Suche nach der Serverbezeichnung, dem Befehlsnamen, Hostnamen, Port, Paketnamen und den Namen von Umgebungsvariablen, die das Inventar sichtbar macht.
Unter macOS liefert dieser Befehl eine begrenzte Ausgangsliste wahrscheinlicher JSON-Konfigurationsdateien im Home-Verzeichnis. Der Cache-Baum wird absichtlich ausgelassen, da er sonst eine Menge irrelevanter Paketmetadaten erzeugt.
find "$HOME" -type f \( -name '.mcp.json' -o -name 'mcp.json' -o -name '*mcp*.json' \) \
-not -path "$HOME/Library/Caches/*" \
-print 2>/dev/null
Die Ausgabe kann etwa so aussehen:
/Users/dev/work/acme-api/.mcp.json
/Users/dev/Library/Application Support/example-client/settings.json
/Users/dev/.config/example-agent/mcp.json
Die Liste ist ein Beleg, keine Löschliste. Öffne jede Datei und stelle fest, welcher Client sie besitzt. Eine Datei mit mcp im Namen kann Dokumentation, ein archiviertes Experiment oder eine generierte Sperrdatei sein. Umgekehrt kann eine unauffällig benannte Einstellungsdatei die eigentliche Serverdefinition enthalten.
Für JSON-Dateien mit einem mcpServers-Objekt gibt dieser Befehl eine kompakte Prüftabelle aus. Er verändert keine Dateien.
jq -r '
.mcpServers // empty
| to_entries[]?
| [.key, (.value.command // .value.url // "unknown"),
((.value.args // []) | join(" "))]
| @tsv
' path/to/config.json
Ein typisches Ergebnis sieht so aus:
issue-tracker npx -y @example/issues-mcp
legacy-reporting https://reports.internal.example/mcp
Wenn der Befehl nichts ausgibt, schließe daraus nicht auf Sicherheit. Die Datei kann ein anderes Schema verwenden, der Client kann Einstellungen an anderer Stelle speichern oder der Dienst kann über eine Erweiterung eingebunden werden.
Prüfe anschließend die Startflächen, die eine gewöhnliche Dateibereinigung überdauern. Sieh dir auf einem Mac Shell-Profile, Editor-Task-Einstellungen, globale Binärdateien von Paketmanagern und Benutzer-Launch-Agents an. launchctl print gui/$(id -u) kann Prozesse sichtbar machen, die unter dem angemeldeten Benutzer starten. Die Ausgabe kann jedoch Befehlsargumente oder Umgebungswerte enthalten. Sieh sie lokal an und füge sie nicht in ein Ticket oder einen Chat ein.
Durchsuche Inhalte mit engen Suchbegriffen, statt das gesamte Home-Verzeichnis zu scannen und zu exportieren. Wenn du beispielsweise weißt, dass ein ausgemusterter Server old-report aufruft, suche nach diesem exakten Namen, seinem alten Hostnamen und seiner ausführbaren Datei. So findest du auch Wrapper wie scripts/agent-tools.sh, ohne eine Bereinigungsprüfung in eine Sammlung privater Daten zu verwandeln.
Ordne jeden Server nach seiner aktuellen Berechtigung ein
Ein Server kann tot aussehen und trotzdem aktive Berechtigungen besitzen. Ordne deshalb vor der Bearbeitung seiner Dateien ein, wie er sich authentifiziert. Derselbe Servername kann auf verschiedenen Geräten unterschiedliche Zugangsdaten verwenden. Für eine Entfernung im gesamten Team brauchst du daher Belege für jedes einzelne Gerät.
Nutze fünf praktische Kategorien. Sie beschreiben, wo die tatsächliche Macht liegt, nicht wie der Server vermarktet wird.
- Keine entfernte Berechtigung. Der Server liest lokale, nicht sensible Dateien oder erzeugt lokale Ausgaben. Er kann trotzdem ein Lieferketten- oder Datenschutzproblem darstellen, doch der Widerruf besteht meist darin, seine Prozessberechtigungen und Konfiguration zu entfernen.
- Berechtigung aus der Umgebung. Der Launcher erhält ein API-Token, Passwort oder eine Verbindungszeichenfolge über ein Shell-Profil, eine
.env-Datei, eine IDE-Einstellung oder eine Startkonfiguration. - Berechtigung aus einer Datei. Der Launcher liest einen privaten SSH-Schlüssel, ein Client-Zertifikat, eine Dienstkontodatei oder eine lokale Zugangsdatenbank.
- Vom Anbieter verwaltete Berechtigung. Der Server nutzt OAuth, eine Anwendungsinstallation, eine Geräteanmeldung oder eine verwaltete Identität. Der Anbieter und nicht eine lokale Textdatei kontrolliert diese Berechtigung.
- Netzwerk- und Kontoberechtigung. Der Server benötigt kein ausdrückliches Geheimnis, weil ein Unternehmensnetzwerk, lokales Konto, eine VPN-Sitzung oder eine freigeschaltete Adresse den Zugriff auf einen Dienst ermöglicht. Diese Kategorie wird leicht übersehen und lässt sich schwer sauber ausmustern.
Halte für jede Quelle einer Berechtigung das genaue Konto, den Umfang und das Ziel fest. «Git-Token» reicht nicht. Du musst wissen, ob es zu einem persönlichen Konto, einem Bot-Konto oder einer gemeinsam genutzten Maschinenidentität gehört und ob es Repositories lesen, Issues schreiben, Deployments auslösen oder administrative APIs aufrufen kann.
Hier kommen bei der Bereinigung unangenehme Abkürzungen ans Licht. Ein lokaler MCP-Befehl, der über ~/.zshrc ein weitreichendes persönliches Token erhält, wird nicht dadurch harmlos, dass der Entwickler ihn nicht mehr verwendet. Das Token kann auch andere Skripte versorgen, daher muss sein Widerruf abgestimmt werden. Das ist kein Grund, die Arbeit aufzuschieben, sondern ein Grund, vor dem Widerruf Abhängigkeiten zu erfassen.
Halte das Inventar sachlich. Trage keine Tokenwerte, privaten Schlüssel, vollständigen Autorisierungs-Header oder kopierten Konfigurationsinhalte ein. Ein Verweis wie «Zugangsdaten-Eintrag mit dem Namen reporting-read» oder «SSH-Fingerabdruck mit Ende 3f:91» ermöglicht der richtigen Person, die Berechtigung zu finden, ohne ein weiteres Geheimnis-Repository anzulegen.
Widerrufe die Berechtigung beim Dienst, bevor du lokale Belege löschst
Widerrufe aktive Berechtigungen beim Anbieter oder Zieldienst, bevor du die lokale Konfiguration entfernst. So kann eine kopierte Konfiguration, ein anderes Gerät oder ein unbemerkter Launcher dieselbe Berechtigung nicht weiter verwenden.
Nutze bei API-Tokens die Tokenverwaltung des Anbieters oder den dokumentierten Widerrufs-Endpunkt. Bestätige anhand der Kennung, Bezeichnung, des Kontos, der Erstellungsdaten oder des letzten Nutzungsdatensatzes, welches Token du widerrufst, sofern der Anbieter diese Informationen anzeigt. Entferne anschließend den Wert aus lokalen Dateien und Zugangsdaten-Speichern. Teste ein widerrufenes Token niemals, indem du es in ein Webformular oder einen Shell-Befehl einfügst, der es in der Historie speichern könnte.
Bei OAuth ist besondere Sorgfalt nötig. RFC 7009 definiert eine Widerrufsanfrage, die an den Widerrufsendpunkt des Autorisierungsservers gesendet wird. Der Server darf auch dann eine erfolgreiche Antwort zurückgeben, wenn das Token ungültig ist. So erfährt der Aufrufer nicht, ob ein Token existiert. Ein Status 200 allein beweist daher nicht, dass die gewünschte Berechtigung widerrufen wurde. Prüfe die Ansicht des Anbieters für Autorisierungen oder verbundene Anwendungen. Führe einen kontrollierten Aufruf über den alten Pfad nur dann aus, wenn es deine üblichen Sicherheitsvorgaben erlauben.
Bei SSH entfernst du den öffentlichen Schlüssel oder Deploy-Key aus allen Stellen, die ihn akzeptieren. Dazu können die autorisierten Schlüssel eines Kontos, Repository-Einstellungen für Deploy-Keys, ein Bastion-Konto, ein CI-Dienst und eine Quelle für Konfigurationsmanagement gehören, die authorized_keys erneut befüllt. Das Löschen von ~/.ssh/old_agent_key entfernt nur eine lokale Kopie. Es bewirkt nichts gegen eine andere Kopie und ändert nichts an der serverseitigen Autorisierung.
Deaktiviere oder lösche bei Anwendungsinstallationen und Dienstkonten die Installation. Tausche das Client-Geheimnis oder die private Berechtigung aus, wenn eine Offenlegung möglich ist, und entferne Rollenbindungen, die nur für den ausgemusterten Server existierten. Behandle weitreichende Rollen auch dann als Bereinigungsaufgabe, wenn das Dienstkonto bestehen bleibt. Ein Agenten-Tool braucht nur selten dieselben Zugriffe wie ein menschlicher Administrator.
Netzwerkbasierter Zugriff erfordert ein anderes Gespräch. Entferne alte Freischalteinträge, Firewall-Regeln, VPN-Gruppenmitgliedschaften oder interne DNS-Routen erst, nachdem du ihren Besitzer und ihre Nutzer ermittelt hast. Nutze ein MCP-Bereinigungsticket nicht als Erlaubnis, eine unabhängige Integration zu beschädigen. Isoliere stattdessen die konkrete Regel und setze eine Frist, innerhalb derer ihr Besitzer die Nutzung bestätigen muss.
Halte das Ergebnis des Widerrufs als Ereignis fest: Wer hat welche Berechtigungskennung wo widerrufen und wie wurde das überprüft? Speichere keine Geheimnisse und keine Screenshots, die sie enthalten. Dieser Nachweis ist wichtig, wenn ein Repository später ausfällt und jemand wissen möchte, ob die Bereinigung die Ursache war.
Entferne lokale Definitionen in einer umkehrbaren Reihenfolge
Entferne lokale Definitionen nach dem Widerruf beim Dienst und nutze eine Reihenfolge, die einen privaten Rückweg ohne aktive Zugangsdaten erhält. Eine unvorsichtige Deinstallation kann dazu führen, dass ein Projekt nicht mehr erklären kann, wovon es abhing. Ein übervorsichtiges Archiv kann dagegen ein verwendbares Token in einem vergessenen Ordner behalten. Trenne Konfiguration und Geheimnisse.
Nutze diese Reihenfolge für jeweils einen Server:
- Beende den zuständigen Agenten-Client und die Editor-Erweiterung. Ein laufender Client kann einen Kindprozess am Leben halten oder seine Einstellungen beim Beenden neu schreiben.
- Kopiere die nicht geheimen Konfigurationsfelder des Servers in den Ausmusterungsnachweis: Name, Befehl oder URL, Argumente, erwartetes Ziel, Besitzer und Entfernungsdatum. Ersetze geheime Werte durch eine Beschreibung ihres Speicherorts.
- Widerrufe die Berechtigung beim Zieldienst und notiere die Bestätigungsdetails.
- Entferne den Servereintrag aus jeder ermittelten Benutzer- und Projektkonfiguration. Lösche Umgebungsvariablen und Verweise auf ausgemusterte Zugangsdaten-Dateien.
- Deinstalliere das dedizierte Paket, die Erweiterung, das Container-Image oder das Wrapper-Skript, wenn kein aktiver Server es verwendet. Wenn andere Aufgaben das Paket nutzen, entferne nur den ausgemusterten Befehl und dokumentiere die gemeinsame Abhängigkeit.
Vermeide Bearbeitungen mit einem allgemeinen Suchen-und-Ersetzen. JSON-Kommas, Shell-Quoting und gemeinsame Umgebungsblöcke bestrafen beiläufige Änderungen. Nutze die Einstellungsoberfläche des Clients, wenn sie zuverlässig gültige Konfiguration schreibt. Erstelle andernfalls ein Backup mit restriktiven Dateiberechtigungen, bearbeite ein Objekt und prüfe das Ergebnis, bevor du den Client wieder öffnest.
Für JSON bietet jq eine einfache Syntaxprüfung:
jq empty path/to/config.json && echo "valid JSON"
Das beweist, dass das JSON gelesen werden kann. Es beweist nicht, dass der Client das Schema akzeptiert oder dass du jeden Verweis entfernt hast. Lies das betreffende Objekt nach der Bearbeitung erneut und prüfe anschließend mit dem Client seine konfigurierte Serverliste.
Archiviere keine vollständige .env, keinen privaten Schlüssel und keine Einstellungsdatei mit einem Bearer-Token in einem Projektordner namens archive. Versionsverwaltung, Cloud-Backups und die Desktopsuche verbreiten solche Fehler weit. Bewahre einen bereinigten Nachweis auf und verlasse dich für die Tatsache, dass die frühere Berechtigung existierte, auf den Audit-Verlauf des Anbieters.
Auch das Entfernen von Paketen erfordert Zurückhaltung. Ein global installiertes Laufzeitpaket kann mehrere aktive Tools unterstützen. Prüfe vor dem Löschen, welchen ausführbaren Namen jede aktive Konfiguration aufruft. Ich habe erlebt, wie eine Bereinigung eine gemeinsame Laufzeitabhängigkeit entfernte und anschließend ein anderes Team eine defekte Agentensitzung untersuchen musste, weil die Fehlermeldung auf ein fehlendes Paket und nicht auf das gelöschte Tool hinwies.
Beweise, dass nichts den ausgemusterten Server startet oder erreicht
Eine Ausmusterung ist abgeschlossen, wenn die zuständigen Clients den Server weder finden noch starten oder sich bei ihm authentifizieren können. Eine reine Konfigurationsprüfung beweist keine dieser Eigenschaften.
Starte den Client vollständig neu. Das Schließen eines Fensters beendet möglicherweise weder einen Helfer in der Menüleiste noch einen Editor-Host oder Kindprozess. Öffne den Client erneut und prüfe mit seinen normalen Diagnosefunktionen die konfigurierte Serverliste. Wird der ausgemusterte Server angezeigt, hast du eine Konfigurationsquelle übersehen oder ein Synchronisierungsmechanismus hat sie wiederhergestellt.
Führe anschließend einen eng begrenzten Starttest durch. Öffne das Repository, das früher die Serverkonfiguration geliefert hat, starte den Agenten und bitte um eine harmlose Aktion, die nichts mit dem ausgemusterten Server zu tun hat. Beobachte lokale Prozesse auf den Namen der ausgemusterten ausführbaren Datei und prüfe die Client-Logs auf Verbindungsversuche zum früheren Hostnamen. Rufe das ausgemusterte Tool nicht gegen ein aktives Produktionsziel auf, nur um zu sehen, ob es fehlschlägt.
Bei entfernten Endpunkten prüfst du anhand von Audit-Daten des Anbieters, Zugriffslogs oder Kontoaktivitäten, ob nach dem Widerruf Nutzungsversuche stattgefunden haben. Eine abgelehnte Anfrage nach einem kontrollierten Test beweist, dass die Berechtigung nicht mehr funktioniert. Fehlende Logeinträge sind schwächere Belege, weil der Client die Verbindung möglicherweise nie versucht hat.
Prüfe außerdem, dass die alte Zugangsinformation nicht mehr an unerwarteten Stellen auftaucht. Suche nach der Token-Bezeichnung, dem Namen der Umgebungsvariable, dem bekannten Hostnamen, dem Dateinamen und dem öffentlichen SSH-Fingerabdruck. Durchsuche nicht den vollständigen geheimen Wert, wenn er in Shell-Historie, Terminal-Puffer oder Befehlslogs gelangen könnte. Bezeichnung und Verweis reichen normalerweise aus.
Ein typischer Fehler sieht so aus: Ein Entwickler entfernt legacy-reporting aus der persönlichen Agentenkonfiguration, startet den Agenten neu und sieht nichts Auffälliges. Eine Woche später öffnet er ein älteres Repository. Dessen lokale Einstellungen führen npx mit einem alten Paket aus, das Skript lädt REPORTING_TOKEN aus einem Shell-Profil und die entfernte API akzeptiert das Token weiterhin. Jede einzelne Prüfung sah sauber aus, weil sie nur die persönliche Konfiguration überprüfte. Das Inventar hätte Repository-Konfiguration, Launcher, Umgebungsquelle und API-Berechtigung vor Beginn der Entfernung miteinander verknüpfen müssen.
Bewahre Belege auf, ohne einen weiteren Geheimnis-Cache zu schaffen
Bewahre genügend Belege auf, um eine Ausmusterung zu erklären, aber verwandle deinen Audit-Ordner nicht in ein Archiv nutzbarer Zugänge. Der Nachweis sollte einer anderen Person ermöglichen zu beantworten, was existierte, worauf es zugreifen konnte, wer die Entfernung genehmigte und welcher Beleg den Vorgang abschloss.
Ein kompakter Ausmusterungsnachweis kann die Serverkennung, entfernte lokale Speicherorte, den Befehl oder Endpunkt ohne Zugangsdaten, den Zieldienst, den Berechtigungstyp, die Berechtigungskennung oder den Fingerabdruck, das Widerrufsdatum, den Besitzer und das Prüfergebnis enthalten. Lege operative Notizen mit Zugriffsbeschränkung an einem Ort ab, an dem dein Team bereits Sicherheitsaufzeichnungen verwaltet. Erstelle kein neues gemeinsames Dokument voller kopierter Einstellungen.
Ausführungshistorien können Abhängigkeiten sichtbar machen, die im Inventar fehlen. Prüfe Agentensitzungshistorien, Client-Logs, Installationshistorien von Paketmanagern, Änderungen in der Quellcodeverwaltung, durch die Konfiguration hinzugefügt wurde, und Aktivitäten beim Zieldienst. Interpretiere Zeitstempel vorsichtig. Ein Log kann zeigen, dass ein Prozess lief, aber nicht unbedingt beweisen, dass ein Tool eine privilegierte Aktion abgeschlossen hat.
Sallyport zeichnet Agentenläufe sowie einzelne HTTP- oder SSH-Aufrufe in getrennten Journalen auf, die aus einem schreibgeschützten verschlüsselten Audit-Log erzeugt werden. Wenn ein Team Sallyport verwendet, kann sp audit verify diese Audit-Kette offline über Chiffretext prüfen, ohne den Tresorschlüssel zu benötigen. Das erleichtert die Beweissicherung während einer Zugriffsprüfung.
Verwechsle Manipulationsnachweise nicht mit einem vollständigen Inventar. Ein Log erfasst nur Aktionen, die seinen Aufzeichnungspunkt passiert haben. Es zeigt keinen alten Server, der außerhalb dieses Punkts lief, keine vergessene Konfiguration, die niemand gestartet hat, und kein kopiertes Token, das ein anderes Skript direkt verwendet hat.
Lass Zuständigkeiten ablaufen, bevor Tools zu archäologischen Funden werden
Die schmerzärmste Bereinigung gelingt, wenn Teams bereits bei der Installation einen Besitzer und ein Prüfdatum festlegen. Diese Regel klingt zunächst administrativ, bis du herausfinden musst, warum ein Agent noch immer auf eine API zugreifen kann, deren ursprüngliches Projekt vor Jahren beendet wurde.
Verlange einen kurzen Ausmusterungsplan, sobald jemand einen Server mit Schreibzugriff, Produktionssichtbarkeit oder weitreichendem Repository-Zugriff hinzufügt. Der Plan sollte Besitzer, vorgesehene Repositories, Berechtigungstyp, Zielsysteme und das Ereignis nennen, das die Entfernung auslöst. Ein Prototyp kann ein kurzes Prüfintervall haben. Ein gemeinsames Tool kann einen benannten Maintainer besitzen. Keines von beiden sollte eine dauerhaft namenlose Ausnahme sein.
Setze Repository-Konfiguration sparsam ein. Ein Server auf Projektebene ist angemessen, wenn das Projekt ihn wirklich benötigt und seine Einrichtung keine eingebetteten Zugangsdaten enthält. Für persönliche Experimente ist er ein schlechter Ort. Bewahre Experimente privat und wegwerfbar auf. Überführe sie später in einen verwalteten Zustand mit Besitzer oder entferne sie, bevor das Arbeitsverzeichnis zur Vorlage wird.
Prüfe nach Änderungen am Agenten-Client, bei Teamübergaben, der Archivierung eines Repositorys und der Rotation von Zugangsdaten. Diese Ereignisse machen Abweichungen zuverlässiger sichtbar als ein beliebiges Kalender-Ritual. Wenn die Prüfung einen unbekannten Server findet, sperre zuerst seinen Weg zu sensiblen Systemen und verfolge anschließend Besitzer und Abhängigkeiten. Ein Tool, das niemand erklären kann, sollte keine Berechtigung zum Handeln behalten.
Die nächste Bereinigung sollte mit einem echten Gerät und einem aktiven Client beginnen. Baue das Inventar auf, bis jeder Server einen Besitzer, einen Startpfad und eine Berechtigungsquelle hat. Die Einträge, die diesen Standard nicht erfüllen können, haben dir bereits mitgeteilt, was ausgemustert werden sollte.
FAQ
Ist ein ungenutzter MCP-Server ein Sicherheitsrisiko?
Nein. Ein Eintrag kann ungenutzt wirken, während sein Befehl, seine entfernte URL, Umgebungsvariablen und Zugangsdaten für den nächsten Client bereitstehen, der ihn liest. Entferne die Konfiguration und widerrufe die Zugangsdaten separat.
Was ist der Unterschied zwischen einem lokalen und einem entfernten MCP-Server?
Ein Server, der über stdio gestartet wird, läuft auf dem Entwicklergerät, sobald der Client ihn startet. Ein entfernter Server kann unabhängig von jeder lokalen Konfiguration erreichbar bleiben. Das Löschen des lokalen Eintrags schließt den entfernten Zugriff daher nicht.
Wo werden MCP-Serverkonfigurationen unter macOS gespeichert?
Durchsuche die dokumentierten Einstellungen jedes Clients, Projekt-Repositories, Shell-Startdateien, Editoreinstellungen, Launch-Agents und Bin-Verzeichnisse von Paketmanagern. Eine Textsuche im Home-Verzeichnis hilft, findet aber nicht jede verwaltete oder generierte Konfiguration.
Kann ich eine MCP-Konfiguration löschen, ohne meine Projekte zu beschädigen?
Ja, wenn du in der richtigen Reihenfolge vorgehst: Ermittle den Besitzer, widerrufe die Zugangsdaten beim Dienst, archiviere die Konfiguration privat, entferne den Launcher und starte den Client neu. Einen JSON-Block zuerst zu löschen geht zwar schnell, lässt aber zu viel Ungewissheit zurück.
Sollte ich alte API-Tokens aus Umgebungsvariablen entfernen?
Behandle eine alte Umgebungsvariable als Zugriffspfad, bis das Gegenteil bewiesen ist. Entferne sie nach dem Widerruf des zugehörigen Tokens aus Shell-Profilen, Projekt-Umgebungsdateien, Startkonfigurationen und CI-Einstellungen.
Wie widerrufe ich den SSH-Zugriff für ein ausgemustertes Tool?
Entferne genau den öffentlichen Schlüssel, Deploy-Key, Maschinenbenutzer oder Zertifikatspfad, der den Zugriff ermöglicht hat. Das Löschen eines lokalen privaten Schlüssels allein verhindert weder die Nutzung einer kopierten Schlüsseldatei noch den Zugriff mit einem anderen Zugang zum selben Konto.
Wie kann ich bestätigen, dass ein MCP-Server wirklich verschwunden ist?
Starte den Client mit einem sauberen Profil oder prüfe nach einem vollständigen Neustart seine Serverliste. Durchsuche anschließend Logs oder Aktivitätsaufzeichnungen nach dem ausgemusterten Befehl und stelle sicher, dass kein Shell-Prozess, Launch-Agent oder keine Editor-Erweiterung ihn startet.
Wie oft sollten Teams MCP-Server überprüfen?
Führe ein datiertes Inventar mit Servername, Startmethode, Besitzer, Speicherort der Zugangsdaten, erreichten Systemen und Ausmusterungsentscheidung. Prüfe es immer dann, wenn ein Entwickler Agenten, Editoren oder eine gemeinsame Repository-Vorlage ändert.
Was sollte ich vor der Deinstallation eines MCP-Serverpakets tun?
Betrachte das Löschen der Konfiguration nicht als Widerruf der Zugangsdaten. Bei OAuth widerrufst du das Token beim Anbieter. Bei einem API-Token oder SSH-Schlüssel entfernst du die entsprechende Berechtigung beim Dienst, bevor du lokale Dateien löschst.
Kann ein Aktions-Gateway den Zugriff von Agenten verwalten?
Sallyport kann API- und SSH-Zugangsdaten aus dem Agentenprozess heraushalten und Agentensitzungen sowie einzelne Aufrufe aufzeichnen. Die Inventarisierung ersetzt das nicht. Du musst weiterhin Agentenkonfigurationen entfernen und Zugriffe ausmustern, die keinen Besitzer mehr haben.