Skip to main content

MCP server that finds and safely removes undeletable files on Windows

Project description

日本語 | 中文 | Español | Français | हिन्दी | Italiano | Português (BR)

NullOut

CI Coverage MIT License Landing Page

MCP server that finds and safely removes "undeletable" files on Windows.

Windows reserves device names like CON, PRN, AUX, NUL, COM1-COM9, and LPT1-LPT9 at the Win32 layer. Files with these names can exist on NTFS (created via WSL, Linux tools, or low-level APIs) but become impossible to rename, move, or delete through Explorer or normal shell commands.

NullOut scans for these hazardous entries and removes them safely using the \\?\ extended path namespace, with a two-phase confirmation workflow designed for MCP hosts.

How it works

  1. Scan an allowlisted directory for reserved-name collisions, trailing dots/spaces, and overlong paths
  2. Plan the cleanup — NullOut generates a per-entry confirmation token bound to the file's identity (volume serial + file ID)
  3. Delete with the token — NullOut re-verifies the file hasn't changed (TOCTOU protection) before removing it via extended namespace

Safety model

  • Allowlisted roots only — operations are confined to directories you explicitly configure
  • No raw paths in destructive calls — delete accepts only server-issued finding IDs + confirmation tokens
  • deny_all reparse policy — junctions, symlinks, and mount points are never traversed or deleted
  • File identity binding — tokens are HMAC-signed and bound to volume serial + file ID; any change between scan and delete is rejected
  • Empty-only directories — v1 refuses to delete non-empty directories
  • Structured errors — every failure returns a machine-readable code with next-step suggestions

MCP tools

Tool Type Purpose
list_allowed_roots read-only Show configured scan roots
scan_reserved_names read-only Find hazardous entries in a root
get_finding read-only Get full details for a finding
plan_cleanup read-only Generate deletion plan with confirmation tokens
delete_entry destructive Delete a file or empty directory (requires token)
who_is_using read-only Identify processes locking a file (Restart Manager)
get_server_info read-only Server metadata, policies, and capabilities

Configuration

Set allowlisted roots via environment variable:

NULLOUT_ROOTS=C:\Users\me\Downloads;C:\temp\cleanup

Token signing secret (generate a random value):

NULLOUT_TOKEN_SECRET=your-random-secret-here

Threat model

NullOut defends against:

  • Destructive misuse — delete requires a server-issued confirmation token; no raw paths accepted
  • Path traversal — all operations confined to allowlisted roots; .. escapes are resolved and rejected
  • Reparse point escapes — junctions, symlinks, and mount points are never traversed or deleted (deny_all)
  • TOCTOU races — tokens are HMAC-bound to volume serial + file ID; any identity change between scan and delete is rejected
  • Namespace tricks — destructive operations use \\?\ extended path prefix to bypass Win32 name parsing
  • Locked files — Restart Manager attribution is read-only; NullOut never kills processes
  • Non-empty directories — refused by policy; only empty directories can be deleted

Data touched: filesystem metadata (names, file IDs, volume serials), process metadata (PIDs, app names via Restart Manager). Data NOT touched: file contents, network, credentials, Windows registry. No telemetry is collected or sent.

Requirements

  • Windows 10/11
  • Python 3.10+

Built by MCP Tool Shop

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nullout_mcp-1.1.4.tar.gz (47.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nullout_mcp-1.1.4-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file nullout_mcp-1.1.4.tar.gz.

File metadata

  • Download URL: nullout_mcp-1.1.4.tar.gz
  • Upload date:
  • Size: 47.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nullout_mcp-1.1.4.tar.gz
Algorithm Hash digest
SHA256 d888695fbcb0dcbd0ffc07faa06d207a0700d68b0396b8c6793f5587c7872bb9
MD5 533a01427448338184c52837cb4965d9
BLAKE2b-256 d72ebc7510d6cc95d3633f48ab9102fad8ed1455f22cb96f4762edb4847f4576

See more details on using hashes here.

Provenance

The following attestation bundles were made for nullout_mcp-1.1.4.tar.gz:

Publisher: release.yml on mcp-tool-shop-org/nullout

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nullout_mcp-1.1.4-py3-none-any.whl.

File metadata

  • Download URL: nullout_mcp-1.1.4-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nullout_mcp-1.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b4b3e14c0f36fd6a6c77b4a1b060d2efd48135ee1da5313fa25389acf7a5b528
MD5 652bd6479e0ea05350a1cd1ffc5df81c
BLAKE2b-256 fc0564d9ae3ae4d7939b805bf969571749124c092c4cbed06c2bce70efeee46c

See more details on using hashes here.

Provenance

The following attestation bundles were made for nullout_mcp-1.1.4-py3-none-any.whl:

Publisher: release.yml on mcp-tool-shop-org/nullout

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page