Open source · Self-hosted · MIT licensed

Ask Claude for a page.
Share it on your domain.

Kazari is a small, self-hosted home for what Claude builds: prototypes, reports, dashboards and demos. Every page gets its own address, every change is kept as a version, and people can sign in with the work account they already have.

Get started Read the docs

  • One Go binary
  • MCP, REST and CLI
  • Your identity provider

How it works

From a sentence to a link

  1. 1

    Connect

    Add Kazari to claude.ai as a custom connector, or to Claude Code with one command, and sign in with your work account or an API key.

  2. 2

    Ask

    Describe what you want. Claude writes the page, publishes it with Kazari's tools and replies with the link.

  3. 3

    Iterate and share

    Ask for changes and Claude publishes a new version. The link stays the same, and every version keeps an address of its own.

Who it's for

Made for the people who make things

One service with three ways in, so everyone on the team can use the one that suits them.

Designers and admin staff

Prototypes without a pipeline

  • Turn an idea into a clickable page in one conversation
  • No repository, build step or hosting account
  • Go back to any earlier version by asking
Publish with Claude

Vibe coders

From prompt to URL

  • Claude Code builds the site and ships it with a tool call
  • Large bundles upload in resumable chunks
  • Single-page apps route correctly
Quick start

Developers

A proper API underneath

  • Publish from CI with the CLI or the REST API
  • Pin reviews to immutable version URLs
  • Let preview builds expire on their own
Publish from code

Operators and IT

Yours to run

  • One binary, SQLite and a directory of files
  • Wildcard TLS, OIDC sign-in, quotas and rate limits
  • An audit log and Prometheus metrics
Install

Addresses

Every page is its own site

Kazari serves each artifact from its own subdomain under one wildcard certificate. Each is a separate browser origin, so one page can't read another's cookies or storage.

Versions never change. Put a version link in a review thread and it will always show what the reviewer saw.

onboarding.art.example.com

The published version. It moves when you publish or roll back.

onboarding--v3.art.example.com

Version 3, for good. Safe to cache, safe to link.

mcp.art.example.com

The MCP server for Claude, beside api. for the REST API and admin. for operators.

v1v2v3v4published

Rolling back moves a pointer. Nothing is copied and nothing is lost.

Publish your way

Same service, whichever door you use

The MCP server, the REST API and the CLI share one service layer and return the same JSON.

Add a custom connector with your instance's MCP address, sign in once, then ask in plain words.

Publish with Claude

Connector URLhttps://mcp.art.example.com/

You

Turn the attached CSV into a dashboard with a chart per region and publish it to Kazari as q3-dashboard.

Claude

Published https://q3-dashboard.art.example.com/ (version 1)

Features

What a team needs, and little else

Versions you can trust

Every publish is an immutable, content-addressed version. Roll back or forward with one call; optimistic concurrency stops lost updates.

Three ways in

An MCP server with twelve tools, a REST API and a CLI, all on one service layer and all returning the same JSON.

Your sign-in

OAuth 2.1 for MCP clients, federated to Microsoft Entra ID, Google Workspace, Okta, Keycloak or any OpenID Connect provider. No passwords stored.

Safe defaults

An origin per page, a Content-Security-Policy that still allows the common CDNs, no search indexing unless you ask, quotas and rate limits.

Small pages and big sites

Inline files for a single page, tar.gz bundles for whole sites, resumable chunked uploads for MCP clients without a shell.

Simple to run

One static Go binary or a distroless image. SQLite and a directory of blobs are the only state. Wildcard certificates by ACME DNS-01.

Observable

Structured request logs, Prometheus metrics, an admin API and an append-only audit log of every change.

Tidy by default

Pages you no longer need retire themselves on a schedule you set, and every step up to the purge can be undone.

Lifecycle

Pages that tidy up after themselves

Generated pages pile up. Mark one stale and it keeps serving through a grace period, then steps out of the way. Each step lands in the audit log, and everything short of the purge can be reversed.

How the lifecycle works
  1. PublishedServing at its address
  2. StaleStill serving for the grace period, 14 days by default
  3. Soft-deletedOffline, restorable for 30 days
  4. PurgedGone; old links answer 410 for 90 days
  5. Slug freeThe name can be used again

Self-hosting

Running in minutes

Try it on your machine

No domain or certificate needed: browsers resolve *.localhost to your own computer.

git clone https://github.com/PeterBooker/kazari.git
cd kazari
docker compose up --build -d
# pages appear at http://<slug>.localhost:8080/
Quick start

Run it for your team

You need a domain, a wildcard DNS record and a DNS API token for the certificate, or a reverse proxy that already has one.

docker run -d --name kazari -p 80:80 -p 443:443 \
  -v /srv/kazari/data:/var/lib/kazari \
  -e KAZARI_BASE_DOMAIN=art.example.com \
  -e KAZARI_TLS_EMAIL=[email protected] \
  -e KAZARI_TLS_DNS_PROVIDER=cloudflare \
  -e KAZARI_TLS_DNS_API_TOKEN=cf-token \
  -e KAZARI_AUTH_ADMIN_TOKEN="$(openssl rand -hex 32)" \
  ghcr.io/peterbooker/kazari:latest serve
Installation guide

Status. Kazari is heading for v1.0. The server, REST API, MCP server, OAuth sign-in and CLI work today; expect breaking changes until v1.0.0 is tagged.

Give your team somewhere to put things.

Get started View on GitHub