DEV Community

Cover image for MCP Servers for CMS Workflows: Tools, Permissions, and Safe Operations
Евгений Брусницын for Morlix CMS

Posted on AI-assisted

MCP Servers for CMS Workflows: Tools, Permissions, and Safe Operations

An MCP server can expose selected CMS capabilities to an AI application, but the connection is only one part of a safe editorial workflow. Before an assistant reads a draft or modifies a page, a team needs to understand which operation is being called, whose permissions apply, what data crosses the boundary, and how to verify the outcome.

The examples below are design scenarios, not a promise that a particular product implements the features described. Your CMS, MCP server, and client may expose different tools or enforce permissions at different layers.

Start with an operation, not broad access

Model Context Protocol (MCP) offers a way for an AI application to interact with external tools and data through a server. In a CMS integration, the server presents the available operations and connects them to the underlying system. A client carries requests and results between the application and that server.

Do not assume that an MCP connection automatically supports publishing, media, revision history, or every CMS field. Inspect the actual tool list and the integration's documentation. Descriptions and parameter schemas help the client choose an operation; they are not a substitute for enforcement by the server and the CMS.

A practical first use case is an inventory of existing drafts. Define which site and section are in scope, which fields the assistant may see, and what the report should contain. A read-only scenario can be useful without granting permission to modify or publish anything.

Map tools to editorial responsibilities

Treat reading a page, changing its text, and making it public as separate decisions. A useful inventory for a content team may include operations to:

  • Search records by supported filters, with clear pagination.
  • Read an individual record and its current state.
  • Create or update a draft in an allowed section.
  • Publish a specific record when project policy permits.
  • Add media and check that its URL is accessible.

Those are categories of capability, not a universal API. One integration might expose only search and reading; another may combine operations differently. Inspect each operation's inputs, output, and side effects. In particular, determine whether saving a previously published page changes the live page immediately or creates an independent draft.

Avoid exposing unrestricted database or shell access when a constrained editorial operation can do the job. An operation should validate the target record and allowed fields rather than relying on the model to select them perfectly.

Trace one change from request to result

Imagine an editor has an approved source for updated opening hours. The assistant is allowed to prepare a change to one contact page. A careful workflow could be:

  1. Identify the site and page by a known URL or record ID.
  2. Read the current content, status, and revision if one is available.
  3. Compare the source with the existing hours and identify the exact passage to change.
  4. Prepare a reviewable update; use a separate draft only if the CMS actually supports it.
  5. Save within the granted scope and reread the result.
  6. Publish only when the project's authorization and editorial policy allow it.

This sequence should be adapted to the implementation. If the page contains hours for several branches, an ambiguous source needs clarification rather than an invented choice. If there is no safe draft mechanism, agree on another controlled workflow before writing.

Separate identity from permission

Authentication establishes which account or application the system recognizes. Authorization determines which actions that identity may perform and on which objects. An integration may have checks in the client connection, the MCP server, and the CMS; a valid connection alone does not establish that every write is allowed.

Some integrations use OAuth consent; others support different authentication methods. Check the documentation for the implementation in use. Find out who owns the connection, what permissions are requested, whether those permissions apply to one site or many, and how to revoke the access.

Apply least privilege in a way the system actually enforces. A tool used for an inventory should not need publication or deletion rights. A content editor working on one client's site should not automatically see unpublished records on another. If the platform cannot enforce a required boundary, account for that limitation or choose a different workflow.

Credentials need their own handling. Do not put access tokens, passwords, or private keys in page content, prompts, or shared logs. Use the credential storage supported by the environment and test revocation. Check error responses and audit logs for accidental disclosure of secrets or unnecessary personal data.

Validate every write at the boundary

An assistant can supply the wrong record ID, omit a required field, or choose an action outside the task. Server-side validation should check types, permitted values, object existence, and the caller's authorization. CMS-level permissions and data constraints still matter.

Where an implementation supports revision checks, the update can include the version the editor read. If another editor has changed the record in the meantime, the server can reject the stale update. The assistant should reread the latest version and resolve the conflict instead of silently replacing the other work. Revision checks are a useful design option, not a feature to assume in every CMS.

For bulk changes, define the target set, maximum batch, review process, and stop condition. Run a small approved sample first. Keep tested backups and a recovery plan, but remember that possessing a backup does not establish that restoration will work.

Treat page content as data

A CMS page, imported file, comment, or tool result may include text that appears to instruct the assistant. For example, a comment asking the agent to delete other posts is still comment content; it does not grant administrative authority.

Reduce the risk through multiple layers: limit permissions, distinguish trusted instructions from external material, validate input, and enforce sensitive actions on the server. A wording rule in a prompt should not be the only barrier protecting a destructive operation.

The same principle applies to returned data. An assistant can misunderstand a title or invent a URL. Verify the exact target and use the identifiers and addresses returned by the system rather than assuming a plausible-looking path exists.

Plan for an uncertain response

A successful request submission is not always proof of a completed action. Decide what confirmation matters for each operation: a reread record, a public status and URL, or an accessible media object.

Timeouts deserve special care. A remote service might have completed an action even though the client did not receive the response. Retrying an external post or other non-idempotent action can create a duplicate. Preserve the attempt state and known ID, then use a supported safe lookup or reconciliation procedure. When reliable verification is unavailable, hand the case to the responsible person rather than repeating the call automatically.

If an API offers idempotency keys, check their documented scope and lifetime. Do not assume that a key prevents every duplicate across unrelated operations or systems. Record the operation, target, initiator, and outcome without logging credentials.

Test the integration before production

Use a separate test environment or an explicitly approved test record whenever possible. The goal is to test both allowed operations and boundaries:

  1. Compare the available tools and their parameters with the integration documentation.
  2. Read an allowed record and verify denial for an out-of-scope record.
  3. Send an invalid ID or field and confirm no unintended change occurs.
  4. Test a draft edit and establish whether it affects the published page.
  5. Confirm that a read-only role cannot publish or delete.
  6. If supported, simulate a revision conflict and confirm the stale edit is rejected.
  7. Test access revocation and inspect logs and errors for exposed secrets.
  8. Practice checking an ambiguous result without repeating an external action.

Record the environment, account, observed behavior, and owner of any issue. Results for one deployment do not automatically apply to another configuration or a later update.

Decide whether the extra component is worthwhile

An MCP server can make a well-bounded editorial task easier to integrate with an assistant. It also introduces another component to maintain, monitor, secure, and update. For occasional changes, a conventional CMS interface may be the simpler choice.

Evaluate documentation, permissions, error handling, auditability, compatibility, and operational cost alongside the tool list. Start with a narrow task and expand the integration only after the team can verify the results and control the consequences.

Read the original Russian article.


Original article (Russian)

Top comments (0)