AeroSync
AI-native file transfer. A fast Rust CLI and an MCP server — let Claude, ChatGPT, Cursor or your own agent move files between machines as easily as
scp, with automatic QUIC upgrade, resumable chunked uploads and zero infrastructure.
简体中文 · Architecture · MCP for AI agents
Why AeroSync?
| Tool | Resume | QUIC auto | Built-in receiver | LAN discovery (mDNS) | MCP server for AI agents |
|---|---|---|---|---|---|
scp |
✗ | ✗ | ssh required | ✗ | ✗ |
rsync |
✓ | ✗ | ssh required | ✗ | ✗ |
croc |
✗ | ✗ | ✓ | ✗ | ✗ |
rclone |
✓ | ✗ | ✗ | ✗ | ✗ |
| AeroSync | ✓ | ✓ | ✓ | ✓ | ✓ |
Designed for the use case nothing else covers cleanly: one agent on machine A asks another agent on machine B "send me that 30 GB dataset", and it just works — over LAN (QUIC, mDNS-discovered) or WAN (HTTP fallback), resumable, with a single binary on each side.
Features
- Auto protocol negotiation — probes the peer for AeroSync; upgrades to QUIC if both sides support it, falls back to HTTP otherwise.
- Resumable transfers — 32 MB chunks, state persisted to local JSON, recovers automatically after a crash or
Ctrl-C. - Concurrency tuned to file size — 16-way for
<1 MB, 8-way for<64 MB, chunked for>64 MB. - Multi-protocol — HTTP, QUIC, S3 (incl. MinIO), FTP — all behind one CLI.
- Recursive directory transfer with full structure preservation (
--recursive). - End-to-end SHA-256 integrity check.
- HMAC-SHA256 bearer token auth.
- TOML config with CLI overrides.
- MCP server — exposes 8 tools (
send_file,send_directory,start_receiver, …) so AI agents can drive transfers natively. Seedocs/mcp-integration.md.
Install
From source (any platform with Rust ≥ 1.89)
# binaries: target/release/aerosync, target/release/aerosync-mcp
One-line install (macOS / Linux, x86_64 + arm64)
|
The script verifies SHA-256, installs into ~/.local/bin (no sudo) and prints next steps. Other channels — Homebrew, cargo install, prebuilt archives — are documented in docs/install.md.
Quick start
Receiver (target machine):
Sender (source machine):
# Single file (auto-negotiates protocol)
# Recursive directory (preserves structure)
# Force HTTP
# Upload to S3 / MinIO
# Upload to FTP
CLI reference
aerosync send
aerosync send <SOURCE> <DESTINATION> [OPTIONS]
| Option | Description | Default |
|---|---|---|
<SOURCE> |
Source file or directory | — |
<DESTINATION> |
host:port, http://, quic://, s3:// or ftp:// |
— |
-r, --recursive |
Send a directory recursively | false |
--protocol |
Force a protocol: quic | http |
auto-negotiate |
--token |
Auth token | — |
--parallel |
Number of concurrent streams | 4 |
--no-verify |
Skip the SHA-256 check | false |
--dry-run |
Print the transfer plan and exit | false |
--no-resume |
Disable resumable transfer | false |
aerosync receive
aerosync receive [OPTIONS]
| Option | Description | Default |
|---|---|---|
--port |
HTTP listen port | 7788 |
--quic-port |
QUIC listen port | 7789 |
--save-to |
Directory to save received files | ./received |
--bind |
Bind address | 0.0.0.0 |
--auth-token |
Require this token from senders | — |
--one-shot |
Exit after one file is received | false |
--overwrite |
Allow overwriting files with the same name | false |
--max-size |
Maximum file size (bytes) | 100 GB |
--http-only |
HTTP only, disable QUIC | false |
aerosync token
# Generate a token (24 h validity)
# Use a custom secret
# Verify a token
aerosync resume
aerosync status
Configuration
Default path: ~/.aerosync/config.toml (override with --config).
[]
= 4 # max concurrent tasks
= 32 # chunk size for resumable upload
= 3 # max retries per chunk
= 60 # per-request timeout
[]
= "" # default auth token
[]
= 7788
= 7789
= "./received"
= "0.0.0.0"
CLI flags always override the config file.
Use with AI agents (MCP)
AeroSync ships an MCP server (aerosync-mcp) that lets any MCP-compatible client — Claude Desktop, Claude Code, Cursor, ChatGPT (via plugins), Continue.dev — drive file transfers natively.
// Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json)
{
"mcpServers": {
"aerosync": {
"command": "aerosync-mcp",
"env": { "AEROSYNC_MCP_SECRET": "change-me" }
}
}
}
8 tools are exposed: send_file, send_directory, start_receiver, stop_receiver, get_receiver_status, get_transfer_status, discover_receivers, list_history. Full schemas, runtime envs and security notes: docs/mcp-integration.md.
Protocol details
QUIC auto-negotiation
When the destination is host:port, AeroSync probes http://host:port/health (2 s timeout). If the response carries the header X-AeroSync: true, it upgrades to QUIC on port + 1; otherwise it falls back to HTTP.
host:7788 → probe → AeroSync detected → quic://host:7789
→ no AeroSync → http://host:7788/upload
S3-compatible storage
# MinIO: configure s3_config.endpoint = Some("http://minio:9000")
FTP (passive mode)
Resumable transfers
Files larger than 64 MB automatically use chunked upload (32 MB per chunk). State is stored under ~/.aerosync/.aerosync/<task_id>.json.
Architecture
aerosync (CLI) aerosync-mcp (MCP server for AI agents)
│ │
└──────────────┬───────────────┘
▼
aerosync-core
├── TransferEngine concurrent workers (FuturesUnordered + Semaphore)
├── ProgressMonitor progress reporting
├── ResumeStore chunked-resume persistence
├── FileReceiver HTTP/QUIC receiver
└── AuthManager HMAC-SHA256 tokens
│
▼
aerosync-protocols
├── AutoAdapter protocol routing (auto-negotiation)
├── HttpTransfer HTTP up/down (shared Arc<Client>)
├── QuicTransfer QUIC (quinn + rustls)
├── S3Transfer S3 (AWS SigV4)
└── FtpTransfer FTP (suppaftp async)
Concurrency strategy
| File size | Strategy | Concurrency |
|---|---|---|
< 1 MB |
high-concurrency batch | 16 |
1 – 64 MB |
medium-concurrency batch | 8 |
> 64 MB |
chunked + resumable upload | 1 (per-chunk pipe) |
Development
Contributions are very welcome — see CONTRIBUTING.md and SECURITY.md.
License
MIT — see LICENSE.