Labsco
MCP SERVER · OFFICIAL PROJECT

NomaCMS MCP Server

by NomaCMS

Define a collection and its fields, write entries into it, and decide separately when readers get to see the change.

CMS & Blog PublishingOfficial source
Summary
Saving and publishing are separate events here, and the public API keeps serving the old snapshot until you say otherwise.

update_entry, patch_entry and bulk_update_entries all state the same thing: a save never moves the publish pointer, so reads at state=published keep returning the last minted version until publish_entry runs. That makes staged editing the default rather than something you build, and it makes publish_entry the call that actually ships. There are edges worth knowing before you automate against it. A translation group can be created through link_entry_translation but not split — undoing one is a dashboard action, not an API call. And the bulk tools are all-or-nothing by design, which is what you want for a migration and is worth remembering when a single malformed row stops the batch.

What it is

The official MCP server for a NomaCMS project, exposing 39 tools that cover the content model, entries and their draft and published versions, translation groups, assets and webhooks.

What you get
  • The content model itself, not only its contents: create_collection can carry its full field schema in the same request, create_field and update_field set type, options, validations, label and placeholder, and reorder_collections and reorder_fields control display order.
  • Reads that come back shaped for use: get_entry returns a fields object with relation fields already expanded into nested entry objects or arrays rather than bare UUIDs, and list_entries takes a where expression alongside sort, state, locale and pagination.
  • Writes split by intent: update_entry replaces the whole entry over HTTP PUT and needs the required fields present, while patch_entry changes only the keys you send.
  • Publication as its own step: publish_entry mints an immutable version and resets is_draft_dirty, unpublish_entry clears the live pointer while keeping every historical version, and delete_entry is a soft delete recoverable from the admin panel.
  • A version history you can read and walk back into: list_entry_versions returns version_number, label, description, published_at, created_by and is_current_published, get_entry_version returns the raw snapshot payload, revert_entry_version restores a snapshot into the draft and publishes it as a new version, and update_entry_version_label renames a version without touching its snapshot.
  • Atomic bulk operations: bulk_create_entries, bulk_update_entries, bulk_delete_entries, bulk_upload_assets and bulk_update_asset_metadata each roll the whole request back if a single item fails.
  • Multilingual structure: add_project_locale and set_default_project_locale manage the project's locale list, and link_entry_translation merges entries in different locales into one translation group.
  • Assets and delivery hooks: upload_asset takes an absolute path, get_asset resolves by UUID or by filename, and create_webhook binds content and auth events to a URL with a secret, a payload, source filters and specific collection_ids, with list_webhook_logs showing what was delivered.
Requirements

A NomaCMS project API key and the project it addresses, supplied as NOMA_API_KEY and NOMA_PROJECT_ID. Changing the project's locales needs a key carrying admin ability, and link_entry_translation needs one carrying update ability, so a read-and-write key alone will not cover the whole tool set.

Setup effort

One command plus a key — npx -y @nomacms/mcp-server, then supply credentials