v0.4 · open source · Cloudflare Workers

The CMS your agents write to

Hollware is a headless CMS native to Cloudflare Workers. Agents write Markdown over MCP, contracts check every write, D1 keeps the content, and your sites read it over Workers RPC.
$npm create hollware my-cms
agent → hollware /mcp
  1. ›create_draftblog / en / hello-world
  2. saved · version 1 · verdict: 1 error
  3. /frontmatter/description is 212 characters, at most 160
  4. fix: shorten the description to 160 characters or fewer
  5. ›update_draftversion 1
  6. saved · version 2 · verdict: ok
  7. ›publishversion 2
  8. published · live on the site
Why Hollware

Content that agents can write, and that you can trust

Every write goes through the same checks, whoever makes it: an agent, a person in the admin, or a script.
  • Contracts on every write
    The schema of your frontmatter, your components and your rules check each draft. A draft that breaks one is saved anyway, with the fix an agent can apply.
  • MCP, natively
    Twelve tools over both revisions of the protocol, with personal tokens or OAuth. Claude Code, claude.ai and any MCP client write to it.
  • One source of truth
    D1 keeps every entry and every revision, append only. Markdown goes in and comes back out byte for byte, never locked in a format of ours.
  • Read at the edge
    A Worker reads published content over a service binding: no network, no token. Anywhere else, the read API and a read token.
  • People stay in the loop
    Passkeys, roles per site and a review queue: an author’s agent asks to publish, and an editor approves the diff in the admin.
  • Yours to run
    It deploys to your own Cloudflare account in one command, built for the limits of the free plan. MIT licensed, no service in between.
Three commands

From nothing to live

  1. 01

    Create a project

    npm create hollware my-cms

    A config, a Worker and a local database, with your site, its owner and a token.

  2. 02

    Connect your agent

    claude mcp add --transport http hollware http://localhost:5199/mcp --header "Authorization: Bearer hw_pat_…"

    It reads your contracts with describe_site, then writes and publishes drafts.

  3. 03

    Deploy it

    npm run deploy

    Hollware creates its database, namespace and queues on your account, and migrates.

hollware.config.ts

Your contracts are code

One file says what your content is: its schema, its routes per locale, its components and its rules. Agents read it before they write, and every write is checked against it.
export default defineConfig({
  sites: {
    blog: {
      locales: ['en', 'es'],
      defaultLocale: 'en',
      collections: {
        posts: defineCollection({
          schema: z.object({
            title: z.string().min(1),
            description: z.string().max(160),
            date: z.iso.date(),
          }),
          routes: { en: '/blog/:slug/', es: '/es/blog/:slug/' },
          contracts: [contracts.imagesHaveAlt()],
        }),
      },
    },
  },
})

Give your agents a CMS

Running on your own Cloudflare account in a few minutes.

$npm create hollware my-cms