# Contentful

> Model, write and publish structured content from an agent — 73 tools across entries, assets and content types.

[Canonical HTML page](https://top-mcps.com/mcp/contentful) · [server.json](https://top-mcps.com/mcp/contentful.json) · [methodology](https://top-mcps.com/about/methodology)

## Install

### Claude Desktop — `claude_desktop_config.json`

Paste under mcpServers. Fully quit and reopen Claude after editing.

```json
{
  "mcpServers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
        "SPACE_ID": "${SPACE_ID}",
        "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
        "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
      }
    }
  }
}
```

### Claude Code — `CLI or .mcp.json`

Run from your repo. Commit .mcp.json to share with your team.

```shell
# export CONTENTFUL_MANAGEMENT_ACCESS_TOKEN=your_cma_token
# export SPACE_ID=your_space_id
# export ENVIRONMENT_ID=master
# export CONTENTFUL_HOST=api.contentful.com
claude mcp add contentful -- npx -y @contentful/mcp-server
```

### Cursor — `.cursor/mcp.json`

Global path: ~/.cursor/mcp.json. Reload window after editing.

```json
{
  "mcpServers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
        "SPACE_ID": "${SPACE_ID}",
        "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
        "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
      }
    }
  }
}
```

### VS Code — `.vscode/mcp.json`

VS Code uses the "servers" key (not "mcpServers").

```jsonc
{
  "servers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
        "SPACE_ID": "${SPACE_ID}",
        "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
        "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
      }
    }
  }
}
```

### Windsurf — `~/.codeium/windsurf/mcp_config.json`

Open via Cascade → hammer icon → Configure.

```json
{
  "mcpServers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
        "SPACE_ID": "${SPACE_ID}",
        "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
        "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
      }
    }
  }
}
```

### Cline — `cline_mcp_settings.json`

Open via the Cline sidebar → MCP Servers → Edit.

```json
{
  "mcpServers": {
    "contentful": {
      "command": "npx",
      "args": [
        "-y",
        "@contentful/mcp-server"
      ],
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
        "SPACE_ID": "${SPACE_ID}",
        "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
        "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
      }
    }
  }
}
```

### Continue — `~/.continue/config.json`

Continue uses modelContextProtocolServers with a transport block.

```json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": [
            "-y",
            "@contentful/mcp-server"
          ],
          "env": {
            "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
            "SPACE_ID": "${SPACE_ID}",
            "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
            "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
          }
        }
      }
    ]
  }
}
```

### Codex CLI — `~/.codex/config.toml`

Codex uses TOML. Each server is a [mcp_servers.<name>] subtable.

```shell
# ~/.codex/config.toml
[mcp_servers.contentful]
command = "npx"
args = [
  "-y",
  "@contentful/mcp-server",
]
env = { CONTENTFUL_MANAGEMENT_ACCESS_TOKEN = "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}", SPACE_ID = "${SPACE_ID}", ENVIRONMENT_ID = "${ENVIRONMENT_ID}", CONTENTFUL_HOST = "${CONTENTFUL_HOST}" }
```

### Zed — `~/.config/zed/settings.json`

Zed calls them "context_servers". Settings live-reload on save.

```jsonc
{
  "context_servers": {
    "contentful": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@contentful/mcp-server"
        ]
      },
      "env": {
        "CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
        "SPACE_ID": "${SPACE_ID}",
        "ENVIRONMENT_ID": "${ENVIRONMENT_ID}",
        "CONTENTFUL_HOST": "${CONTENTFUL_HOST}"
      }
    }
  }
}
```

### ChatGPT — `ChatGPT → Apps directory`

Contentful doesn't ship a hosted HTTPS endpoint today. ChatGPT supports remote MCP servers only — to use this server in ChatGPT you'll need to deploy it to a public HTTPS URL first (e.g. via Cloudflare Workers or Vercel) or wait for an official remote build.

```none

```

## At a glance

- **Maintainer:** Contentful
- **Transport:** stdio
- **Auth model:** API key
- **Required secrets:** CONTENTFUL_MANAGEMENT_ACCESS_TOKEN, SPACE_ID, ENVIRONMENT_ID, CONTENTFUL_HOST
- **Supported clients:** Claude, Cursor, VS Code, Windsurf, Codex, Any MCP-compatible client, Contentful spaces
- **License:** MIT
- **Language:** TypeScript
- **Latest version:** latest
- **Last verified:** 2026-09-17
- **GitHub stars:** 60 (fetched 2026-10-15T10:09:13.499Z)
- **Score:** 79/100 (rubric 2026-09 — see https://top-mcps.com/about/methodology)
- **Source:** https://github.com/contentful/contentful-mcp-server
- **Homepage:** https://www.contentful.com/developers/docs/

## Tools & permissions

Showing 12 of 73 tools the server reported on `tools/list`. The rest exist and are not listed here.

| Tool | Description | Args | Side effects |
|------|-------------|------|--------------|
| `get_initial_context` | Documented mandatory first call — loads space context and usage rules. | `—` | read |
| `search_entries` | Search entries in a space and environment. | `—` | read |
| `semantic_search` | Find entries by meaning using vector search. | `—` | network |
| `create_entry` | Create an entry; requires the contentTypeId, not the name. | `—` | write |
| `update_entry` | Update an entry; requires the sys.version read from get_entry. | `—` | write |
| `publish_entry` | Publish one entry or up to 100 in one call. | `—` | write |
| `get_entry_snapshot` | List or read version snapshots of an entry for rollback. | `—` | read |
| `upload_asset` | Upload a new asset to the space. | `—` | write |
| `create_content_type` | Create a content type with a display field and field set. | `—` | write |
| `update_content_type` | Merge field updates into an existing content type draft. | `—` | write |
| `delete_content_type_field` | Permanently mark a field deleted. Irreversible once published. | `—` | write |
| `update_editor_interface` | Configure field widgets, sidebar and editor layout for a content type. | `—` | write |

## Security & scope

- **Access scope:** read-write
- **Sandbox:** No sandbox, but Contentful environments serve the purpose — point `ENVIRONMENT_ID` at a non-master environment first.
- **Gotchas:**
  - The CMA token is space-wide. Scope the agent by pointing it at a sandbox environment, not by trusting the token.
  - Delete tools are two-phase — the first call returns a confirmation token rather than deleting — but `delete_content_type_field` is described by the vendor as destructive and irreversible once published.
  - `update_entry` needs the `sys.version` from a prior `get_entry`. An agent that skips the read gets a version conflict, which is the correct behaviour and worth leaving in place.

## Quick answer

**What it does.** Exposes the Contentful CMA as MCP tools: `create_entry` / `update_entry` / `publish_entry` (bulk up to 100), `search_entries` and `semantic_search`, `upload_asset` and the asset lifecycle, the full `*_content_type` family including per-field omit and disable, editor-interface configuration, entry snapshots for rollback, and AI actions.

**Best for:**
- Drafting and publishing entries in bulk
- Scaffolding a new content type and its editor interface
- Semantic search across a space
- Asset upload and attachment
- Rolling an entry back to a previous snapshot

**Not for:**
- Page layout or visual design
- Sites without a separate front end to render the content
- Unattended runs with delete tools enabled

## Description

Contentful's official MCP server covers the Content Management API end to end: 73 tools spanning entries, assets, content types, editor interfaces, AI actions, spaces and environments. It is the deepest headless-CMS surface in this directory, and the only one where an agent can change the content *model* — create a content type, add and omit fields, update the editor interface — rather than only the records inside it.

## Why it matters

Agents are good at producing content and bad at guessing schemas. This server hands them both: `get_initial_context` is a documented mandatory first call that loads the space's shape, `get_content_type` returns the field contract, and `get_entry_snapshot` gives a rollback path when a bulk edit goes wrong.

## Key features

- 73 tools verified by probe on v1.19
- Content-model editing, not just entries
- Two-phase confirm on every delete
- Bulk publish/unpublish up to 100 items
- MIT; EU host supported via `CONTENTFUL_HOST`

## FAQ

### Why does it insist on `get_initial_context` first?

Because the rest of the tool set needs the space's content types and IDs to be usable. The server documents it as mandatory, and an agent that skips it starts guessing content-type IDs — which is exactly how entries end up in the wrong model.

### Can it delete things by accident?

Deletes are two-phase: the first call returns a confirmation token and the second performs the delete. The exception worth reading twice is `delete_content_type_field`, which Contentful describes as irreversible once published.

### Does it work on an EU space?

Yes — set `CONTENTFUL_HOST` to the EU management endpoint instead of `api.contentful.com`.

## Changelog

- **2026-09-17** — Refreshed install snippets and fact sheet; verified for 2026.
