Deploy a folder of static files with one command.
Uploads the folder as-is and prints a live URL in about two seconds. No account, no config, no build step — and running it again updates the same site.
$ npx harvisWorking with an agent? It can deploy directly.
harvis.dev is a remote MCP server. Paste one config block into Cursor, Claude Desktop, VS Code or any MCP client and your agent gets a deploy_site tool — no account, no API key.
- Clients with remote MCP support connect straight to the URL
- Stdio-only clients like Claude Desktop bridge through mcp-remote
- Deploys return the live URL plus a private claim link for your dashboard
$ claude mcp add --transport http harvis https://harvis.dev/api/mcpStatic sites can still have a contact form.
A hosted site runs no code of its own, so a form on one normally means signing up with a third-party service. harvis serves every page you deploy, so it collects the form itself — add one attribute and redeploy.
- Plain HTML, your own markup and styling — no script tag, no embedded widget
- Spam filtering, a thank-you page and CSV export are already on
- Submissions land in your dashboard, newest first
<form harvis-form="contact"> <input name="email" type="email" required> <textarea name="message"></textarea> <button>Send</button> </form>
Already on GitHub? Deploy from Actions.
When you do keep the site in a repo, one step at the end of your workflow ships the build output. Every push to main updates the same site.
- Add one step after your build and point it at the output folder
- A deploy token from the dashboard keeps updating the same site
- Leave the token out and every run gets a fresh preview URL
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- uses: harvis-io/static-deploy-action@v1
with:
directory: dist
token: ${{ secrets.HARVIS_DEPLOY_TOKEN }}Why new static hosting?
Every other option asks you to bring something first — a Worker, a repo, a build. A folder of HTML should not need any of that.
Cloudflare turns everything into a Worker
Even a plain HTML page now goes through a Worker, a wrangler config and a build step. That is a lot of machinery for three files that never change.
Surge runs on DigitalOcean
Harvis runs on Cloudflare's edge network instead, so your files are served from wherever your visitors happen to be.
GitHub Pages needs a repo
No repository, no commit, no Actions workflow here. You upload files and they are live — version control stays your choice, not a requirement.
Built for temporary sites
Demos, one-off pages, a mockup you want a colleague to look at today. Put it online, share the link, forget about it.
Paste straight from an AI chat
When a model hands you a block of HTML, drop it in and get a real URL back. No project to scaffold before you can see it in a browser.
Three ways to ship
The same deploy, whichever surface you happen to be working from.
- 01
Command line
One command from any project folder. Run it again and the same site updates in place.
- 02
HTTP API
POST your files to /api/upload and read the live URL straight out of the response.
- 03
AI agents
Point an agent at the MCP server or the copyable instructions and it publishes for you.
How it works
- 01
Install the CLI
One command: "npm i -g harvis". Or skip installing entirely and run it with "npx harvis".
- 02
Run it in any folder
Type "harvis" inside the folder you want online. It uploads everything — HTML, CSS, JS, images — in seconds.
- 03
Get your links
You get a public live-site link and a private claim link. Open the claim link and sign in to manage the site from your dashboard.
- Works from any project folder
- No account or config needed
- Run it again to update the same site
Made with AI and Published on harvis.dev
A hand-picked gallery of sites people have already put online. Tap any card to see it live.
Frequently asked questions
Everything you might be wondering before you hit publish.