Server Roles

Overview

Accent CMS supports three server roles that control which capabilities are active in production mode. The role is set in config.yaml and only enforced when running with --production.

In dev mode (without --production), all capabilities are available regardless of the role setting.

Configuration

server:
  role: publisher  # publisher | author | developer (default)

The Three Roles

Developer (default)

Everything enabled, nothing enforced. This is the default for local development and testing. No restrictions on mutations, git operations, or debug features.

Publisher

Production read-only server. Content is fetched from git and served to visitors. No content mutations are allowed.

Use this for public-facing websites deployed via git push:

server:
  role: publisher
git:
  enabled: true
  remote:
    url: "https://github.com/customer/my-site.git"
  deploy_branch: accent-pages
  webhook:
    enabled: true
    secret: "${GIT_WEBHOOK_SECRET}"

What is blocked in publisher mode:

  • MCP write tools (update_frontmatter, create_page, move_page)
  • REST API mutations (future)
  • Plugin content writes (future)

What is allowed:

  • Content serving, template rendering, search
  • Git fetch and webhook-triggered updates
  • MCP read tools (list_pages, get_page, search)

Author

Production read-write server for content teams. Editors create and modify content via MCP tools or the API. Changes are committed to git and pushed to the remote.

server:
  role: author
git:
  enabled: true
  remote:
    url: "https://github.com/customer/my-site.git"
  deploy_branch: accent-pages
  sync:
    on_diverge: reject  # protect local commits

All mutations are allowed in author mode.

How Enforcement Works

Role enforcement is conditional on the --production flag:

# Dev mode: role is ignored, everything works
accent serve --config config.yaml

# Production: role is enforced
accent serve --production --config config.yaml

The startup log shows the active role:

INFO Server role: publisher (production mode)

Deployment Pattern

A typical deployment uses two instances:

  1. Author (internal) – content team creates and edits content
  2. Publisher (public) – visitors see the published site

The git repository syncs content between them:

Content Team -> Author Server -> Git Push -> Publisher Server -> Visitors

Edition Requirements

ComponentEdition
server.role configAll editions
Role enforcementStandard+ (requires --production)
Publisher + git deploymentStandard+
Author + git commit/pushStandard+