Plugin directory / Developer / dsh-plugin-ftp-server
dsh-plugin-ftp-server
Unverified YinjiangCN
What it does
Configurable FTP file server for DeepSeek Harness with a browser settings panel (zero-dependency FTP core).
Unverified — not yet verified
Configurable FTP file server for DeepSeek Harness with a browser settings panel (zero-dependency FTP core). Not yet verified — install and test it yourself.
“Unverified” means our automated CI has not yet installed this plugin. Feature descriptions and version compatibility are the author’s claims. This is not a security audit and not an endorsement of third-party code.
README
dsh-plugin-ftp-server
Run a configurable FTP file server inside DeepSeek Harness, managed from a browser settings panel. Host any directory over plain FTP — browse, upload, download, rename and delete files with any FTP client.
⚠️ Plain FTP has no TLS: credentials and data travel in cleartext. Use it on trusted networks only.
Features
- Zero-dependency FTP server core (pure Node built-ins), spawned as a child process of the harness
- Full command support:
USER/PASS,PWD/CWD/CDUP,LIST/NLST/MLSD,RETR/STOR/APPE/STOU,DELE/MKD/RMD,RNFR/RNTO,SIZE/MDTM/REST(resume),PASV/EPSV/PORT,FEAT/STAT/ABOR/NOOP - Chrooted to the shared root — path escape (
..) is blocked, and the root itself cannot be deleted or renamed - Single account + password, or anonymous mode
- Browser panel (Settings → FTP 服务): configure host/port/root/credentials, start/stop, live status (PID, uptime), shared-root listing and server log
- Idle timeout (180 s), crash detection, automatic child-process cleanup when the plugin is stopped
Install
dsh plugin --profile web add github:YinjiangCN/dsh-plugin-ftp-server
Then restart dsh. Open Settings → FTP 服务, fill in the form and click 启动服务.
Usage
| Field | Default | Meaning |
|---|---|---|
| 监听地址 (host) | 0.0.0.0 |
Bind address |
| 端口 (port) | 2121 |
Control port |
| 共享根目录 (root) | workspace/ftp-root |
Directory shared over FTP (created on start) |
| 用户名 (user) | ftp |
Login account (ignored in anonymous mode) |
| 密码 (pass) | (empty) | Login password |
| 允许匿名 (anonymous) | off | Allow anonymous login |
Clients connect with ftp://<user>@<host>:<port>. The password is kept in memory only; it is passed as a child-process argument and never written to disk.
Security notes
- Do not set 共享根目录 to
/unless you really want to share the whole filesystem — anyone with the credentials can read/modify every file (the server runs with the harness user's privileges). - Plain FTP is unencrypted; prefer an internal/trusted network.
- The server supports one account; for multiple users run multiple instances on different ports.
Development
lib/index.js host half — FTP process management + Typert Remote service `ftpServer`
lib/client.js browser half — settings panel (module-loader bundle)
lib/ftp-server.js standalone FTP server (spawned by the host half)
cordis.patch.yml loader patch mounting the host half
The host half registers the ftpServer Remote service; the panel calls status/start/stop/listRoot through the Typert Gateway (host-side SRC-mode discovery with hand-written strict client descriptors).
License
MIT
Install
Install the catalog once, then DeepSeek Harness can find and install any plugin from this site automatically:
dsh plugin add dshbase-catalog Then say "install dsh-plugin-ftp-server for me" — your agent finds it in the directory and installs it. Docs: dshbase-catalog · verified packs.
This plugin is GitHub source (not published to npm) — install it straight from the repo:
Web profile:
dsh plugin --profile web add github:YinjiangCN/dsh-plugin-ftp-server Headless (CLI) profile:
dsh plugin --profile headless add github:YinjiangCN/dsh-plugin-ftp-server Test report
Not yet L3-verified — see failure note below if we already ran it.