@nippyhost/cli
v0.4.0
Published
Publish sites to nippy.host from the terminal, CI, or Claude (via MCP). Drop a folder, get a link.
Maintainers
Readme
@nippyhost/cli
Publish websites to nippy.host from the terminal, CI, or Claude. Drop a folder, get a link — photos become a gallery, files become a download page, sites just work. Links don't expire.
npx @nippyhost/cli login # one-time: approve in your browser, done
npx @nippyhost/cli deploy ./dist --site demo # → https://demo.nippy.siteThe bin is called nippy, so a global install gives you the short form:
npm i -g @nippyhost/cli
nippy deploy ./photos --site henderson-weddingCommands
| Command | What it does |
|---|---|
| nippy login | Opens your browser to approve the CLI on nippy.host (OAuth, no copy-paste) and stores the resulting scoped token in ~/.config/nippy/ (chmod 600). --paste for headless/SSH machines |
| nippy deploy [path] --site <name> | Publish a folder, single file, or zip. Existing site → updated in place, same URL; missing → created. --new forces a fresh site, --json for scripts |
| nippy sites / nippy sites info <name> | List sites / show one site's files |
| nippy open <name> | Open https://<name>.nippy.site |
| nippy whoami | Which credential is active, and does it work |
| nippy mcp install [--client …] | Add the MCP server to Claude Desktop, Claude Code, or Cursor |
| nippy mcp serve | Run the MCP server on stdio (assistants call this) |
Use from Claude (MCP)
On claude.ai (or any client that takes a remote MCP server): no install.
Add a custom connector with the URL https://api.nippy.host/mcp — approval
is the same OAuth consent screen as nippy login (Streamable HTTP,
OAuth 2.1 + PKCE, dynamic client registration). The remote server has the
same tools plus start_upload / start_revision / finalize_upload /
abort_upload for files of any type and size.
Claude Desktop, Claude Code, or Cursor (local, stdio):
npx nippy-mcp # Claude Desktop
npx nippy-mcp --client claude-code # Claude Code
npx nippy-mcp --client cursor # CursorThen just ask: "publish this page on Nippy". Tools include publish_site,
update_site (same URL, surgical file changes), list_sites,
list_permanent_sites, read_site_file, check_site_name, plus paid-plan
tools for passwords, SEO meta, search-indexing, and visitor analytics. Small
binaries (images, PDFs, fonts) go inline with encoding: "base64" — up to
4 MB per file, 12 MB per call; use nippy deploy for anything bigger.
Previews
Assistants iterate, and most drafts are throwaway — so publishing has two
verbs. publish_preview puts a draft at <slug>.preview.nippy.site: it
expires 24 hours after its last update, is never indexed, and doesn't use
up one of your site slots. update_preview revises it (and resets the
clock), list_previews shows what's active with time remaining, and
discard_preview throws one away.
When a draft is worth keeping, promote makes it permanent — either as a new
site or by replacing an existing site's contents. The preview URL doesn't die:
it becomes a permanent redirect to the site, so a link you already shared keeps
working.
publish_site is unchanged and still means "permanent, counts against your
plan". Free accounts hold 5 active previews at a time; paid plans are
unlimited.
Use in CI
# any CI — the token comes from a secret
- run: NIPPY_TOKEN=${{ secrets.NIPPY_TOKEN }} npx @nippyhost/cli deploy ./dist --site docs --jsonNIPPY_TOKEN always overrides the stored login.
Tokens & security
nippy loginuses the same OAuth consent screen as Nippy's AI connectors; the login shows up under Connected apps in Settings → API & MCP, where you can disconnect it any time. For CI, create a token there instead — free account works (1 live site, 25 MB, no card).- Tokens are scoped (deploy/read/manage/analytics) and revocable. They can never delete sites, touch billing, or manage your account — those need the dashboard.
- Plan limits are enforced server-side and reported honestly: hitting one tells you exactly what the limit is.
Notes
- A folder without
index.htmlbecomes a gallery (all images) or a tidy download page (mixed files) automatically. - Zips are unpacked locally before upload.
- Site names are subdomains of
nippy.site: lowercase letters, digits, hyphens. If a name's taken you get the next free suffix back.
MIT · nippy.host · help
