sweep-mcp
sweep-mcp
Un servidor MCP que elimina directorios — y las barreras de seguridad que hacen que entregar esa capacidad a un modelo de lenguaje sea algo más que una temeridad.
Expone sweep a través del Protocolo de Contexto de Modelo,
para que un agente pueda encontrar y recuperar node_modules, .venv, target,
__pycache__ y compañía. La parte interesante no es la eliminación. Es todo
lo que debe ser cierto antes de que se permita una eliminación.
Una investigación publicada en 2026 encontró problemas de seguridad en el 66% de 1.808 servidores MCP escaneados, con más de 30 CVEs presentados contra implementaciones MCP en un solo trimestre. Este repositorio es un servidor escrito al revés: primero las negativas, luego la funcionalidad.
El modelo de amenazas
Un servidor MCP que puede eliminar directorios es un arma cargada apuntando a todo lo que el proceso pueda alcanzar. Cinco cosas podrían salir mal, y cada una tiene un control y una prueba que lo hace efectivo.
Riesgo | Control | Prueba |
El agente escanea | Lista blanca raíz, fijada al iniciar el servidor. El agente no puede establecer, extender ni leer más allá de ella. Sin raíces configuradas → cada solicitud es rechazada |
|
Se usa | Cada ruta se |
|
El agente pide eliminar una ruta que nunca escaneó |
|
|
El directorio cambia entre el escaneo y la eliminación | Cada hallazgo se vuelve a verificar contra el sistema de archivos en vivo en el momento de la eliminación — sigue contenido, sigue siendo un directorio, sigue sin ser un enlace, el archivo marcador sigue presente |
|
Destrucción accidental | La ejecución en seco es la opción predeterminada. La eliminación requiere |
|
Dos más pequeñas, por la misma razón:
Los ids de ticket son aleatorios, no secuenciales.
f-3a91c02b77de, no1. Un id secuencial invita a un agente a iterar hasta que algo se elimine.Las descripciones de herramientas son literales de cadena. Nunca se ensamblan a partir de nada leído del disco, por lo que un directorio llamado
ignore-previous-instructionsllega al modelo como datos en lugar de como una oración (test_tool_descriptions_are_static).
Related MCP server: MCP Files
Contra lo que no protege
Los controles anteriores valen exactamente lo que cubren, y nada más.
Una raíz mal configurada. Inícielo con
--root /y trabajará felizmente a través de su sistema de archivos. La lista blanca es tan buena como lo que usted ponga en ella, y nada aquí cuestiona esa elección.Un cliente malicioso. La protección limita qué puede ser eliminado, nunca quién lo solicita. Un cliente que escanea legítimamente y luego confirma legítimamente obtiene exactamente lo que pidió.
Un agente que ha sido convencido. Las descripciones estáticas de herramientas mantienen el contenido del sistema de archivos fuera de las instrucciones del modelo, pero nada aquí puede detener a un agente que decide, por sus propias malas razones, eliminar un
node_modulesreal que encontró genuinamente.Los últimos milisegundos.
revalidate()reduce la ventana entre la verificación y la eliminación; no la cierra. Cerrarla correctamente necesita descriptores de archivo de directorio mantenidos durante la operación, lo queshutil.rmtreeno ofrece de forma portátil. Esta es una carrera real, y es más pequeña, no ausente.Junctions de Windows en Python 3.11.
os.path.isjunctionllegó en 3.12. Por debajo de eso, la detección de junctions se degrada a solo enlaces simbólicos — el mismo compromiso quesweepmismo hace, declarado aquí en lugar de oculto.Privilegio. Esto no es un entorno aislado. Se ejecuta como quien lo inició.
Resultados del escáner
Ejecutado contra agent-audit 0.19.2 el
18 de agosto de 2026.
Escaneo estático — 0 hallazgos, puntuación de riesgo 0.0 (BAJO), 7 archivos.
Un hallazgo bajo apareció en la primera pasada: AGENT-110, artefactos de mapa fuente no
excluidos de la distribución. Este paquete no incluye JavaScript, por lo que no había
mapas fuente que filtrar, pero la exclusión ahora está declarada en pyproject.toml
de todos modos — no cuesta nada, y discutir con una lista de verificación de la cadena de suministro es un mal uso
de la tarde de cualquiera.
Inspección de herramientas — 0 hallazgos en herramientas. No se detectaron patrones de envenenamiento de herramientas, de origen cruzado o de tipo "tirar de la alfombra" en ninguna de las tres definiciones.
Vale la pena reproducir las calificaciones de riesgo que asignó, porque son incorrectas de una manera instructiva:
Herramienta | Calificada | Permisos inferidos |
| MEDIO | SHELL_EXEC, FILE_READ |
| ALTO | FILE_DELETE, SHELL_EXEC, FILE_READ |
| ALTO | FILE_DELETE, SHELL_EXEC, FILE_READ |
scan no puede eliminar nada. Es de solo lectura, declarado read_only_hint=True,
y hay una prueba que afirma que se mantiene así. Fue calificado como ALTO con
un permiso FILE_DELETE porque el escáner compara palabras clave con la
descripción, y la descripción de scan de este servidor contiene la oración:
"Solo lectura: esto nunca elimina nada."
La palabra elimina está en la lista de palabras clave de FILE_DELETE. SHELL_EXEC proviene de
la palabra comando, en "el comando que lo regenera" — este servidor nunca ejecuta un comando de shell en absoluto.
La descripción podría reformularse para obtener una mejor puntuación. No se ha hecho, porque la audiencia de la descripción es un modelo de lenguaje que decide si llamar a la herramienta, y "esto nunca elimina nada" es la oración más útil en ella. Un escáner de palabras clave es un detector de humo, no un juez — una ejecución limpia vale la pena tenerla y vale la pena publicarla, y una calificación derivada de la coincidencia de cadenas en prosa no es evidencia sobre el comportamiento en ninguna dirección.
Se probaron dos escáneres y uno no pudo ejecutarse: mcp-scan de Invariant Labs ha
sido renombrado a snyk-agent-scan tras la adquisición de Snyk y ahora requiere un
SNYK_TOKEN. mcp-scanner de Cisco no está publicado en PyPI. El transporte stdio propio de agent-audit
también se agota contra este servidor en Windows mientras que un protocolo de enlace manual
al binario idéntico regresa en milisegundos, por lo que su analizador fue
alimentado con la salida real de tools/list directamente — el transporte fue omitido, el
análisis no.
Instalar
pip install -e .Configurar
El servidor toma uno o más directorios --root. No tiene valor predeterminado.
Iniciarlo sin una raíz es un error en lugar de una invitación a escanear
todo:
{
"mcpServers": {
"sweep": {
"command": "sweep-mcp",
"args": ["--root", "/home/you/code", "--root", "/home/you/work"]
}
}
}Las herramientas
Herramienta | Destructiva | Qué hace |
| no | Los tipos de directorio que sabe cómo recuperar, y el comando que regenera cada uno |
| no | Encuentra directorios recuperables bajo una ruta dentro de las raíces. Devuelve ids, tamaños y el comando de regeneración |
| sí | Elimina hallazgos por id. Ejecución en seco a menos que |
Las tres llevan ToolAnnotations de MCP, por lo que un cliente que bloquea herramientas destructivas
detrás de un mensaje de confirmación tiene lo que necesita: reclaim declara
destructive_hint=True, las otras dos declaran read_only_hint=True. Eso está
afirmado en el conjunto de pruebas también — una pista que retrocediera silenciosamente sería peor que ninguna.
Una sesión
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 GBPruebas
38 pruebas. 34 se ejecutan en Windows; las 38 se ejecutan en Linux.
Las cuatro que se saltan localmente necesitan crear enlaces simbólicos, lo que Windows rechaza sin el modo de desarrollador — y una de ellas cubre el ataque de intercambio entre escaneo y eliminación, que es la prueba más importante aquí. Saltarla silenciosamente haría que el conjunto de pruebas fuera una decoración, por lo que CI se ejecuta en Linux y falla la compilación si esas pruebas se reportan como saltadas allí.
pytest -q --cov=sweep_mcpLa cobertura se sitúa en el 83%. La brecha es principalmente main() y el cableado de argparse,
que el conjunto de pruebas impulsa a través de build_server en su lugar — el
transporte es la parte que menos vale la pena simular y donde es menos probable que provenga el daño.
Nada en el conjunto de pruebas simula el sistema de archivos. Un Path simulado
pasaría todas las pruebas aquí mientras el servidor aún eliminara el directorio incorrecto.
Diseño
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 deliberadamente no sabe nada sobre MCP. Cada decisión que podría costarle
a alguien sus datos es comprobable sin un cliente, un transporte o un agente en el
bucle. Si una regla parece que se aplica en server.py, eso es un error — pertenece
una capa más abajo, donde las pruebas pueden alcanzarla.
Licencia
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