Features / Deliver

MCP, webhooks, metrics

AI tools read and write content through the built-in MCP server. Webhooks report every change to your frontend, Prometheus metrics show what the process is doing.

A CMS rarely stands alone. The frontend wants to know when to rebuild, monitoring wants numbers, and more and more often an AI assistant is supposed to create content — without anyone copying curl commands out of the docs. RustyCMS ships all three connections in the binary, no extra service.

AI tools talk to the CMS directly

rustycms mcp starts an MCP server that Claude Desktop, Claude Code or any other MCP client attaches through the usual configuration. The assistant gets tools instead of an API description: list, read, create, update, set status, delete entries, find back-references. Read and maintain schemas and schema packs. List assets, upload them by URL or base64, rename them, sort them into folders; upload tickets for larger files. Read and change configuration, browse its history. With the forms plugin, read and process submissions too.

For bulk work there are bulk_create_entries and bulk_patch_entries, and before any write dry_run or bulk_dry_run: the entry is validated against the schema but not saved. The assistant sees the error before anything lands in the content. Auth uses the same API key as everywhere else, with the same scopes.

Webhooks: your frontend hears it first

Every change emits an event — content.created, content.updated, content.deleted, the same for assets and schemas. You create destinations in the admin UI or via /api/webhooks, each filtered by events and spaces, optionally with a secret sent as the X-Webhook-Secret header. The typical use: trigger the static frontend’s build or purge the cache in front of it.

A delivery log keeps the last 500 deliveries; failed ones can be re-sent by hand. If all you need is one URL, set RUSTYCMS_WEBHOOKS in the environment.

Numbers Prometheus understands

GET /api/metrics

rustycms_content_cache_hits_total
rustycms_transform_cache_bytes
rustycms_content_entries{environment="prod",collection="post"}
rustycms_batch_subrequests_total
rustycms_schedule_published_total

Hit rates of the content and image caches, memory held by image variants, entries per space and collection, version snapshots, batch calls, runs of the publishing scheduler, fetches of external collections. Text format, read auth, scrapeable as is — no exporter in between.

Git as a safety net

In file mode, RUSTYCMS_GIT_AUTOCOMMIT=true commits after every write: git add -A && git commit, asynchronously, the request does not wait for it. The content folder becomes a repo with a complete history, git log and git diff included. In database mode the git mirror takes over, exporting and committing the content on an interval.

Want to see this on your own project?

Tell me briefly what you're planning. I'll show the admin UI on a real installation and say honestly whether it fits.

Request early access