sweep-mcp
sweep-mcp
Ein MCP-Server, der Verzeichnisse löscht – und die Schutzmechanismen, die es alles andere als leichtsinnig machen, diese Fähigkeit einem Sprachmodell zu übergeben.
Er stellt sweep über das Model Context
Protocol bereit, sodass ein Agent node_modules, .venv, target,
__pycache__ und ähnliche Verzeichnisse finden und zurückgewinnen kann. Das
Interessante ist nicht das Löschen. Es ist alles, was zutreffen muss, bevor ein
Löschen erlaubt wird.
Eine im Jahr 2026 veröffentlichte Studie fand Sicherheitsprobleme in 66% von 1.808 gescannten MCP-Servern, mit über 30 CVE-Meldungen gegen MCP-Implementierungen in einem einzigen Quartal. Dieses Repository ist ein Server, der andersherum geschrieben wurde: zuerst die Verweigerungen, dann die Funktion.
Das Bedrohungsmodell
Ein MCP-Server, der Verzeichnisse löschen kann, ist eine geladene Waffe, die auf alles gerichtet ist, was der Prozess erreichen kann. Fünf Dinge könnten schiefgehen, und jedes hat eine Kontrolle und einen Test, der es auslöst.
Risiko | Kontrolle | Test |
Agent scannt | Root-Allowlist, festgelegt beim Serverstart. Der Agent kann sie nicht setzen, erweitern oder darüber hinauslesen. Keine Roots konfiguriert → jede Anfrage verweigert |
|
| Jeder Pfad wird vor der Containment-Prüfung mit |
|
Agent fordert das Löschen eines Pfads an, den er nie gescannt hat |
|
|
Das Verzeichnis ändert sich zwischen Scan und Löschen | Jeder Fund wird zum Zeitpunkt des Löschens erneut gegen das Live-Dateisystem geprüft – immer noch enthalten, immer noch ein Verzeichnis, immer noch kein Link, Marker-Datei noch vorhanden |
|
Versehentliche Zerstörung | Trockenlauf ist die Voreinstellung. Löschen erfordert exakt |
|
Zwei kleinere, aus demselben Grund:
Ticket-IDs sind zufällig, nicht sequenziell.
f-3a91c02b77de, nicht1. Eine Zähl-ID lädt einen Agenten ein, zu iterieren, bis etwas gelöscht wird.Tool-Beschreibungen sind Zeichenkettenliterale. Sie werden niemals aus etwas zusammengesetzt, das von der Festplatte gelesen wird, sodass ein Verzeichnis namens
ignore-previous-instructionsdas Modell als Daten und nicht als Satz erreicht (test_tool_descriptions_are_static).
Related MCP server: MCP Files
Wogegen es nicht schützt
Die obigen Kontrollen sind genau das wert, was sie abdecken, und nicht mehr.
Eine falsch konfigurierte Root. Starten Sie es mit
--root /und es wird fröhlich durch Ihr Dateisystem arbeiten. Die Allowlist ist nur so gut wie das, was Sie hineinlegen, und nichts hier stellt diese Wahl in Frage.Ein bösartiger Client. Die Absicherung beschränkt, was gelöscht werden darf, niemals wer fragt. Ein Client, der legitim scannt und dann legitim bestätigt, bekommt genau das, was er verlangt hat.
Ein Agent, der dazu überredet wurde. Statische Tool-Beschreibungen halten Dateisysteminhalte aus den Anweisungen des Modells heraus, aber nichts hier kann einen Agenten aufhalten, der aus eigenen, schlechten Gründen beschließt, ein echtes
node_moduleszu löschen, das es tatsächlich gefunden hat.Die letzten Millisekunden.
revalidate()verengt das Fenster zwischen Prüfung und Löschung; es schließt es nicht. Um es richtig zu schließen, müssten Dateideskriptoren des Verzeichnisses über den Vorgang hinweg gehalten werden, wasshutil.rmtreenicht portabel anbietet. Dies ist eine echte Race-Condition, und sie ist kleiner, nicht abwesend.Windows-Junctions unter Python 3.11.
os.path.isjunctionkam in 3.12. Darunter fällt die Junctions-Erkennung auf Symlinks zurück – derselbe Kompromiss, densweepselbst eingeht, hier statt vergraben angegeben.Berechtigungen. Dies ist keine Sandbox. Es läuft mit den Rechten dessen, der es gestartet hat.
Scanner-Ergebnisse
Ausgeführt gegen agent-audit 0.19.2
am 18. August 2026.
Statischer Scan – 0 Funde, Risikowert 0.0 (NIEDRIG), 7 Dateien.
Ein niedriger Fund erschien beim ersten Durchlauf: AGENT-110,
Source-Map-Artefakte nicht vom Vertrieb ausgeschlossen. Dieses Paket enthält
kein JavaScript, also gab es keine Source-Maps, die hätten durchsickern können,
aber der Ausschluss ist jetzt trotzdem in pyproject.toml deklariert – es
kostet nichts, und mit einer Lieferketten-Checkliste zu streiten ist eine
schlechte Nutzung des Nachmittags von irgendjemandem.
Tool-Inspektion – 0 Tool-Funde. Keine Tool-Vergiftung, Cross-Origin- oder Rug-Pull-Muster in einer der drei Definitionen erkannt.
Die zugewiesenen Risikobewertungen sind es wert, reproduziert zu werden, weil sie auf lehrreiche Weise falsch sind:
Tool | Bewertet | Abgeleitete Berechtigungen |
| MITTEL | SHELL_EXEC, FILE_READ |
| HOCH | FILE_DELETE, SHELL_EXEC, FILE_READ |
| HOCH | FILE_DELETE, SHELL_EXEC, FILE_READ |
scan kann nichts löschen. Es ist schreibgeschützt, deklariert mit
read_only_hint=True, und es gibt einen Test, der bestätigt, dass es so bleibt.
Es wurde mit HOCH und einer FILE_DELETE-Berechtigung bewertet, weil der
Scanner Schlüsselwörter mit der Beschreibung abgleicht, und die
scan-Beschreibung dieses Servers enthält den Satz:
"Read-only: this never deletes anything."
Das Wort deletes steht auf der FILE_DELETE-Schlüsselwortliste. SHELL_EXEC
kommt vom Wort command, in "the command that regenerates it" – dieser Server
führt überhaupt keinen Shell-Befehl aus.
Die Beschreibung könnte umformuliert werden, um besser abzuschneiden. Das wurde nicht getan, weil die Zielgruppe der Beschreibung ein Sprachmodell ist, das entscheidet, ob es das Tool aufrufen soll, und "this never deletes anything" ist der mit Abstand nützlichste Satz darin. Ein Schlüsselwort-Scanner ist ein Rauchmelder, kein Richter – ein sauberer Durchlauf ist es wert, zu haben und zu veröffentlichen, und eine Bewertung, die aus Zeichenkettenabgleich von Prosa abgeleitet wird, ist kein Beleg für das Verhalten in die eine oder andere Richtung.
Zwei Scanner wurden ausprobiert und einer konnte nicht ausgeführt werden: Der
mcp-scan von Invariant Labs wurde nach der Übernahme durch Snyk in
snyk-agent-scan umbenannt und erfordert jetzt einen SNYK_TOKEN. Der
mcp-scanner von Cisco ist nicht auf PyPI veröffentlicht. Der eigene
Stdio-Transport von agent-audit timeoutet auch gegen diesen Server unter
Windows, während ein manuell durchgeführter Handshake mit der identischen
Binärdatei in Millisekunden zurückkommt, daher wurde sein Analysator direkt mit
der echten tools/list-Ausgabe gefüttert – der Transport wurde umgangen, die
Analyse nicht.
Installieren
pip install -e .Konfigurieren
Der Server akzeptiert ein oder mehrere --root-Verzeichnisse. Es gibt keine
Voreinstellung. Das Starten ohne Root ist ein Fehler, keine Einladung, alles
zu scannen:
{
"mcpServers": {
"sweep": {
"command": "sweep-mcp",
"args": ["--root", "/home/you/code", "--root", "/home/you/work"]
}
}
}Die Tools
Tool | Destruktiv | Was es tut |
| nein | Die Arten von Verzeichnissen, die es zurückzugewinnen weiß, und der Befehl, der jedes neu generiert |
| nein | Findet zurückgewinnbare Verzeichnisse unter einem Pfad innerhalb der Roots. Gibt IDs, Größen und den Neugenerierungsbefehl zurück |
| ja | Löscht Funde nach ID. Trockenlauf, es sei denn, |
Alle drei tragen MCP ToolAnnotations, sodass ein Client, der destruktive Tools
hinter einem Bestätigungsdialog abschirmt, hat, was er braucht: reclaim
deklariert destructive_hint=True, die anderen beiden deklarieren
read_only_hint=True. Das wird auch in der Testsuite bestätigt – ein Hinweis,
der stillschweigend zurückgesetzt wird, wäre schlimmer als keiner.
Eine Sitzung
scan(path="/home/you/code")
→ 12 finds, 3.4 GB
f-3a91c02b77de /home/you/code/api/node_modules 1.9 GB npm install
f-8e0244fd1b6c /home/you/code/ml/.venv 842 MB python -m venv .venv
reclaim(ids=["f-3a91c02b77de"])
→ dry_run: true
would_delete: 1 path, 1.9 GB
note: Nothing was deleted. Call again with confirm='delete'.
reclaim(ids=["f-3a91c02b77de"], confirm="delete")
→ deleted: 1 path, reclaimed 1.9 GBTests
38 Tests. 34 laufen unter Windows; alle 38 laufen unter Linux.
Die vier, die lokal übersprungen werden, müssen Symlinks erstellen, was Windows ohne Entwicklermodus verweigert – und einer von ihnen deckt den Swap-Zwischen-Scan-und-Lösch-Angriff ab, der mit Abstand wichtigste Test hier. Ihn stillschweigend zu überspringen, würde die Testsuite zur Dekoration machen, daher läuft CI unter Linux und schlägt den Build fehl, wenn diese Tests dort als übersprungen gemeldet werden.
pytest -q --cov=sweep_mcpDie Codeabdeckung liegt bei 83%. Die Lücke besteht hauptsächlich aus
main() und der argparse-Verdrahtung, die die Testsuite stattdessen über
build_server antreibt – der Transport ist der Teil, der am wenigsten
nachgeahmt werden sollte und am unwahrscheinlichsten die Quelle des Schadens
ist.
Nichts in der Testsuite ahmt das Dateisystem nach. Ein nachgeahmter Path
würde jeden Test hier bestehen, während der Server immer noch das falsche
Verzeichnis löscht.
Aufbau
src/sweep_mcp/
guard.py 212 lines - the allowlist, the tickets, the re-check. Imports no MCP.
server.py 280 lines - three tools. Translation only.
tests/
test_guard.py 23 tests - one per rule, each named for the attack it stands in for
test_server.py 15 tests - driven through call_tool, the way a client wouldguard.py weiß bewusst nichts über MCP. Jede Entscheidung, die jemanden seine
Daten kosten könnte, ist ohne einen Client, einen Transport oder einen Agenten
in der Schleife testbar. Wenn eine Regel so aussieht, als würde sie in
server.py durchgesetzt, ist das ein Fehler – sie gehört eine Ebene tiefer, wo
die Tests sie erreichen können.
Lizenz
MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceProvides secure filesystem access for AI assistants with optimizations like file reading limits and depth-limited traversal to improve token efficiency. It enables AI models to read, write, and search files within explicitly allowed directories while automatically skipping large system folders.3
- Alicense-qualityCmaintenanceProvides a secure, constrained filesystem workspace for LLM agents to manage files, notes, and code artifacts via stdio or remote HTTP. It features granular access controls, including extension whitelisting, storage quotas, and immutable paths for safe automated file operations.BSD 3-Clause
- Flicense-qualityBmaintenanceEnables AI agents to clean disk space by scanning and removing temporary files, caches, and duplicates through natural language commands via MCP protocol.1
- FlicenseAqualityDmaintenanceEnables LLM agents to find and safely delete duplicate files using content-based detection, with smart copy prioritization and dry-run mode.3
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Securely search and manage workspace context files for AI agents and teams.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/les-k/sweep-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server