jmller/dropin

Dropin is a macOS file archiver that moves files from a drop folder into encrypted restic storage while keeping them searchable. Find, inspect, and safely restore archived files from the CLI or an MCP-enabled assistant.

Python

1

2 commits

updated Sep 16, 2026

See the code
apple-silicon
archiving
cli
encrypted-storage
encryption
local
local-first
localstorage
macos
mcp
rclone
rclone-backup
rclone-mount
rclone-sync
restic
restic-backups
self-hosted
self-hosting

See what people are saying (1)

SourceMessageScoreDate

Built a zero-effort remote archive for messy files on my Mac (r/SideProject)

**Dropin is a zero-effort remote archive for files you want to keep, but do not want to organize or keep locally on your Mac.** I have a lot of files that I want to keep, but I really do not want to organize them. Old projects, PDFs, exports, datasets, random documents. Most of them are things I…

1

Sep 18, 2026

README

Dropin

Drop files now. Find them later.

A macOS workflow for turning a simple drop folder into a searchable archive you can inspect and restore from the CLI or through MCP.


Dropin workflow — drop files, drain them into the archive, search, inspect, and restore

Drop files  →  dropin drain  →  find  →  show  →  get



macOS CLI MCP enabled

Dropin is a macOS storage offloader for files you want to keep but do not need on your SSD. Put a file, directory, or bundle in a drop folder and Dropin captures it in an encrypted restic repository, together with searchable metadata for later discovery and recovery.

The idea: put files in Drop → archive them → search later → inspect before restoring → retrieve exactly what you need.

At a glance

CaptureDiscoverRecover
Drop files into ~/Drop and run dropin drain.Search by name, type, dates, tags, size, or metadata.Inspect a match, then restore it to an explicit destination.

Dropin is designed for things you want to keep, but do not want to file by hand. Its major advantages are:

  • Reclaim local storage without losing the workflow: files can leave your SSD while remaining searchable in Dropin's catalog and recoverable on demand.
  • Use remote storage you control: encrypted archives can live on a NAS, S3-compatible storage, Backblaze B2, or another rclone backend—without SaaS storage lock-in.
  • Recover through an MCP-enabled assistant: Claude, Codex, and other MCP clients can find, inspect, and restore files using natural-language requests.
  • Delete conservatively: Dropin verifies the archive, metadata, source stability, and removal conditions before deleting a local original. If any check is inconclusive, it leaves the original in place and reports why.

These checks reduce risk; they do not make data loss impossible.

Why does it exist?

Traditional folder organization makes preservation depend on remembering where everything belongs. Dropin separates capture from organization:

  • drop items where they are convenient;
  • search the local catalog by name, type, dates, tags, size, or metadata;
  • restore an item later by its archive path;
  • keep the archive encrypted while using rclone to reach local or remote storage.

The safety boundary is deliberately conservative. Dropin does not delete a source merely because an upload command succeeded; it verifies the archive, catalog, source stability, and deletion conditions first.

Data safety and privacy

Dropin intentionally deletes a source after its configured checks pass. For irreplaceable data, keep an independent backup until you have tested remote-only recovery and a restore. Terms such as “verified”, “safe”, and “supported” describe the documented checks and validation scope, not a guarantee. The software is provided without warranties under the terms in LICENSE.

Restic encrypts the repository, but Dropin does not encrypt the drop folder, local configuration or password file, state/catalog database, diagnostics, or restored files. The catalog can contain filenames, paths, metadata, tags, comments, and captured text; protect the Mac and backups accordingly. Restic, rclone, storage providers, and MCP clients remain separate third-party software or services governed by their own terms and security properties.

The MCP server runs locally over stdio, but an MCP client may send queries and tool results—including names, paths, metadata, and captured text—to its model provider. Review the client's permissions and the provider's privacy and retention terms before connecting a private archive. See the operator guide for operational safeguards.

Supported platform and prerequisites

Dropin v0.1.0 supports macOS 26+ on Apple silicon. It requires:

  • Python 3.11 or newer
  • restic 0.19.1
  • rclone 1.75.1

The runtime has no third-party Python dependencies. Earlier macOS versions, Intel Macs, and newer tool versions may work but are outside the documented v0.1.0 validation matrix.

Quickstart

The everyday workflow is intentionally tiny: run dropin setup once, drop files into ~/Drop, and run dropin drain. Dropin remembers the configuration, so normal commands do not need a config path.

Install from a checkout

Install the prerequisites yourself, then use the repository's side-effect-free check:

brew install python@3.11 restic rclone       # if needed
scripts/install-prerequisites.sh
python3 scripts/install-user.py
# or: make install-user

This installs dropin at ~/.local/bin/dropin; add that directory to PATH if necessary. The canonical installation is a self-contained zipapp and does not need a virtual environment.

Install a published release

Homebrew installs Dropin and its external tools together:

brew install jmller/tap/dropin
dropin --version

Alternatively, download and inspect scripts/install-release.sh from a reviewed source archive, then run it as a file:

sh scripts/install-release.sh

The installer verifies the release checksum before replacing ~/.local/bin/dropin. Do not use it through curl | sh.

Initialize a repository

The guided setup is the only first-run command. It uses ~/Drop for incoming items and ~/.local/state/dropin for local catalog/state, and remembers those choices for every later command:

dropin setup

For automation or explicit locations:

dropin --config ~/.config/dropin/config.toml init \
  --repo rclone:REMOTE:/archive \
  --drop-dir ~/Drop \
  --state-dir ~/.local/state/dropin

init creates the configuration and restic repository as needed. When no --password-file is supplied, it generates a mode-0600 password file beside the configuration. Back up that file separately: it is the archive key, and losing all valid copies makes recovery impossible.

Basic use

That is all the daily operation requires:

# Drop a file or directory into ~/Drop, then archive everything settled there.
dropin drain

Dropin verifies the encrypted archive and metadata before removing the local original. If a check is inconclusive, it leaves the original in place.

To retrieve something, find its archive path and pass it to get:

dropin find --name report
dropin get OCCURRENCE/PATH -o ~/Restored

get performs a verified restore into the destination you choose. status, show, and verify --all are available when you need inspection or maintenance. The --config option is only for a non-default configuration; Dropin otherwise uses $DROPIN_CONFIG or ~/.config/dropin/config.toml. Use --json for newline-delimited JSON records.

To remove local Dropin files before reinstalling, preview and then explicitly confirm the destructive purge:

dropin uninstall --purge --dry-run
dropin uninstall --purge --yes

The purge retains the drop folder and remote repository by default; use --purge-drop only when its contents are disposable.

AI-native recovery with MCP

Dropin is designed to be used by an AI assistant as well as from a shell. Its optional Model Context Protocol (MCP) server exposes a small, safety-oriented recovery surface over stdio:

  • find searches the confirmed local catalog using names, types, dates, tags, hashes, sizes, or captured text;
  • show lets an assistant inspect the complete captured metadata for a result;
  • get restores the selected archive path into an existing destination directory, re-reading and verifying the encrypted payload before publishing it.

This means you can ask an MCP-enabled assistant to find the PDF about the 2024 budget, inspect its metadata, and restore it to ~/Recovered. The assistant never needs direct access to the restic repository: Dropin resolves the archive path and performs the verified restore. It also cannot turn a vague match into an overwrite—the destination is explicit and existing files are preserved unless force is deliberately requested.

Connect Dropin as an MCP server once (for example, in Claude Code or Codex):

claude mcp add --transport stdio --scope user dropin -- \
  ~/.local/bin/dropin mcp

No separate service or API is required. The client starts Dropin over stdio and can use the same simple findshowget flow for easy control.

Then give the assistant a request such as:

Find my scanned tax documents from 2023, show me the exact matches, and restore the selected file to ~/Recovered/tax-2023.

The MCP server only serves find, show, and get; archiving, deletion, verification, and local-state reconstruction remain explicit CLI operations. If the local catalog itself is lost, use dropin recover --into ... first to rebuild it from the encrypted repository, then reconnect the MCP server to the new configuration.

More documentation

The release is source-available under the combined terms in LICENSE: Apache License 2.0 subject to Commons Clause License Condition v1.0. It is not OSI open source. Separate commercial terms may be available only through an executed written agreement and only for material the licensor is authorized to license; contact mail@johann3s.de.

Contributors

jmller

2 commits

jmller/dropin

Dropin is a macOS file archiver that moves files from a drop folder into encrypted restic storage while keeping them searchable. Find, inspect, and safely restore archived files from the CLI or an MCP-enabled assistant.

Python

1

2 commits

updated Sep 16, 2026

See the code
apple-silicon
archiving
cli
encrypted-storage
encryption
local
local-first
localstorage
macos
mcp
rclone
rclone-backup
rclone-mount
rclone-sync
restic
restic-backups
self-hosted
self-hosting

See what people are saying (1)

SourceMessageScoreDate

Built a zero-effort remote archive for messy files on my Mac (r/SideProject)

**Dropin is a zero-effort remote archive for files you want to keep, but do not want to organize or keep locally on your Mac.** I have a lot of files that I want to keep, but I really do not want to organize them. Old projects, PDFs, exports, datasets, random documents. Most of them are things I…

1

Sep 18, 2026

README

Dropin

Drop files now. Find them later.

A macOS workflow for turning a simple drop folder into a searchable archive you can inspect and restore from the CLI or through MCP.


Dropin workflow — drop files, drain them into the archive, search, inspect, and restore

Drop files  →  dropin drain  →  find  →  show  →  get



macOS CLI MCP enabled

Dropin is a macOS storage offloader for files you want to keep but do not need on your SSD. Put a file, directory, or bundle in a drop folder and Dropin captures it in an encrypted restic repository, together with searchable metadata for later discovery and recovery.

The idea: put files in Drop → archive them → search later → inspect before restoring → retrieve exactly what you need.

At a glance

CaptureDiscoverRecover
Drop files into ~/Drop and run dropin drain.Search by name, type, dates, tags, size, or metadata.Inspect a match, then restore it to an explicit destination.

Dropin is designed for things you want to keep, but do not want to file by hand. Its major advantages are:

  • Reclaim local storage without losing the workflow: files can leave your SSD while remaining searchable in Dropin's catalog and recoverable on demand.
  • Use remote storage you control: encrypted archives can live on a NAS, S3-compatible storage, Backblaze B2, or another rclone backend—without SaaS storage lock-in.
  • Recover through an MCP-enabled assistant: Claude, Codex, and other MCP clients can find, inspect, and restore files using natural-language requests.
  • Delete conservatively: Dropin verifies the archive, metadata, source stability, and removal conditions before deleting a local original. If any check is inconclusive, it leaves the original in place and reports why.

These checks reduce risk; they do not make data loss impossible.

Why does it exist?

Traditional folder organization makes preservation depend on remembering where everything belongs. Dropin separates capture from organization:

  • drop items where they are convenient;
  • search the local catalog by name, type, dates, tags, size, or metadata;
  • restore an item later by its archive path;
  • keep the archive encrypted while using rclone to reach local or remote storage.

The safety boundary is deliberately conservative. Dropin does not delete a source merely because an upload command succeeded; it verifies the archive, catalog, source stability, and deletion conditions first.

Data safety and privacy

Dropin intentionally deletes a source after its configured checks pass. For irreplaceable data, keep an independent backup until you have tested remote-only recovery and a restore. Terms such as “verified”, “safe”, and “supported” describe the documented checks and validation scope, not a guarantee. The software is provided without warranties under the terms in LICENSE.

Restic encrypts the repository, but Dropin does not encrypt the drop folder, local configuration or password file, state/catalog database, diagnostics, or restored files. The catalog can contain filenames, paths, metadata, tags, comments, and captured text; protect the Mac and backups accordingly. Restic, rclone, storage providers, and MCP clients remain separate third-party software or services governed by their own terms and security properties.

The MCP server runs locally over stdio, but an MCP client may send queries and tool results—including names, paths, metadata, and captured text—to its model provider. Review the client's permissions and the provider's privacy and retention terms before connecting a private archive. See the operator guide for operational safeguards.

Supported platform and prerequisites

Dropin v0.1.0 supports macOS 26+ on Apple silicon. It requires:

  • Python 3.11 or newer
  • restic 0.19.1
  • rclone 1.75.1

The runtime has no third-party Python dependencies. Earlier macOS versions, Intel Macs, and newer tool versions may work but are outside the documented v0.1.0 validation matrix.

Quickstart

The everyday workflow is intentionally tiny: run dropin setup once, drop files into ~/Drop, and run dropin drain. Dropin remembers the configuration, so normal commands do not need a config path.

Install from a checkout

Install the prerequisites yourself, then use the repository's side-effect-free check:

brew install python@3.11 restic rclone       # if needed
scripts/install-prerequisites.sh
python3 scripts/install-user.py
# or: make install-user

This installs dropin at ~/.local/bin/dropin; add that directory to PATH if necessary. The canonical installation is a self-contained zipapp and does not need a virtual environment.

Install a published release

Homebrew installs Dropin and its external tools together:

brew install jmller/tap/dropin
dropin --version

Alternatively, download and inspect scripts/install-release.sh from a reviewed source archive, then run it as a file:

sh scripts/install-release.sh

The installer verifies the release checksum before replacing ~/.local/bin/dropin. Do not use it through curl | sh.

Initialize a repository

The guided setup is the only first-run command. It uses ~/Drop for incoming items and ~/.local/state/dropin for local catalog/state, and remembers those choices for every later command:

dropin setup

For automation or explicit locations:

dropin --config ~/.config/dropin/config.toml init \
  --repo rclone:REMOTE:/archive \
  --drop-dir ~/Drop \
  --state-dir ~/.local/state/dropin

init creates the configuration and restic repository as needed. When no --password-file is supplied, it generates a mode-0600 password file beside the configuration. Back up that file separately: it is the archive key, and losing all valid copies makes recovery impossible.

Basic use

That is all the daily operation requires:

# Drop a file or directory into ~/Drop, then archive everything settled there.
dropin drain

Dropin verifies the encrypted archive and metadata before removing the local original. If a check is inconclusive, it leaves the original in place.

To retrieve something, find its archive path and pass it to get:

dropin find --name report
dropin get OCCURRENCE/PATH -o ~/Restored

get performs a verified restore into the destination you choose. status, show, and verify --all are available when you need inspection or maintenance. The --config option is only for a non-default configuration; Dropin otherwise uses $DROPIN_CONFIG or ~/.config/dropin/config.toml. Use --json for newline-delimited JSON records.

To remove local Dropin files before reinstalling, preview and then explicitly confirm the destructive purge:

dropin uninstall --purge --dry-run
dropin uninstall --purge --yes

The purge retains the drop folder and remote repository by default; use --purge-drop only when its contents are disposable.

AI-native recovery with MCP

Dropin is designed to be used by an AI assistant as well as from a shell. Its optional Model Context Protocol (MCP) server exposes a small, safety-oriented recovery surface over stdio:

  • find searches the confirmed local catalog using names, types, dates, tags, hashes, sizes, or captured text;
  • show lets an assistant inspect the complete captured metadata for a result;
  • get restores the selected archive path into an existing destination directory, re-reading and verifying the encrypted payload before publishing it.

This means you can ask an MCP-enabled assistant to find the PDF about the 2024 budget, inspect its metadata, and restore it to ~/Recovered. The assistant never needs direct access to the restic repository: Dropin resolves the archive path and performs the verified restore. It also cannot turn a vague match into an overwrite—the destination is explicit and existing files are preserved unless force is deliberately requested.

Connect Dropin as an MCP server once (for example, in Claude Code or Codex):

claude mcp add --transport stdio --scope user dropin -- \
  ~/.local/bin/dropin mcp

No separate service or API is required. The client starts Dropin over stdio and can use the same simple findshowget flow for easy control.

Then give the assistant a request such as:

Find my scanned tax documents from 2023, show me the exact matches, and restore the selected file to ~/Recovered/tax-2023.

The MCP server only serves find, show, and get; archiving, deletion, verification, and local-state reconstruction remain explicit CLI operations. If the local catalog itself is lost, use dropin recover --into ... first to rebuild it from the encrypted repository, then reconnect the MCP server to the new configuration.

More documentation

The release is source-available under the combined terms in LICENSE: Apache License 2.0 subject to Commons Clause License Condition v1.0. It is not OSI open source. Separate commercial terms may be available only through an executed written agreement and only for material the licensor is authorized to license; contact mail@johann3s.de.

Contributors

jmller

2 commits

Languages

Python

99.3%