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.
~ 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. ~
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.
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.
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.
Compose templates from sections with drag and drop, tweak design tokens, per-breakpoint values and visibility, and preview from mobile to desktop.
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.
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.
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
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.
content_create · content_save_translation · content_seo_analysismedia_upload · media_update · media_foldersmenu_save · redirect_create · language_add · settings_updatetheme_write_files · theme_preview · theme_publishsite_info · guideMandatory 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.
# 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
The source is on GitHub, roadmap included. Ideas, issues and pull requests are welcome.