NomaCMS MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NOMA_API_KEY | Yes | API key from User settings → API keys | |
| NOMA_PROJECT_ID | Yes | Your project's UUID |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_projectA | Get information about the current Noma project (name, uuid, default_locale, locales, etc.) |
| add_project_localeA | Add a locale code (e.g. tr, es) to the project. Requires admin API ability. Codes are lowercased. Call when setting up a multilingual site before creating translated content. |
| set_default_project_localeA | Set the project's default locale. Adds the locale to the list if it was missing. Requires admin API ability. |
| list_collectionsA | List all collections in the project |
| get_collectionA | Get a single collection with its full field schema by slug |
| create_collectionA | Create a new collection. Optionally include field definitions to create the collection with its full schema in a single request. |
| update_collectionC | Update the name and slug of an existing collection |
| reorder_collectionsB | Update the display order of collections |
| create_fieldB | Add a new field to a collection |
| update_fieldB | Update an existing field on a collection |
| reorder_fieldsB | Update the display order of fields within a collection |
| list_entriesB | List content entries for a collection with advanced filtering, sorting, and pagination. Use the 'where' parameter for powerful queries. Read the 'query-reference' resource for full documentation on operators and examples. |
| get_entryA | Get a single content entry by UUID. Response includes uuid, locale, published_at, and a |
| create_entryB | Create a new content entry in a collection |
| update_entryA | Replace an existing content entry (HTTP PUT). Sends the full |
| patch_entryA | Partially update a content entry (HTTP PATCH). Only include fields you want to change (e.g. relations, one field). Saves NEVER change the publish state — call |
| publish_entryA | Mint a new immutable version from the entry's current draft and make it the live published version. After this call, state=published reads from the public API will return the new snapshot and |
| unpublish_entryA | Clear the live published pointer for an entry. The entry becomes invisible under state=published in the public API, but all historical versions are retained and still accessible via |
| delete_entryA | Soft-delete a content entry (moves to trash). Can be restored from the admin panel. |
| link_entry_translationA | Merge two entries in the same collection into one translation group (same as dashboard “link translation”). Both entries must exist, belong to this collection, and have different locales. There is no unlink via API — use the dashboard if you need to split a group. Requires an API key with update ability. |
| bulk_create_entriesA | Create multiple content entries atomically. If one item fails, the whole request is rolled back. |
| bulk_update_entriesA | Update multiple content entries atomically by UUID. If one item fails, all updates are rolled back. Saves never change publish state — call |
| bulk_delete_entriesA | Delete multiple content entries atomically by UUID. If one delete fails, no entries are deleted. |
| list_entry_versionsA | List all published versions for a content entry (newest first). Each version is an immutable snapshot taken at publish time. Response includes version_number, label, description, published_at, created_by, and is_current_published for each version. |
| get_entry_versionA | Fetch a single version's metadata and raw snapshot payload. The snapshot contains the saved field values in restoration format; for API-rendered content use |
| revert_entry_versionA | Restore the draft to a previous version's snapshot and publish it as a new version. The current unpublished draft is replaced. Returns the new version number. |
| update_entry_version_labelA | Update a version's editable label and/or description. The snapshot payload itself is immutable. |
| list_assetsC | List assets in the project with optional pagination. |
| get_assetA | Get an asset by its UUID or by filename. |
| upload_assetB | Upload a local file as an asset. Provide the absolute file path. |
| bulk_upload_assetsA | Upload multiple local files as assets atomically. If one upload fails, all uploads are rolled back. |
| bulk_update_asset_metadataA | Update metadata for multiple assets atomically by UUID. If one item fails, all updates are rolled back. |
| delete_assetB | Delete an asset by UUID |
| list_webhooksA | List all webhooks configured for the current project |
| get_webhookB | Get a webhook by UUID |
| create_webhookC | Create a webhook for content and auth events |
| update_webhookC | Update a webhook by UUID |
| delete_webhookB | Delete a webhook by UUID |
| list_webhook_logsB | List delivery logs for a webhook |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| field-types | Complete reference of all 16 Noma field types, their options, validations, and common patterns. Read this before creating fields. |
| collections-guide | Guide for working with Noma collections — properties, singletons, reserved slugs, and best practices. |
| query-reference | Complete reference for querying content entries — where filters, operators, OR groups, relation filtering, sorting, pagination, and examples. Read this before building complex queries. |
TDQS
Scored across 39 tools
Each tool targets a distinct operation or resource. Bulk and single operations are clearly separated, and actions like publish, unpublish, patch, and update are well-differentiated through descriptions.
The naming follows a consistent verb_noun pattern in snake_case, with minor exceptions like 'link_entry_translation' and 'reorder_collections' that break the pattern slightly.
At 39 tools, the server is overpopulated for a typical CMS MCP server. While the domain is broad, many tools could be consolidated (e.g., bulk operations as parameters).
The tool surface covers most CRUD operations for entries, assets, collections, fields, and webhooks, but lacks delete operations for collections and fields, and asset file update is missing.