Skip to content
Conduit

mcp server

easy-cms

maritonx/easy-cmscommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • Node.js 20 or newer
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "maritonx-easy-cms": {
      "command": "npx",
      "args": [
        "-y",
        "@easy-cms/plugin-mcp"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 14, 2026

Easy CMS

The embedded, code-first headless CMS for Nuxt and Next.js.

A headless CMS that lives inside your Nuxt or Next.js app: the content model is TypeScript in your repository, the admin and APIs come with it, and there is no extra server to run.

npm CI Docs Node License: MIT

Website · Documentation · เอกสารภาษาไทย · Getting started · Examples · Sponsor

Deploy with Vercel Deploy to Netlify

Why Easy CMS

  • Runs inside your app. A Nuxt module or Next.js route handlers add the admin at /admin and the API at /api/cms. One deployment, one database (yours, with prefixed tables).
  • Code-first and typed. Collections, fields and access rules are TypeScript. The Local API infers document types from the config, so queries are typed without a build step.
  • Any frontend, too. Using Vite, React, Vue, a mobile app or a static site? Run the same CMS as a standalone server and use its REST API.
  • An admin editors like, in English and Thai: drafts, version history, live preview, scheduled publishing, blocks, translations, a media library and a light and dark theme.
  • Secure by default: self-reviewed against OWASP ASVS level 1. Common passwords are refused, cookies are __Host- and HSTS is on in production, unreadable documents answer 404, and the audit log is signed against tampering.
  • Official plugins for SEO, forms, redirects, nested pages, a shop, GraphQL, several sites in one CMS (multi-tenant) and AI assistants (MCP).

[!NOTE] Easy CMS 1.0 is out (2026-10-17), the first version meant for production use. From 1.0, breaking changes come only in a major release, with an upgrade guide; renamed APIs keep working until the next major, with a warning. Versions and deprecations says what is covered (the shop, GraphQL and MCP plugins are still experimental). Upgrading from 0.x: From 0.x to 1.0.

Quick start

To try it without installing anything, use the Deploy buttons above: a blog with its admin on Vercel or Netlify, with a database and file storage made for you (one-click deploy).

In a Nuxt 4 or Next.js 15+ project:

npm create easy-cms@latest     # or: pnpm create easy-cms · yarn create easy-cms · bun create easy-cms
npm run dev                    # then open http://localhost:3000/admin

create-easy-cms installs the packages with your package manager, writes easy-cms.config.ts with a sample collection and a secret in .env, and wires up the framework. Describe your content in the config:

// easy-cms.config.ts
import { defineConfig } from '@easy-cms/core'
import { sqlite } from '@easy-cms/db-sqlite'

export default defineConfig({
  secret: process.env.EASY_CMS_SECRET!,
  db: sqlite({ url: 'file:./cms.db' }),
  collections: [
    {
      slug: 'posts',
      drafts: true,
      fields: [
        { name: 'title', type: 'text', required: true },
        { name: 'slug', type: 'slug', from: 'title' },
        { name: 'body', type: 'richText' },
      ],
    },
  ],
})

Then read it in your pages, fully typed:

// Nuxt: server/api/posts.get.ts
export default defineEventHandler(async () => {
  const cms = await useEasyCMS()
  return cms.find('posts', { sort: '-createdAt', limit: 10 })
})

Next.js uses getEasyCMS(config) in Server Components; any other client uses REST at /api/cms/posts.

No Nuxt or Next.js? Run the same command in an empty directory to get a standalone server:

npm create easy-cms@latest my-cms
cd my-cms && npm run dev       # http://localhost:4000/admin

Features

Content modeling

  • 15 field types: text, rich text (Tiptap), number, date, select, relationship, upload, array, group, blocks, JSON and more, with validation and per-field access
  • Uploads with several files and drag-to-order (galleries), limited to the file types you allow: images, PDF, Word, Excel, PowerPoint, OpenDocument, CSV, audio, video and zip, detected from their contents
  • Collections and globals, drafts and publishing, hooks
  • Localization: one value per language, translation status in the lists
  • Version history with restore, and drafts kept apart from the published version

Admin

  • A menu with groups that fold, badges for what needs attention, and a command palette (⌘K) that finds documents and runs actions
  • Lists with search, filters, columns, bulk actions and tree views; edit forms with tabs, sections, rows, fields shown on conditions, and a side panel
  • Live preview of unsaved changes on your real pages
  • Scheduled publish and unpublish
  • A media library with folders (and who may use each), many files uploaded at once with their progress, icons by file type, a grid view, and previews: images, audio and video players, PDFs, text and CSV
  • A dashboard that tells admins what needs attention: failed webhooks, stuck emails, late scheduled publishing
  • Roles from the admin: tick what each role may do per collection, page and field, or on its own documents only, no code
  • An audit log of who changed which fields, sign-ins and admin actions, signed against tampering
  • English and Thai interface, light and dark themes, works on phones

APIs

  • Typed Local API (fields that plugins add included), REST API with where queries, a GraphQL API (plugin), and generated types for frontends in other repositories
  • Users and roles, function-based access rules per collection, document and field; forgotten passwords and invitations by email; single sign-on with Google, Microsoft, GitHub or any OpenID Connect provider
  • Site members (customers, subscribers) who sign up on your site, kept out of the admin
  • API keys with per-collection permissions, signed webhooks with retries, email with retries

Data and operations

  • SQLite (libSQL) or Postgres (postgres.js or PGlite) through Drizzle
  • Schema push in development, reviewed migration files in production
  • Uploads on disk, S3, Cloudflare R2, MinIO, Vercel Blob or Netlify Blobs, also from links (the server downloads them)
  • One-click deploy to Vercel or Netlify, with a database and file storage
  • Database backups on a schedule or by hand from the admin, downloadable, optionally encrypted (AES-256-GCM)
  • easy-cms CLI: migrations, backups, copying between databases, scheduled jobs
  • Upgrades tested in CI: databases made by older releases migrate to the current one

SEO and AI

  • Meta fields with a search preview, sitemaps, robots.txt, hreflang and JSON-LD
  • llms.txt, Markdown versions of pages and AI crawler rules
  • An MCP server so AI assistants can read and draft content with a limited API key

Official plugins

PluginWhat it addsGuide
@easy-cms/plugin-seoMeta fields, search preview, sitemap, robots.txt, structured data, llms.txtSEO
@easy-cms/plugin-form-builderForms built in the admin, submissions with an overview and a dashboard panel, email notifications, spam protection, <easy-form>Forms
@easy-cms/plugin-redirectsRedirects managed in the admin, automatic redirects when a page movesRedirects
@easy-cms/plugin-nested-docsPages inside pages: parents, full paths, breadcrumbs, a tree in the adminNested pages
@easy-cms/plugin-graphql (experimental)GraphQL API: queries and mutations for every collection and global, with your access rulesGraphQL
@easy-cms/plugin-mcp (experimental)Model Context Protocol server for AI assistantsMCP
@easy-cms/plugin-multi-tenantSeveral sites or clients in one CMS: content, members, roles and settings per tenant, a tenant switcherMulti-tenant
@easy-cms/plugin-ecommerce (experimental)A shop: products and variants, prices in several currencies, carts, checkout with Stripe or bank transfer (unpaid orders expire and return their stock), orders, stock, customer accounts, React and Vue hooksShop

Experimental plugins share the version number but may still change in a minor release, even after 1.0, until they are declared stable.

Plugins are functions over your config: write your own with fields, endpoints, admin components, admin pages, dashboard panels and CLI commands. See Plugins. Packages can also add field types, such as color from @easy-cms/fields: see Custom field types.

Packages

Package
@easy-cms/coreConfig, Local API, REST handler, auth, access control, hooks, localization, versions, webhooks
@easy-cms/nuxtNuxt 4 module: REST API, admin, typed useEasyCMS()
@easy-cms/nextNext.js adapter: route handlers, typed getEasyCMS()
easy-cmsCLI: migrations, types, users, backups, standalone serve
create-easy-cmsAdds Easy CMS to a project, or creates a standalone server
@easy-cms/db-sqliteSQLite / libSQL database adapter
@easy-cms/db-postgresPostgres adapter (postgres.js or PGlite)
@easy-cms/storage-s3Uploads on S3, Cloudflare R2 or MinIO
@easy-cms/storage-vercel-blobUploads on Vercel Blob
@easy-cms/storage-netlify-blobsUploads on Netlify Blobs
@easy-cms/email-smtpEmail over SMTP
@easy-cms/auth-oauthSingle sign-on: Google, Microsoft, GitHub, OpenID Connect
@easy-cms/richtextRich text to safe HTML or Markdown
@easy-cms/fieldsMore field types: color, with a picker and swatches
@easy-cms/adminThe admin UI (installed by the adapters)
@easy-cms/drizzleShared database layer (installed by the database adapters)

Examples

Example
examples/nuxt-blogNuxt 4 blog on SQLite, with every official plugin
examples/next-blogNext.js 16 blog on Postgres (PGlite locally)
examples/standaloneStandalone server with a plain HTML frontend on another origin
examples/shopNext.js 16 shop: products, cart, checkout (bank transfer, or Stripe), customer accounts
examples/multi-tenantTwo brands in one CMS, each with its own content, media and members

Requirements

  • Node.js 22.12 or later (22.19 or later with Nuxt)
  • Nuxt 4, Next.js 15 or later (App Router), or no framework (standalone)
  • SQLite or Postgres
  • npm, pnpm, Yarn (node-modules) or Bun to install

Contributing

Issues and pull requests are welcome. CONTRIBUTING.md explains how to build, test and propose changes; docs/DESIGN.md and the architecture decisions explain why things are the way they are.

Please report security issues privately, as described in SECURITY.md.

Sponsors

Easy CMS is built in spare time. If it saves you or your team time, consider sponsoring its development: sponsorship pays for the work toward 1.0, docs (in English and Thai) and faster fixes. Sponsors at $5 a month or more are listed here, and company sponsors also get their logo on the website.

Sponsor Easy CMS

Founding sponsors

The first 10 sponsors, at any tier, are listed here permanently, even if they stop sponsoring later. Spots left: 10 of 10.

License

MIT

↑↓ navigate openesc close