Developer tools
pepita is a website builder for people who'd rather not build a website. These two doors do the same things the editor does — read files, make edits, publish, and spin up shareable preview links — without opening it. Same account, same sites, no new passwords.
you › List my pepita sites, then read index.html on my-landing.
→ 3 sites. my-landing/index.html (52 KB), styles.css, …
you › Change the hero headline to "Roofing done right".
→ wrote index.html
you › Give me a preview link I can send my client.
→ preview ready → my-landing--a1b2.pepita.page
you › Looks good — publish it.
✓ published → my-landing.pepita.page
Claude connector · MCP
Connect pepita to Claude (Claude Code, Claude Desktop, or the MCP Inspector) and edit your sites in plain language. Fifteen tools — create new sites, read them, edit and publish them, manage shareable preview links, and reach the videos pepita hosts for you. Edits show up live in the pepita web editor too, so you can move between the chat and the visual editor mid-task.
list_sitesreadcreate_sitewritesname · allow_embedding? · block_ai_crawlers?write_site_file. Embedding by other sites starts off and AI-crawler visibility on; allow_embedding and block_ai_crawlers flip those, and both are changeable later in the editor's settings.get_statusreadsluglist_site_filesreadslug · state? · preview?read_site_filereadslug · path · state? · preview?write_site_filewritesslug · path · contentpublishwritesslug<slug>.pepita.page (and any custom domain).create_previewwritesslugupdate_previewwritesslug · namelist_previewsreadslugdelete_previewwritesslug · namelist_video_assetsreadslugget_video_asset_original_urlreadslug · idrename_assetwritesslug · id · new_namedelete_video_assetwritesslug · idEvery tool takes the site's slug — get it from list_sites. In a signature, ? marks an optional argument. The file-reading tools also accept a state — unsaved (the working copy, the default) or live (the published site) — or a preview name from list_previews, to look at a shared version instead.
read_site_file / write_site_file. You upload one with the CLI's pepita asset add (below); the connector then lists what's hosted and hands back the streaming URL you reference in your markup.Two ways in. The remote connector is hosted — nothing to install, just sign in with your pepita account. The local server runs on your machine and works with any MCP client. It's also listed in the MCP Registry as dev.pepita.mcp/mcp — if your client browses the registry, search for pepita and add it there; otherwise pick the remote or local setup below.
# Claude Code — add the hosted connector; sign in on first use
$ claude mcp add --transport http pepita https://mcp.pepita.dev/mcp
# Claude Desktop / claude.ai → Settings → Connectors →
# Add custom connector → https://mcp.pepita.dev/mcp
# 1. authorize this device once (opens the browser)
$ npx @pepitahq/cli login
# 2. add the local connector to Claude Code
$ claude mcp add pepita-local -- npx -y @pepitahq/mcp
List my pepita sites and show me the files in <slug>.
On <slug>, rewrite the About section to be warmer.
Give me a shareable preview link for <slug> to send my client.
What videos are hosted on <slug>? Put the intro clip at the top of the home page.
Publish <slug> to the live site.
Command line · CLI
@pepitahq/cli pulls a site to your machine, lets you edit it with your own tools, and pushes it back — authenticated the way wrangler or gh do it: a browser sign-in, no pasted API key.
$ npm install -g @pepitahq/cli
$ pepita login
→ authorized as you@example.com
pepita listpepita create<name> · --allow-embedding · --block-ai-crawlers · --from <dir>--from <dir> seeds it from a local folder instead of the blank starter; --allow-embedding lets other sites embed it (off by default) and --block-ai-crawlers asks AI crawlers to stay away (they're welcome by default).pepita pull<slug> · --live · --preview <name> · --dir <path>--dir (default ./<slug>). Pulls the working copy unless you pass --live (the published site) or --preview <name>.pepita apply<slug> · --dir <path> · --yes--dir (default ./<slug>) into the working copy. Shows a plan and asks first; --yes skips the prompt.pepita preview<slug> · --update <name> · --delete <name>--update <name> pushes the current site onto an existing link; --delete <name> stops serving one (restorable from History).pepita previews<slug>pepita publish<slug>pepita statusslug?pepita delete<slug> · --download-snapshot · --yes--download-snapshot saves a copy to /tmp first; --yes skips the confirmation.pepita whoamipepita logoutpepita assetVideos are hosted outside your files (see Add a video below). Every asset subcommand needs --site <slug> to say which site it belongs to.
pepita asset add<file> · --site <slug>pepita asset list--site <slug>pepita asset info<id> · --site <slug>pepita asset rename<id> <new name> · --site <slug>pepita asset rm<id> · --site <slug> · --yes--yes skips the confirmation.pepita asset pull<id> · --site <slug> · --out <path>--out (default the current folder).$ pepita pull my-landing --dir ./my-landing
# …edit files with your own tools…
$ pepita apply my-landing --dir ./my-landing
$ pepita preview my-landing # a shareable link to review first
$ pepita publish my-landing
→ published → my-landing.pepita.page
A video doesn't belong in your files — it's too big — so it doesn't go through pull / apply. Upload it once with pepita asset add: pepita hosts it, prepares it to stream on any device, and gives you back a URL to drop into your markup.
Two things before you upload. Hosting a video costs 60¢ per minute of source footage, charged from your pepita balance when the upload lands — streaming it afterwards costs nothing, and pepita status shows what's left. And only mp4, mov and m4v are accepted, checked by content rather than by file extension: anything else (WebM, AVI, MKV…) is refused before the upload starts, so re-export it as mp4 first.
$ pepita asset add intro.mp4 --site my-landing
# uploads, then prepares it to stream (~a couple of minutes)
→ ready → https://cdn.pepita.dev/…/hls/playlist.m3u8
$ pepita asset list --site my-landing # what's hosted
Images · automatic
When you publish, pepita transcodes every jpg, jpeg and png into a smaller WebP beside it: hero.jpg gets a hero.jpg.webp. Your original is never touched — not moved, not re-encoded, not replaced. There is nothing to configure. The only thing to know is which of the two URLs to point at.
hero.jpgThe original, byte for byte, forever. Point anything that leaves your site at this one.originalhero.jpg.webpThe optimised copy — often a fraction of the size. Point your site's own markup at this one.optimised<!-- your own pages: use the optimised copy -->
<img src="/hero.jpg.webp" alt="…">
<style> .hero { background-image: url(/hero.jpg.webp); } </style>
<!-- anything that leaves the site: use the ORIGINAL -->
<meta property="og:image" content="https://you.pepita.page/hero.jpg">
.webp cannot break your site. If the optimised copy doesn't exist — a brand-new image, one that didn't come out any smaller, or a site you haven't published since adding it — the server hands back the original's bytes, with the original's content type. So it is safe to write the .webp path before it exists. The worst case is a missed optimisation, never a broken image.og:image), email, and any URL someone might paste elsewhere should point at hero.jpg. WebP support in link-preview scrapers and mail clients is still patchy — and a missing social card is the kind of thing you only discover after posting. The original's URL is a permanent public contract: it will always serve exactly the file you uploaded.jpg · jpeg · pngThe only formats transcoded. svg, gif, ico and files that are already webp are served untouched.only if smallerSome images — flat-colour PNGs especially — come out bigger as WebP. Those get no copy at all, and the fallback quietly serves the original.2560px long edgeAnything bigger is scaled down to fit, aspect ratio preserved, never scaled up. This, not the format change, is where most of the saving comes from.your file winsUpload your own hero.jpg.webp and pepita leaves it exactly as you made it. It never writes over a file you put there.hero.jpg and ignore the copy. Nothing obliges you to use it, for one image or across the whole site. (If pepita's AI is writing your pages, tell it so and it will do the same.)