SFTP · FTPS · FTP · MCP

The FTP client your coding agent can drive.

You write code with Claude Code, Cursor, or Codex. The last step is still dragging files into a 2006-era FTP window. coolFTP fixes the last step. Your agent runs coolftp deploy: only the changed files go up, the site is checked live afterward, and coolftp undo puts the old version back if it went wrong, no git needed. You watch every file land.

Or install the CLI on any OS: npm i -g coolftp

Works with any host that speaks SFTP or FTP: Hostinger, HostGator, Bluehost, GoDaddy, any cPanel box, your own VPS.

0.1.2 Undo without git, confirmed uploads, parallel FTP, a yeti
claude code · my-site
 ship it to the server

 coolftp_deploy(message: "nav fix + og tags")
  via coolFTP app (port 51422)
  · Running build: npm run build
  · Scanning ./dist
   index.html 4.1 KB
   css/site.css 12.8 KB
   js/nav.js 2.2 KB
   Deployed to coolftp.com in 1.8s: +0 ~3 -0 (a91c2e0 on main)

 Live. Three changed files went up; 214 unchanged files were skipped
  because their hashes matched the manifest on the server.

 

Sixty seconds, start to finish

The old way, the coolFTP way, and the four things that make a working dev keep it installed.

Built for the way you actually ship now

Every FTP client assumes a human is clicking. coolFTP assumes a human is watching and an agent is doing.

  1. Link a folder onceRun coolftp init my-server in the project. It writes a tiny .coolftp.json so nobody has to remember hosts or paths again, agents included.
  2. Give your agent the toolsOne line: claude mcp add --scope user coolftp -- coolftp mcp. Claude Code gets coolftp_deploy, coolftp_diff, coolftp_undo, coolftp_verify, coolftp_ls and friends, with results sized for an agent to read. Any other agent just calls the CLI. In the Claude Desktop app, install the coolFTP extension and the chat gets the same tools.
  3. Keep the app openAgent commands route through the running desktop app. You see each call in the Agents panel, each file in the transfer queue, and each deploy in history, tagged with who did it.
  4. Say the word"Deploy this." The agent previews the diff, uploads only what changed, records the git commit next to the deploy, checks the site is live, and tells you what it skipped. "Undo that" puts the previous versions back.
coolFTP · Agents
◆ claude-code   diff …/my-site → coolftp.com          ok  0.6s
◆ claude-code   deploy …/my-site: nav fix + og tags  ok  1.8s
◆ cursor        read coolftp.com:/.htaccess          ok  0.2s
◆ codex         upload …/assets/hero.webp            running

Coding agents drive this app through a local hub on port 51422.
Nothing listens outside 127.0.0.1. Each call carries the agent name.

Features that earn their place

No ribbon toolbars. No "site manager wizard". The things a working developer needs, and a couple of things no other client has.

SFTP first, FTP still there

Key auth with your existing ssh-agent, or a password if you must. FTPS and plain FTP for the shared hosts that never upgraded.

#Hash-based deploys

A manifest on the server records the SHA-256 of every file it has. Deploys upload only what changed, even if timestamps lie.

Deploy history with git

Each deploy stores the commit, branch, dirty flag, message, byte count and which agent ran it. "What is live right now?" has an answer.

Live agent feed

Every call an agent makes shows up as it happens, with a progress card for the deploy, and expands to show where every file went. A Windows notification tells you how it ended while you are in another window.

MCP server built in

Eighteen typed tools for Claude Code and any MCP client. Sites, diff, deploy, undo, verify, rollback, ls, stat, read, write, upload, download, rename, delete, history.

Ignore rules that make sense

.git, node_modules, .env and logs never go up. Add a .coolftpignore for the rest, gitignore syntax.

Undo without git, rollback with it

Every deploy moves the files it overwrites into a backup on the server first, so coolftp undo puts them back even from a dirty tree. coolftp rollback restores any commit in history. Your working tree is never touched.

Deploys that verify themselves

Give a site its public URL and every deploy fetches the homepage and the changed pages, compares static files byte for byte with what you uploaded, and exits non-zero when the site does not answer. Agents stop guessing.

!A human click for destructive changes

When an agent asks to delete, deploy with --delete, or roll back, the app pops a yes/no on your screen. Two minutes with no answer means no.

Build before deploy

Set "build": "npm run build" in the project file and every deploy runs it first, agent-triggered or not.

Stale file cleanup, opt-in and guarded

Files you deleted locally are listed as stale and left alone until you pass --delete. A first deploy into a folder with other files refuses to delete them at all.

Pinned host keys, encrypted passwords

SFTP host keys are remembered on first use and a changed key is refused. Passwords are encrypted with the Windows user account, never plain text.

Two panes, no clutter

Local on the left, remote on the right, drag and drop from Explorer, preview text files in place, keyboard driven.

Confirmed, parallel, resumable

Big FTP deploys use four connections. Every upload's size is read back from the server, changed files are swapped into place rather than overwritten, and if a deploy dies halfway the next run finishes the rest.

Runs without the app too

Close the desktop app and the CLI and MCP server keep working in-process. Same commands, same config, on a headless box or in CI.

How it compares

FileZilla and CuteFTP are fine tools from a different era. Here is the honest comparison.

coolFTPFileZillaCuteFTPrsync / scp
SFTP with ssh-agent keysyesyesyesyes
Uploads only files whose content changedyes, by hashby size or timeby size or timeyes
Deploy history with git commityesnonono
Driveable by Claude Code / MCPbuilt innonoshell only
Shows agent actions live in a GUIyesnonono
Asks you before an agent deletes anythingyesn/an/ano
Undo the last deploy, no git neededone commandnonono
Roll back to the previous live versionone commandnonoby hand
Checks the site answers after deployingyes, and the bytesnonono
Confirms each upload with the serversize, every filenonochecksums
Refuses a changed SSH host keyyesyesyesyes
Per-project config committed with the code.coolftp.jsonglobal XMLglobalscripts
Runs a build step before deployyesnomacrosscripts
Works on shared hosts with FTP onlyyesyesyesno
Pricefree, MITfree, GPLpaidfree

Quickstart

Three commands from install to deploy. Everything the desktop app does, the CLI does too, so this works on a server with no screen.

Install and add a server

# install the CLI (works with or without the desktop app)
npm i -g coolftp
# add a server over SFTP, using your existing key or ssh-agent
coolftp site add coolftp.com --host coolftp.com --user deploy --root /var/www/html --url https://coolftp.com
# or a shared host over FTPS with a password
coolftp site add oldhost --host ftp.oldhost.net --user me --protocol ftps --password ... --root /public_html
# connect once to check it and record the host key
coolftp site test coolftp.com

Link a project and deploy

# in your project folder: link it to the site, deploy the dist folder, build first
coolftp init coolftp.com --local-dir dist --build "npm run build"
# what would go up
coolftp diff
# upload only the changed files
coolftp deploy -m "v1"
# also remove files you deleted locally
coolftp deploy --delete
# git commit, then deploy
coolftp deploy --commit -m "fix nav"
# put the previous versions back, no git needed
coolftp undo
# or restore the commit that was live before
coolftp rollback
# fetch the site and the last deploy's files again
coolftp verify
# what went live, when, from which commit, by whom, verified or not
coolftp history

Wire up Claude Code

# macOS, Linux
claude mcp add --scope user coolftp -- coolftp mcp
# Windows (npm installs a .cmd shim, so go through cmd)
claude mcp add --scope user coolftp -- cmd /c coolftp mcp
# then, in Claude Code, just say: "deploy this"

Project file (.coolftp.json): { "site": "coolftp.com", "localDir": "dist", "build": "npm run build", "ignore": ["*.map"] }. Commit it. Anyone on the team, human or agent, deploys the same way.

Free for your projects. Pro when it pays the bills.

The whole app is open source and every feature is in the free download. Pro is how you pay for it once coolFTP is part of how you make money.

Free

For personal projects. Open source, MIT, no account, no nag.

  • SFTP, FTPS, FTP, unlimited sites
  • Hash-based deploys, only changed files go up
  • Deploy history with the git commit
  • One-command rollback
  • Post-deploy verification
  • Live agent feed and the approval dialog
  • CLI and MCP server for Claude Code, Codex, Cursor
Download

Pro  $49, one time

For client work and anything commercial. Per person, up to three machines.

  • Everything in Free, same download
  • A license to use coolFTP for commercial work
  • Priority support by email, from the person who wrote it
  • A year of updates; builds from that year keep working forever
  • Your name on the thank-you list, if you want it there
Checkout opens shortly

Secure checkout by Stripe. Your key arrives by email from licenses@coolftp.com within a minute.

Lost your license key?

News

Every release, dated, with what changed and why. The full notes live in the changelog; releases are built from tagged commits on GitHub.

0.1.22026-09-09latest

Undo without git, confirmed uploads, parallel FTP, and output an agent can read

Four days of deploying a 15,000-file site from Claude Code, then fixing what got in the agent's way. Most of this release is for the agent; the app gets a few things to watch it with, and a yeti.

New
  • Undo. Deploys move the files they overwrite into a backup on the server first; coolftp undo puts them back, and is itself undoable. Five backups are kept per project.
  • Confirmed uploads. Every file's size is read back from the server; coolftp stat answers "is it there" without downloading.
  • Parallel FTP. Up to four connections for big jobs, falling back gracefully on hosts that allow fewer.
  • coolftp verify re-runs the live checks and compares static files byte for byte; stale copies behind a CDN are reported, not mistaken for failures.
  • App. A progress card per deploy, Windows notifications, agent calls that expand to show where every file went, live / failed / stale badges, Undo and Re-check buttons.
Fixed
  • A failed verification now exits with code 3 and names the URL; it used to exit 0.
  • Big deploys print a progress line every few seconds instead of a line per file; long plans are grouped by folder; MCP results are summarised.
  • The MCP server checks for the desktop app on every call instead of once at startup.
  • A pushed file is recorded in the manifest, so the next deploy does not upload it again.
  • Commands report the folders they created and warn when a single file opens a new top-level one.
  • Changed files and the manifest are swapped into place, never half-written.
Added 2026-09-10
  • Drag to select. Press in either file list and drag a box over the files you want, the way Explorer and FileZilla select. Ctrl toggles, Shift adds, the list scrolls when you drag past its edge, Ctrl+A selects everything, and the status line counts what is selected. The 0.1.2 installer was rebuilt with this in it.
  • Drag and drop between the panes. Grab a file or folder by its name and drop it on the other pane to upload or download it, or onto a folder there to land inside it. The blank part of a row still starts the selection box.
  • Pause, resume and cancel a deploy or folder transfer from its card in the Transfers tab, agent-driven ones included, plus a speed graph on every card. A manual upload or download of several files gets a card of its own too.
  • Deleting shows its progress on a card of its own, with a message when it is done.
  • Claude Desktop extension. A one-click install (.mcpb) gives the Claude Desktop app the same deploy tools Claude Code has, with the approvals in coolFTP.
0.1.12026-09-08

Steadier on big sites

Fixes from the first days of deploying a real 15,000-file site with coolFTP.

Fixed
  • Single-file pushes and browsing commands follow the project's remote directory, the same place deploy writes to.
  • Projects in a sub-directory get a url in .coolftp.json, so verification hits the real public address instead of the FTP path.
  • A dropped connection during a long scan no longer looks like a missing manifest; the FTP transport reconnects.
  • Git Bash path mangling of arguments starting with / is undone.
0.1.02026-09-05

First public build

Desktop SFTP/FTPS/FTP client, the coolftp CLI, and the MCP server for Claude Code.

New
  • Hash-based deploys with a server-side manifest, deploy history with git commits, one-command rollback.
  • Post-deploy verification, approval dialogs for destructive agent actions, a live agent feed in the app.
  • SSH host key pinning, passwords encrypted with the Windows account, resumable deploys.

Download

Windows installer and portable build. macOS and Linux builds come from the same Electron source; run npm run dist to build them yourself until signed builds are published.

Not signed yet, so SmartScreen will ask twice. If that matters to you (it should), check the SHA-256 after downloading with certutil -hashfile coolFTP-0.1.2-x64.exe SHA256. What's new is in the news and the changelog. Previous builds: 0.1.1, 0.1.0.

Using the Claude Desktop app rather than Claude Code? Open coolFTP-0.1.2.mcpb in Claude Desktop and hit Install. The chat gets the same coolftp tools, deploys still show up in the coolFTP app, and deletes, undos and rollbacks still wait for your click there. It is not code-signed yet, which the install dialog points out.

coolFTP-0.1.2-x64.exe 3725555a2dff04aeadcb2bff938d0b92c9e8bd9371ce644e1304ecbfaebe144d
coolFTP-portable.exe 32cf284f8634fa173b457c7d3c2b9cac3a49374e53efa45d15de3c0366d72a46
coolFTP-0.1.2.mcpb 5ef6e981da82ae32a31e12c67b731011ac21df089b2ee2b19d77532914421a57

Questions a developer would ask

Where does the manifest live and is it public?

At <remote root>/.coolftp/manifest.json, alongside a .htaccess with Require all denied. Apache and LiteSpeed honour it. On nginx add a location ~ /\.coolftp deny rule, or point remoteRoot one level above the web root. The manifest contains file paths and hashes, never contents or credentials.

What if the server already has files coolFTP did not upload?

The first deploy has no manifest, so coolFTP walks the remote tree and compares sizes. Files it has never seen are treated as stale and never deleted unless you pass --delete. After that first deploy, hashes take over.

How are passwords stored?

Encrypted with the Windows Data Protection API under your user account, in sites.json in your profile. Another user on the same PC, or a copy of the file taken elsewhere, cannot decrypt them. SSH keys with the ssh-agent are still the better option, because then nothing secret is stored at all. The app never sends passwords to the interface or to agents. Agents only ever see hasPassword: true.

Can an agent delete my whole site?

Not without you. When an agent asks to delete a path, deploy with --delete, roll back, or undo a deploy, the desktop app shows a dialog and waits for your click; no answer in two minutes counts as no. Deleting the site root is refused outright. A first deploy into a folder that already has files refuses to remove them. Every call is logged with the agent name. And if the worst happens anyway, coolftp rollback restores the previous commit.

Does it need the desktop app running?

No. The CLI and the MCP server run everything in-process when the app is closed. When the app is open they route through it, so you get the live view and share its open connection.

Why Electron?

Because the same TypeScript core runs the CLI, the MCP server and the app, and because ssh2 and basic-ftp are the most battle-tested SFTP and FTP libraries in any language that also ships a GUI toolkit. The bundle is bigger than a native app. The code is smaller.