Claude Code plugin · SFTP · FTPS · FTP

Let Claude deploy your site to your FTP host.

Say "deploy this" and Claude ships your site to any SFTP or FTP host. Only the files that changed go up, the live site is fetched afterward to check the change is actually there, and "undo that" puts the previous version back in one step, no git needed.

# at the Claude Code prompt
/plugin install coolftp --marketplace anivdel/coolFTP

macOS, Linux and Windows, Node 18+. CLI: npm i -g coolftp

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

optional The Windows desktop app: watch each call live, click to approve deletes and undos →
Claude Code plugin · macOS, Linux, Windows

One install gives Claude the whole deploy workflow

The coolFTP plugin gives Claude the coolFTP tools, the know-how to deploy safely, /coolftp:setup, /coolftp:deploy, /coolftp:undo and /coolftp:live, and a panel next to the conversation where you watch each deploy, upload, live check and undo while Claude runs it. It needs Node 18 or newer and nothing else.

  • See it, not read it. Your computer on one side, your website on the other. While Claude publishes, the files fly across. When it is done the site gets a green check, or a red cross if something went wrong.
  • Plain English. "Publishing your site to coolftp.com", "Your site is live", "3 files updated". No hashes, no paths, no exit codes. If something fails it says what to do, like opening the coolFTP app.
  • A picture for every step. Rings pulse while it checks the site is up, a magnifying glass while it looks around, a bin while it deletes and waits for your OK, a spinning arrow while it puts the previous version back.
  • The numbers that matter. How long since your site last changed, how many files went up, and whether your site is answering and how fast it loads, plus a link to open it.
  • Remembers your last deploys, follows the coolFTP tools and the coolftp command alike, and only ever watches. It never blocks or changes what Claude does. With the desktop app open, approvals happen there.

Install it in Claude Code

# at the Claude Code prompt; answer y to add the marketplace
/plugin install coolftp --marketplace anivdel/coolFTP
# then link your project
/coolftp:setup
# open the panel again any time
/coolftp-panel

Needs Node 18 or newer; the desktop app is optional. In the Claude desktop app: + next to the prompt box, Plugins, Add marketplace anivdel/coolFTP, then add coolftp. Had the older coolftp-live mod? Uninstall it; its panel is part of this plugin. Source in plugins/coolftp.

How a deploy goes

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

  1. Install the pluginOne line in Claude Code: /plugin install coolftp --marketplace anivdel/coolFTP. Claude gets coolftp_deploy, coolftp_diff, coolftp_undo, coolftp_verify, coolftp_ls and friends, with results sized for an agent to read. Cursor and other MCP clients take the same server, and any agent with a shell just calls the CLI.
  2. Add your server onceOutside the chat, so your password never passes through Claude: in your own terminal with npx coolftp site add, or under Sites in the desktop app. Give it the site's public --url and every deploy checks the live site.
  3. Link the project/coolftp:setup works out which folder gets served and whether there is a build step, writes a tiny .coolftp.json, and tells you what the first deploy would send.
  4. Say the word"Deploy this." Claude 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.
  5. Optional: keep the desktop app openOn Windows, agent calls route through the running coolFTP app. You see each call in its Agents panel, each file in the transfer queue and each deploy in history, tagged with who did it, and deletes, undos and rollbacks wait for your click.
coolFTP desktop app · 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.

Sixty seconds, start to finish

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

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

In the desktop app, 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

With the desktop app open, 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

In the desktop app: 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 for 1 site, $49 Profree, 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

# the plugin: tools, deploy skill, commands, live panel
/plugin install coolftp --marketplace anivdel/coolFTP
# or just the MCP server, macOS and 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.

Every feature free on one site. Pro for all of them.

Free is the full coolFTP, nothing held back, for one site. The moment you deploy a second site, a client's or your own, that is Pro: $49 once, unlimited sites.

Free

Your one site, with every feature. Open source, no account, no nag.

  • 1 site over SFTP, FTPS or FTP
  • 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 payment

For anyone running more than one site: freelancers, agencies, side projects that multiply. Per person, up to three machines.

  • Unlimited sites, add every client and project you have
  • Everything in Free, same download: paste your key and the limit is gone
  • Works in the app, the CLI and the Claude Code plugin (/coolftp:license)
  • Priority support by email, from the person who wrote it
  • Updates for life, no renewals, no subscription
Buy Pro $49

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.2.0 · plugin 0.4.02026-10-17new

coolFTP Pro, and your config moves somewhere Claude Desktop can see it

Free keeps every feature for one site. Pro is a one-time $49 for unlimited sites, with updates for life. And on Windows the app, the CLI and the plugin now all read the same sites, even inside the Claude desktop app.

New
  • Pro: unlimited sites. Free covers one saved site; the second one asks for a key. Sites you already had are kept.
  • /coolftp:license <key> in Claude Code, the Pro button in the app, or coolftp license activate.
Fixed
  • Inside Claude Desktop on Windows, coolFTP could miss the sites saved in the app. Config now lives in %USERPROFILE%\.coolftp and moves over on first run. Update the app and the CLI together.
plugin 0.3.02026-10-16

coolFTP is one Claude Code plugin

One install now gives Claude everything: the coolFTP tools, the deploy know-how, slash commands and the live panel. Before, that took an npm install, a claude mcp add line (a different one on Windows), copying a skill folder by hand and a separate mod. Works with coolFTP 0.1.4; nothing to change in the app or the CLI.

New
  • The tools, started for you. Uses your installed coolftp when there is one, otherwise the latest from npm. No cmd /c on Windows.
  • The deploy skill in every project. Claude links a new project, previews before it deploys, only calls a deploy live when the site answered, and never asks for your password in the chat.
  • Commands: /coolftp:setup, /coolftp:deploy, /coolftp:undo, /coolftp:live.
  • The live panel from the coolftp-live mod is built in.
Install
  • In Claude Code: /plugin install coolftp --marketplace anivdel/coolFTP, answer y, pick a scope.
  • Had coolftp-live or a hand-added coolftp MCP server? Remove them so Claude does not see each tool twice.
mod 0.2.12026-10-11

A Claude Code mod: watch every deploy in a live panel

coolFTP now plugs into Claude Code itself. The coolftp-live mod adds a coolFTP panel beside the conversation, so you can follow what Claude is doing to your server as it happens instead of scrolling the chat for it. It works with coolFTP 0.1.2 or newer; nothing to change in the app or the CLI.

New
  • A picture of the whole trip. Your computer, your website and the path between them: files fly across while Claude publishes, rings pulse while it checks the site is up, and the site gets a ✓ or ✗ when it is done.
  • Plain English everywhere. "Your site is live · 3 files updated" instead of raw numbers, and errors that say what to do next.
  • Three tiles: how long since the last change to your site, files sent, and whether the site is up and how fast it loads. Each step below gets its own icon and "2 min ago".
  • A link to your site after each publish, and a toast in the same plain words when a change to the server finishes.
  • Status line while coolFTP is working, and /coolftp-panel to bring the panel back.
  • Your last 20 steps carry over, so a new session opens with what went live recently.
  • MCP tools and the CLI are both followed; the mod only watches and never blocks a call. In a plain terminal, where there are no pictures, it tells the same story in words.
Install
  • Now part of the coolftp plugin (above).
0.1.42026-10-12

Single-file uploads from your agent work while the app is open

A fix to the MCP server; the app and the CLI are the same as 0.1.3. Update if your agent uploads or downloads single files with coolFTP.

Fixed
  • With the coolFTP app open, an agent uploading index.html by its short name got "Local path not found", and a download landed in the app's install folder instead of your project. The app was reading the path from its own folder. coolFTP now turns it into a full path from your project first. Deploys were never affected.
0.1.32026-10-11

A fix for deploys that finished but said they had stopped

The app, CLI and MCP server are the same as 0.1.2 apart from this one fix. Update if you deploy with coolFTP, especially over SFTP.

Fixed
  • A deploy, upload or download could land every file and still end with "Deploy stopped after 30 of 30 files". Two of the parallel workers finishing at the same moment could both reach for the last file, and the one that came up empty failed the run. Each worker now takes a file only when it is ready to send it.
0.1.22026-09-09

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

The desktop app is optional: the plugin, CLI and MCP server work without it on any OS. It adds a live feed of every agent call and a click to approve deletes, undos and rollbacks. Windows installer and portable build below; 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.2.0-x64.exe SHA256. What's new is in the news and the changelog. Previous builds: 0.1.4, 0.1.3, 0.1.2, 0.1.1, 0.1.0.

Using the Claude Desktop app rather than Claude Code? Open coolFTP-0.2.0.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.2.0-x64.exe e28784f3a90243d49d367196ef268801339d7742ad70797e3f0d1bba1145e480
coolFTP-portable.exe 8b0a0f792069ecc10cc3320c4e14d7e149b8c37d92ee7b00fa3ac6ba7d861765
coolFTP-0.2.0.mcpb c8c8dfb30d3f95c06cd7b70110a826450c47742c1e1bf183523be9dbad2d8b21

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.

woodpeckerDig. Did the deploy break something? woodpeckerDig shows Claude what your program said: a live error feed per project.

magpieSnap. Show Claude what you see on the live site. magpieSnap: press Print Screen, box it, send it.

OwlSQL. Files are live, now the data. OwlSQL lets Claude fix your MySQL database, with every write undoable.