Skip to main content
Glama
les-k
by les-k

sweep-mcp

디렉토리를 삭제하는 MCP 서버 — 그리고 언어 모델에게 그런 능력을 넘겨주는 것을 무모하지 않게 만드는 안전장치들.

이 서버는 Model Context Protocol을 통해 sweep을 노출하므로, 에이전트가 node_modules, .venv, target, __pycache__ 등을 찾아서 정리할 수 있습니다. 흥미로운 부분은 삭제 자체가 아닙니다. 삭제가 허용되기 전에 반드시 충족되어야 하는 모든 조건들입니다.

2026년에 발표된 연구에 따르면, 스캔된 1,808개의 MCP 서버 중 66% 에서 보안 문제가 발견되었으며, 단일 분기 동안 MCP 구현에 대해 30개 이상의 CVE가 제기되었습니다. 이 저장소는 반대 방식으로 작성된 하나의 서버입니다: 거절이 먼저, 기능은 그 다음입니다.


위협 모델

디렉토리를 삭제할 수 있는 MCP 서버는 프로세스가 접근할 수 있는 모든 것을 향한 장전된 총입니다. 다섯 가지 문제가 발생할 수 있으며, 각각에 대한 통제와 이를 검증하는 테스트가 있습니다.

위험

통제

테스트

에이전트가 / 또는 C:\를 스캔하여 시스템을 삭제함

루트 허용 목록, 서버 시작 시 고정됨. 에이전트는 이를 설정, 확장 또는 읽을 수 없음. 루트가 구성되지 않음 → 모든 요청 거부됨

test_empty_allowlist_denies_every_path

../../ 또는 심볼릭 링크를 사용하여 허용 목록을 벗어남

모든 경로는 포함 검사 전에 resolve()되므로, 실제 가리키는 위치를 기준으로 판단됨

test_dotdot_traversal_is_denied, test_symlink_pointing_outside_root_is_denied

에이전트가 스캔하지 않은 경로 삭제를 요청함

reclaim은 id를 받고, 경로를 받지 않음. API 어디에도 삭제로 이어지는 경로 형태의 경로가 없음

test_there_is_no_way_to_delete_by_path

스캔과 삭제 사이에 디렉토리가 변경됨

모든 찾기는 삭제 시점에 실제 파일 시스템에 대해 재확인됨 — 여전히 포함되어 있고, 여전히 디렉토리이며, 링크가 아니고, 마커 파일이 여전히 존재함

test_revalidate_refuses_a_directory_swapped_for_a_symlink

우발적인 파괴

건식 실행이 기본값임. 삭제하려면 정확히 confirm="delete"가 필요함; 그 외의 모든 것은 거부로 처리됨

test_a_wrong_confirmation_string_stays_a_dry_run

같은 이유로 두 가지 더 작은 것들:

  • 티켓 id는 순차적이지 않고 무작위입니다. 1이 아니라 f-3a91c02b77de입니다. 순차적인 id는 에이전트가 무언가를 삭제할 때까지 반복하도록 유도합니다.

  • 도구 설명은 문자열 리터럴입니다. 디스크에서 읽은 어떤 것으로도 조합되지 않으므로, ignore-previous-instructions라는 이름의 디렉토리는 문장이 아닌 데이터로 모델에 도달합니다 (test_tool_descriptions_are_static).

Related MCP server: MCP Files

보호하지 않는

위의 통제는 그것이 다루는 범위 내에서만 가치가 있으며, 그 이상은 아닙니다.

  • 잘못 구성된 루트. --root /로 시작하면 파일 시스템 전체를 기꺼이 작업할 것입니다. 허용 목록은 입력한 내용만큼만 유용하며, 여기서는 그 선택을 재고하지 않습니다.

  • 악의적인 클라이언트. 가드는 무엇이 삭제될 수 있는지를 제한할 뿐, 누가 요청하는지는 제한하지 않습니다. 합법적으로 스캔하고 합법적으로 확인하는 클라이언트는 정확히 요청한 것을 얻습니다.

  • 설득당한 에이전트. 정적 도구 설명은 파일 시스템 콘텐츠가 모델의 지시사항에 들어가는 것을 막지만, 여기서는 실제로 찾은 node_modules를 자신의 나쁜 이유로 삭제하기로 결정한 에이전트를 막을 수 없습니다.

  • 마지막 몇 밀리초. revalidate()는 검사와 삭제 사이의 간격을 좁힙니다. 완전히 없애지는 않습니다. 이를 적절히 없애려면 작업 전반에 걸쳐 유지되는 디렉토리 파일 디스크립터가 필요한데, shutil.rmtree는 이를 이식 가능하게 제공하지 않습니다. 이것은 실제 경합 조건이며, 더 작아졌을 뿐 사라지지는 않았습니다.

  • Python 3.11의 Windows 정션. os.path.isjunction은 3.12에서 도입되었습니다. 그 이하에서는 정션 감지가 심볼릭 링크로만 저하됩니다 — sweep 자체가 취하는 동일한 절충이며, 숨겨지지 않고 여기에 명시되어 있습니다.

  • 권한. 이것은 샌드박스가 아닙니다. 시작한 사람의 권한으로 실행됩니다.

스캐너 결과

2026년 8월 18일 agent-audit 0.19.2로 실행.

정적 스캔 — 0개 발견, 위험 점수 0.0 (LOW), 7개 파일.

첫 번째 패스에서 하나의 낮은 수준 발견이 나타났습니다: AGENT-110, 소스 맵 아티팩트가 배포에서 제외되지 않음. 이 패키지는 JavaScript를 제공하지 않으므로 누출될 소스 맵이 없었지만, 제외 사항은 어쨌든 pyproject.toml에 선언되었습니다 — 비용이 들지 않으며, 공급망 체크리스트와 논쟁하는 것은 누구의 오후 시간도 낭비하는 것입니다.

도구 검사 — 0개 도구 발견. 세 가지 정의 모두에서 도구 중독, 교차 출처 또는 rug-pull 패턴이 감지되지 않았습니다.

할당된 위험 등급은 재현할 가치가 있습니다. 왜냐하면 그것들이 교육적인 방식으로 틀렸기 때문입니다:

도구

등급

추론된 권한

list_targets

MEDIUM

SHELL_EXEC, FILE_READ

scan

HIGH

FILE_DELETE, SHELL_EXEC, FILE_READ

reclaim

HIGH

FILE_DELETE, SHELL_EXEC, FILE_READ

scan은 아무것도 삭제할 수 없습니다. 읽기 전용이며, read_only_hint=True로 선언되었고, 그 상태를 유지한다는 테스트가 있습니다. FILE_DELETE 권한으로 HIGH 등급이 매겨진 이유는 스캐너가 설명에서 키워드를 일치시키기 때문이며, 이 서버의 scan 설명에는 다음 문장이 포함되어 있습니다:

"읽기 전용: 이것은 절대 아무것도 삭제하지 않습니다."

삭제라는 단어는 FILE_DELETE 키워드 목록에 있습니다. SHELL_EXEC명령어라는 단어에서 비롯되었으며, "이것을 재생성하는 명령어"에서 왔습니다 — 이 서버는 셸 명령어를 전혀 실행하지 않습니다.

설명을 더 나은 점수를 얻기 위해 다시 작성할 수 있습니다. 그렇게 하지 않은 이유는 설명의 대상이 도구를 호출할지 결정하는 언어 모델이기 때문이며, "이것은 절대 아무것도 삭제하지 않습니다"는 그 안에서 가장 유용한 단일 문장입니다. 키워드 스캐너는 연기 감지기이지 판사가 아닙니다 — 깨끗한 실행은 가치가 있고 게시할 가치가 있으며, 산문의 문자열 일치에서 파생된 등급은 어느 방향으로든 행동에 대한 증거가 아닙니다.

두 개의 스캐너를 시도했고 하나는 실행할 수 없었습니다: Invariant Labs의 mcp-scan은 Snyk 인수에 따라 snyk-agent-scan으로 이름이 변경되었으며 이제 SNYK_TOKEN이 필요합니다. Cisco의 mcp-scanner는 PyPI에 게시되지 않았습니다. agent-audit 자체의 stdio 전송도 Windows에서 이 서버에 대해 시간 초과되는 반면, 동일한 바이너리에 대한 수동 핸드셰이크는 밀리초 단위로 반환되므로, 분석기는 실제 tools/list 출력을 직접 공급받았습니다 — 전송은 우회되었고, 분석은 그렇지 않았습니다.

설치

pip install -e .

구성

서버는 하나 이상의 --root 디렉토리를 사용합니다. 기본값이 없습니다. 루트 없이 시작하는 것은 모든 것을 스캔하라는 초대가 아니라 오류입니다:

{
  "mcpServers": {
    "sweep": {
      "command": "sweep-mcp",
      "args": ["--root", "/home/you/code", "--root", "/home/you/work"]
    }
  }
}

도구

도구

파괴적

기능

list_targets

아니오

정리할 수 있는 디렉토리 종류와 각각을 재생성하는 명령어

scan

아니오

루트 내의 경로 아래에서 정리 가능한 디렉토리를 찾습니다. id, 크기 및 재생성 명령어를 반환

reclaim

id로 찾은 항목을 삭제합니다. confirm="delete"가 아니면 건식 실행

세 가지 모두 MCP ToolAnnotations를 전달하므로, 파괴적인 도구를 확인 프롬프트 뒤에 두는 클라이언트는 필요한 것을 가지고 있습니다: reclaimdestructive_hint=True를 선언하고, 다른 두 개는 read_only_hint=True를 선언합니다. 이것도 테스트 스위트에서 단언됩니다 — 조용히 퇴보한 힌트는 없는 것보다 더 나쁠 것입니다.

세션

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 GB

테스트

38개 테스트. Windows에서 34개 실행; Linux에서 38개 모두 실행.

로컬에서 건너뛰는 4개는 심볼릭 링크를 생성해야 하는데, Windows는 개발자 모드 없이 이를 거부합니다 — 그리고 그 중 하나는 스캔-삭제 간 교체 공격을 다루며, 이것이 여기서 가장 중요한 단일 테스트입니다. 조용히 건너뛰면 스위트는 장식이 될 것이므로, CI는 Linux에서 실행되며 해당 테스트가 거기서 건너뛴 것으로 보고되면 빌드를 실패시킵니다.

pytest -q --cov=sweep_mcp

커버리지는 83% 입니다. 차이는 주로 main()과 argparse 배선이며, 스위트는 대신 build_server를 통해 이를 구동합니다 — 전송은 가장 모킹할 가치가 없고 피해가 발생할 가능성이 가장 낮은 부분입니다.

스위트에서 파일 시스템을 모킹하는 것은 없습니다. 모킹된 Path는 여기의 모든 테스트를 통과하지만 서버는 여전히 잘못된 디렉토리를 삭제할 것입니다.

레이아웃

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 would

guard.py는 의도적으로 MCP에 대해 아무것도 모릅니다. 누군가의 데이터를 잃을 수 있는 모든 결정은 클라이언트, 전송 또는 에이전트 없이 테스트 가능합니다. 규칙이 server.py에서 시행되는 것처럼 보인다면, 그것은 버그입니다 — 테스트가 도달할 수 있는 한 계층 아래에 속합니다.

라이선스

MIT.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    -
    quality
    D
    maintenance
    Provides 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
  • A
    license
    -
    quality
    C
    maintenance
    Provides 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
  • F
    license
    -
    quality
    B
    maintenance
    Enables AI agents to clean disk space by scanning and removing temporary files, caches, and duplicates through natural language commands via MCP protocol.
    1

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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