BetterCMS
BetterCMS gives developers, marketers, and AI assistants one structured platform to build, manage, publish, and grow modern websites.
https://bettercms.ai/Connect straight to this server’s public endpoint.
https://mcp.bettercms.ai/mcpWe add this server to your workspace, walk through sign-in once, then open Studio with tools ready to run.
Last probed Sep 14, 2026 · mcp.bettercms.ai
101tools discovered
Showing 25 of 101 from the live probe.
Clone Project
Clone (duplicate) a project as a reusable template into the connected workspace. Copies pages, content models + entries, components, media, forms, and SEO/custom-code settings; excludes submissions, analytics, domains, and secrets. Returns the new project's id and slug. Omit sourceProjectId to clone the connected project.
Get Project
Get a project's info — id, name, slug, subdomain, and its live URL (https://<handle>.bettercms.site). Use it to tell the user where their site is published / link the result. Defaults to the connected project. If your grant covers the WHOLE WORKSPACE rather than one project, call list_projects first and pass `projectId` — that same argument works on every project-scoped tool.
List Projects
List the projects this key can see — id, name, slug, and live URL each. A project-scoped key sees only its own project; a workspace-level key sees every project in the workspace. Use it to find a project you created earlier, or to confirm which sites exist before acting.
Create Project
Create a NEW project (site) in the connected workspace. YOU MUST ASK THE USER WHICH TECHNOLOGY TO BUILD WITH BEFORE CALLING THIS — offer: 1. astro (recommended default), 2. next, 3. react-ts (React + TypeScript), 4. other (headless: content and API only, they bring their own frontend). Do not pick for them; the call is refused without an answer. Sites cannot be created as plain HTML/CSS — every project is backed by one of these starters, which is what makes its content editable in the CMS. Pass
Update Project
Update the connected project's settings — rename it, change its slug/description, SEO defaults, visibility, or `presentation`. Only the provided fields change. `presentation` themes the platform's OWN renderer — the one that serves a site built in the CMS with no deployed build, and that previews structural drafts on every site. Without it that renderer falls back to a generic 768px document theme that looks like a blog, not like this brand. It is the same closed set of knobs as bcms-presentatio
Set Authoring Preference
Record which authoring architecture this site uses. YOU MUST ASK THE USER BEFORE CALLING THIS — offer: 1. components (RECOMMENDED: reusable section components placed as blocks; editors add, reorder and swap sections without touching a schema — recommend it for every marketing, landing, agency or product site), 2. fields (a typed field schema per page — only for a blog, catalogue or directory where many rows share one shape). Do not choose for them. deploy_project, deploy_from_upload and promote_
Set Binding Mode
Switch this project between the two binding resolvers, from the NEXT release on. `declaredBindings: true` makes the annotator trust the template's own data-bcms-field / data-bcms-props and never guess from rendered text — the durable state; `false` returns to text-matching, which works once (at import, when the CMS values equal the built copy) and breaks the first time anyone edits a value. Call it ONLY after every page's copy is declared in the template: undeclared fields stop being editable. T
Submit Conversion Receipt
Hand BetterCMS the codemod's own account of a conversion run, so the coverage meter can say WHY a path is not declared instead of only that it is not. Submit the receipt `npx @bettercms-ai/convert` wrote (`--receipt out.json`) for the SAME `briefDigest` get_conversion_brief { complete: true } returned: `{ briefDigest, receipt }`, where the receipt carries `paths: { declared, rewritten, alreadyDeclared, pending[{ route, scope, path, kind, file, reason, message }] }`. `paths.declared` must equal r
Create Template
Save a project (or one page) as a REUSABLE template — a frozen snapshot of its content models, pages, entries, components, and forms (secrets/domains/analytics excluded). Later seed a new project from it with create_project { templateId }. Set visibility 'public' to list it in the cross-workspace gallery. Returns the new template's id.
List Templates
List your workspace's saved templates (id, name, scope, visibility). Use a template's id as create_project { templateId } to seed a new project from it.
List Content Models
List the content models (reusable schemas for dynamic collections like Blog/Products) in the connected project.
Get Content Model
Get one content model by id INCLUDING its full field schema (keys, types, nested group/repeater children). Read this before add_field so you know the existing keys.
Create Content Model
Create a content model (reusable schema). `fields` may NEST: type 'group' = one nested object of child fields; type 'repeater' = a repeatable array of child objects. Put child fields in each group/repeater's own `fields` (any depth). Set kind:'block' to create a BLOCK type instead of a collection — a block holds no entries of its own and exists only to be stacked inside another model's `modular` field, so create your blocks first, then the model whose modular field lists their slugs.
Add Field
Append ONE field to a content model (additive — never overwrites). For a NESTED zone set type 'group'/'repeater' and provide its child `fields`.
Update Content Model
Rename a content model or edit its description/slug (metadata only — does NOT touch fields; use add_field to extend the schema). Provide modelId plus the fields to change.
Delete Content Model
Delete a content model and its entries (soft delete — reversible). Provide modelId.
Get Content Types
Get the auto-generated TypeScript types for the connected project's content models/pages. Pull these to write correctly-typed code against the BetterCMS delivery SDK in the user's site.
List Pages
List the pages in the connected project — each with its full field schema, pageType (singleton|dynamic), and status.
Get Page
Get one page by id INCLUDING its field schema (keys/types/nested fields) and pageType. Read this before set_page_content or add_page_field.
Create Page
Create a page. Two ways to give it content, and they are independent. (1) `blockJson` — the page's VISUAL composition, an array of blocks; this is how you build a components-first page, by placing `component` blocks that reference published components. (2) `fields` (+ `data` for a singleton) — a typed schema whose values a site's own code reads. A CMS-hosted marketing page wants blockJson. pageType 'singleton' (exactly one entry — Home/About/Contact) or 'dynamic' (many — Blog/Products); a dynami
Add Page Field
Append ONE field to a page's schema (additive). For a NESTED zone set type 'group'/'repeater' with its child `fields`.
Set Page Content
Set a page's field VALUES (the actual content). For a SINGLETON page (Home/About) this creates/updates its one entry — call it again to edit. `data` is keyed by field key: a 'group' value is an object, a 'repeater' value is an array of objects, an 'image' value is an asset URL. status 'draft' or 'published'.
Update Page
Edit a page: title, slug, SEO metaTitle/metaDescription, publish status (draft|published), and `blockJson` (its block composition — passing it REPLACES the whole array, so read get_page first). It does NOT change the field SCHEMA — use add_page_field / set_page_content for that. Renaming the slug keeps content intact. Publishing copies the draft blocks live in the same call.
Delete Page
Delete a page and its content (soft delete — reversible). Provide pageId.
List Content Entries
List content entries (including drafts) filtered by model and/or page. Use it to SEE existing content before editing.
Get your MCP into directories
A working endpoint is step one. Directory coverage is the coordinated launch across ChatGPT, Claude, Cursor, the MCP Registry, and community indexes.
Directory coverage for brandsBetterCMS gives developers, marketers, and AI assistants one structured platform to build, manage, publish, and grow modern websites.
Use the MCP endpoint listed on this page in your MCP client configuration. One-click install pills support Claude, Cursor, VS Code, and other hosts. Copy the remote MCP URL if your client needs a manual entry.
Operate BetterCMS? Verify ownership to take over this directory entry.
This server appears in the MCPBundles directory. Verify you operate it to take over the listing — name, description, logo, contact email, and skill content. We email a 6-digit code to a maintainer address your server publishes in /.well-known/security.txt or /.well-known/mcpbundles.json. Free, takes about a minute.
MCPBundles probed 101 tools on the live server. The tool list on this page reflects what was discovered at the last refresh — connect your client to see the full set available to your session.
BetterCMS may require signing in to the provider before tools can run. Connect through MCPBundles or your MCP client and complete any provider login when prompted.
MCPBundles is an independent platform built on the open Model Context Protocol standard. Not affiliated with Anthropic PBC or Claude.