CMS Node.js · TypeScript · self-hosted

A CMS your AI
can actually run.

NodePress is a WordPress-style CMS written in TypeScript: server-rendered pages, a block editor, multilingual content and themes you edit live — plus a built-in MCP server, so Claude and other assistants can manage the whole site in plain language.

Node.js 22 · MySQL / MariaDBSelf-hosted, Docker readyMCP over OAuth 2.1
~/mikedag.dev
~ claude mcp add --transport http nodepress https://mikedag.dev/mcp
✓ Authenticated via OAuth · access: admin
> Add a NodePress page under /apps, in English and Italian
→ content_create · theme_write_files · theme_preview
✓ Done — you're reading it.
~ 
Node.jsTypeScriptReact RouterSSRMySQLMariaDBDrizzle ORMTiptapshadcn/uiMCPOAuth 2.1Tailwind CSS v4MonacoesbuildDocker
What's inside

Everything a site needs. Nothing it doesn't.

Block editor & multilingual

A Tiptap editor with images, galleries, embeds and theme sections. Every page exists per language, with translated slugs, SEO fields and automatic 301s when a path changes.

Tiptapi18nSEO301

Built-in MCP server

50 tools for content, media, menus, redirects, languages, users and themes. Connect claude.ai, Claude Desktop, Claude Code or Cursor with OAuth 2.1 or an API key.

MCPOAuth 2.1PKCE

Themes in the database

Create and edit themes at runtime, no rebuild. Every save compiles a draft build; once published, builds stay in the history for one-click rollback.

DraftsBuildsRollback

Visual editor

Compose templates from sections with drag and drop, tweak design tokens, per-breakpoint values and visibility, and preview from mobile to desktop.

SectionsTokensResponsive

Secure by default

Theme markup compiles to a JSON AST — the server never runs theme code. Per-request CSP nonces, Strict cookies and an optional separate origin for the admin panel.

CSPSameSiteAdmin origin
Themes

JSX, minus the JavaScript.

Templates are .np files: HTML, expressions, && and .map(). They compile to an AST that React renders, so a mistake is an error with file, line and column — not a security hole.

  • Monaco editor in the panelAutocomplete for tags, components, filters and CSS tokens, with errors underlined as you type.
  • Tailwind CSS v4, if you likeImport it in a stylesheet and it compiles on every save, zero config.
  • A CLI that plays well with gitnp theme pull, push and watch sync a local folder, with three-way conflict detection.
themes/mikedag
theme.json        name, templates, design tokens
templates/*.np    hand-written templates
templates/*.json  templates built from sections
sections/*.np     schema, markup, scoped style
groups/*.json     shared header and footer
components/*.np   reusable components
styles/*.css      CSS with nesting or Tailwind
scripts/main.js   browser JS, bundled by esbuild
assets/*          hashed fonts and images
AI-native

Talk to your site. It listens.

All it takes is the /mcp address: the assistant opens the panel, you sign in and choose what to grant. From there it writes pages in Markdown, uploads images, fixes menus and edits themes as drafts, with a preview before anything goes live.

11

Content

content_create · content_save_translation · content_seo_analysis
7

Media

media_upload · media_update · media_folders
18

Site

menu_save · redirect_create · language_add · settings_update
12

Themes

theme_write_files · theme_preview · theme_publish
2

Orientation

site_info · guide

Safe by construction

Mandatory PKCE, one-hour access tokens bound to /mcp, refresh tokens rotated on every use and only hashes in the database. Destructive tools are flagged, so the client asks before running them.

Get started

Up and running in three commands.

~/nodepress
# Node.js 22.22+ · MySQL 8 or MariaDB 10.6+
~ npm install
~ cp .env.example .env   # DATABASE_URL, SESSION_SECRET
~ npm run dev
→ http://localhost:5173/admin/setup  # creates admin, site and language

# In production, Docker works too
~ docker build -t nodepress .
~ docker run -p 3000:3000 --env-file .env -v nodepress-media:/app/storage nodepress

Built in TypeScript, in the open.

The source is on GitHub, roadmap included. Ideas, issues and pull requests are welcome.