Contentful MCP Server

Manage entries, assets, content models, locales and releases in a Contentful space from chat

Official · Contentful TypeScript Local · stdio Productivity

62 popularity score ★ 62 ↓ 11k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs CONTENTFUL_MANAGEMENT_ACCESS_TOKEN, SPACE_ID. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add contentful -e CONTENTFUL_MANAGEMENT_ACCESS_TOKEN=<CONTENTFUL_MANAGEMENT_ACCESS_TOKEN> -e SPACE_ID=<SPACE_ID> -- npx -y @contentful/mcp-server
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "<CONTENTFUL_MANAGEMENT_ACCESS_TOKEN>",
        "SPACE_ID": "<SPACE_ID>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "<CONTENTFUL_MANAGEMENT_ACCESS_TOKEN>",
        "SPACE_ID": "<SPACE_ID>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "contentful": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "<CONTENTFUL_MANAGEMENT_ACCESS_TOKEN>",
        "SPACE_ID": "<SPACE_ID>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.contentful]
command = "npx"
args = ["-y", "@contentful/mcp-server"]

[mcp_servers.contentful.env]
CONTENTFUL_MANAGEMENT_ACCESS_TOKEN = "<CONTENTFUL_MANAGEMENT_ACCESS_TOKEN>"
SPACE_ID = "<SPACE_ID>"
Gemini CLITerminal
gemini mcp add --scope user -e CONTENTFUL_MANAGEMENT_ACCESS_TOKEN=<CONTENTFUL_MANAGEMENT_ACCESS_TOKEN> -e SPACE_ID=<SPACE_ID> contentful npx -- -y @contentful/mcp-server

Settings 8

CONTENTFUL_MANAGEMENT_ACCESS_TOKEN Required: Contentful Management API personal access token.
SPACE_ID Required: ID of the Contentful space to work on.
ENVIRONMENT_ID Optional: Environment within the space; defaults to master.
CONTENTFUL_HOST Optional: Management API host; defaults to api.contentful.com.
PROTECTED_ENVIRONMENTS Optional: Comma-separated environment IDs on which writes and deletes are refused.
MAX_BULK_SIZE Optional: Largest number of IDs one bulk call may include, 1 to 100; defaults to 10.
EXPORT_BASE_DIR Optional: Folder that export_space writes into; defaults to the working directory.
ENABLE_EXO_TOOLS Optional: Set to true to add Experience Orchestration tools (needs the exoM1 entitlement).

What it does

Contentful publishes this server for its headless content platform. It runs locally over stdio and talks to the Contentful Management API using a personal access token, so an assistant can do most of what an editor or content modeller does in the Contentful web app.

Its tools cover content types (create, change, publish, delete), entries (search, semantic search, read version snapshots, create, update, publish and unpublish one or many at once), assets (upload, update metadata, publish), locales, tags, environments, releases and scheduled releases, editor interfaces, taxonomy concepts and concept schemes, and Contentful AI Actions. It can also list organisations and spaces, read usage metrics for an organisation, and export a space to disk or import one into another space through a guided migration workflow that stays switched off until asked for.

Two settings help limit damage: PROTECTED_ENVIRONMENTS blocks writes and deletes against the environments named in it, and MAX_BULK_SIZE caps how many items one bulk call may touch (10 by default). Tools for Contentful's Experience Orchestration (components, design tokens, experiences) are hidden unless ENABLE_EXO_TOOLS is set and the account holds that entitlement.

What it needs

RuntimeNode.js

Node.js with npm (npx). A Contentful account, the ID of the space to work on, and a Contentful Management API personal access token. The Experience Orchestration tools also need the exoM1 entitlement on an organisation the token can reach.

Limits

Works on one space and environment per configuration (SPACE_ID, ENVIRONMENT_ID, default master). Several list tools return at most 10 items per request, and bulk publish or unpublish calls are capped at MAX_BULK_SIZE IDs (10 by default, up to 100). The environment guard only acts inside this server: it does not cover organisation-level resources such as taxonomy concepts, nor invoke_ai_action, and it does not replace Contentful role permissions. Release publishing is asynchronous and must be checked with get_release_action.

Who it suits

Suits teams already on Contentful who want an assistant to model content, draft and publish entries, sort assets or run releases, and who can issue a Management API token. Because almost every tool can write and the token carries the user's full permissions, it suits a sandbox or non-master environment best, or a setup with PROTECTED_ENVIRONMENTS set. It is official and runs on your machine. Anyone who only needs to read published content, or whose content lives in another CMS, will want a different server.

Tools 60 of 82

get_initial_context
Starts the session and returns guidance on using the other tools
list_content_types
Lists the content types in the environment
get_content_type
Shows one content type with its fields
create_content_type
Defines a new content type
update_content_type
Changes fields or settings of a content type
publish_content_type
Makes content type changes live
unpublish_content_type
Takes a content type out of the published state
delete_content_type
Deletes a content type
search_entries
Finds entries using query filters
semantic_search
Finds entries by meaning using vector search
get_entry
Fetches a single entry
get_entry_snapshot
Reads earlier saved versions of an entry
resolve_entry_references
Follows an entry's linked entries and assets recursively
create_entry
Adds a new entry of a given content type
update_entry
Edits field values of an entry
publish_entry
Publishes one entry or a batch
unpublish_entry
Unpublishes one entry or a batch
delete_entry
Deletes an entry
upload_asset
Uploads a file as a new asset
list_assets
Lists assets in the environment
get_asset
Fetches one asset's details
update_asset
Edits an asset's title, description or other metadata
publish_asset
Publishes one asset or a batch
unpublish_asset
Unpublishes one asset or a batch
delete_asset
Deletes an asset
list_editor_interfaces
Lists how fields are presented in the editor for each content type
get_editor_interface
Shows the editor set-up for one content type
update_editor_interface
Changes field widgets and editor layout for a content type
list_orgs
Lists organisations the token can see
get_org
Shows one organisation's details
list_spaces
Lists spaces the token can reach
get_space
Shows one space's details
list_environments
Lists environments in the space
create_environment
Creates a new environment
delete_environment
Deletes an environment
list_locales
Lists the locales set up in the environment
create_locale
Adds a locale for translated content
update_locale
Changes a locale's settings
delete_locale
Removes a locale
list_releases
Lists releases, ten at a time
create_release
Groups entries and assets into a release
update_release
Changes a release's title or items
publish_release
Starts publishing everything in a release
validate_release
Checks whether a release can be published or unpublished
get_release_action
Reports the status of a queued release action
schedule_publish_release
Sets or moves a future publish time for a release
cancel_scheduled_release
Cancels a scheduled release action after confirmation
list_scheduled_actions
Lists scheduled actions, ten at a time
list_tags
Lists content tags
create_tag
Adds a content tag
list_concepts
Lists taxonomy concepts in the organisation
create_concept
Adds a taxonomy concept with localised labels
create_concept_scheme
Creates a scheme that groups taxonomy concepts
create_ai_action
Defines a reusable Contentful AI Action
invoke_ai_action
Runs an AI Action with given variables
list_ai_actions
Lists AI Actions in the space
space_to_space_migration_handler
Turns the space-to-space migration workflow on or off
export_space
Writes a space's content and model to files under EXPORT_BASE_DIR
import_space
Loads an exported space into a target space
get_usages
Reads usage metrics for an organisation, optionally per space

Similar servers