Contentful ManagementBLOCK
MCP (Model Context Protocol) server for the Contentful Management API
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Notice
This is a community driven server! Contentful has released an official server which you can find here
[](https://smithery.ai/server/@ivotoby/contentful-management-mcp-server)
An MCP server implementation that integrates with Contentful's Content Management API, providing comprehensive content management capabilities.
- Please note \*; if you are not interested in the code, and just want to use this MCP in
Claude Desktop (or any other tool that is able to use MCP servers) you don't have to clone this repo, you can just set it up in Claude desktop, refer to the section "Usage with Claude Desktop" for instructions on how to install it.
Features
- Content Management: Full CRUD operations for entries and assets
- Comment Management: Create, retrieve, and manage comments on entries with support for both plain-text and rich-text formats, including threaded conversations
- Space Management: Create, update, and manage spaces and environments
- Content Types: Manage content type definitions
- Localization: Support for multiple locales
- Publishing: Control content publishing workflow
- Bulk Operations: Execute bulk publishing, unpublishing, and validation across multiple entries and assets
- Smart Pagination: List operations return maximum 3 items per request to prevent context window overflow, with built-in pagination support
Pagination
To prevent context window overflow in LLMs, list operatio
23aa1abd7336OBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add contentful-management-mcp-server --env CONTENTFUL_MANAGEMENT_ACCESS_TOKEN=${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN} --env PRIVATE_KEY=${PRIVATE_KEY} -- npx -y @ivotoby/[email protected]{
"mcpServers": {
"contentful-management-mcp-server": {
"command": "npx",
"args": [
"-y",
"@ivotoby/[email protected]"
],
"env": {
"CONTENTFUL_MANAGEMENT_ACCESS_TOKEN": "${CONTENTFUL_MANAGEMENT_ACCESS_TOKEN}",
"PRIVATE_KEY": "${PRIVATE_KEY}"
}
}
}
}Exposed tools (67)
42 read · 18 write · 7 destructive. Blast radius: 7 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
Topic | read | The topic for the content |
actionId | read | ID of the AI Action (if known) |
ai-actions-create | write | Guide for creating and configuring AI Actions in Contentful |
ai-actions-invoke | write | Help with invoking AI Actions and processing results |
ai-actions-overview | read | Comprehensive overview of AI Actions in Contentful |
ai-actions-variables | read | Explanation of variable types and configuration for AI Actions |
api-operation-help | read | Get detailed help for specific Contentful API operations |
asset-management | read | Guidance on managing digital assets like images, videos, and documents |
bulk-operations | read | Guidance on performing actions on multiple entities simultaneously |
bulk_validate | read | Validate multiple entries at once |
concept | read | Contentful concept (Space/Environment/ContentType/Entry/Asset) |
content-modeling-guide | read | Guide through content modeling decisions and best practices |
content-type-operations | read | Help with defining and managing content types and their fields |
create_ai_action | write | Create a new AI Action |
create_comment | write | Create a new comment on an entry. The comment will be created with the specified body and status. To create a threaded conversation (reply to an existing comment), provide the parent comment ID. This allows you to work around the 512-character limit by creating threaded replies. |
create_content_type | write | Create a new content type |
create_entry | write | Create a new entry in Contentful. Before executing this function, you need to know the contentTypeId (not the content type NAME) and the fields of that contentType. You can get the fields definition by using the GET_CONTENT_TYPE tool. IMPORTANT: All field values MUST include a locale key (e.g., |
create_environment | write | Create a new environment |
delete_ai_action | destructive | Delete an AI Action |
delete_asset | destructive | Delete an asset |
delete_comment | destructive | Delete a specific comment from an entry. |
delete_content_type | destructive | Delete a content type |
delete_entry | destructive | Delete an entry |
delete_environment | destructive | Delete an environment |
details | read | Additional context or requirements |
entity | read | Entity type (space/environment) |
entityType | read | Type of entities to process (entries/assets) |
entry-management | read | Help with CRUD operations and publishing workflows for content entries |
explain-api-concepts | read | Explain Contentful API concepts and relationships |
get_ai_action | read | Get a specific AI Action by ID |
get_ai_action_invocation | read | Get the result of a previous AI Action invocation |
get_asset | read | Retrieve an asset |
get_comments | read | Retrieve comments for an entry with pagination support. Returns comments with their status and body content. |
get_content_type | read | Get details of a specific content type |
get_entry | read | Retrieve an existing entry |
get_single_comment | read | Retrieve a specific comment by its ID for an entry. |
get_space | read | Get details of a space |
invoke_ai_action | write | Invoke an AI Action with variables |
list_ai_actions | read | List all AI Actions in a space |
list_assets | read | List assets in a space. Returns a maximum of 3 items per request. Use skip parameter to paginate through results. |
list_content_types | read | List content types in a space. Returns a maximum of 10 items per request. Use skip parameter to paginate through results. |
list_environments | read | List all environments in a space |
list_spaces | read | List all available spaces |
mcp-tool-usage | read | Instructions for using Contentful MCP tools effectively |
modelType | read | AI model type (e.g., gpt-4, claude-3-opus) |
operation | read | Operation you want to perform |
publish_ai_action | write | Publish an AI Action |
publish_asset | write | Publish an asset |
publish_content_type | write | Publish a content type |
publish_entry | write | Publish an entry or multiple entries. Accepts either a single entryId (string) or an array of entryIds (up to 100 entries). For a single entry, it uses the standard publish operation. For multiple entries, it automatically uses bulk publishing. |
resourceType | read | Type of resource (Entry/Asset/ContentType) |
search_entries | read | Search for entries using query parameters. Returns a maximum of 3 items per request. Use skip parameter to paginate through results. |
space-environment-management | read | Help with managing spaces, environments, and deployment workflows |
space-identification | read | Guide for identifying the correct Contentful space for operations |
task | destructive | Specific task (create/read/update/delete/publish/unpublish/bulk) |
toolName | read | Specific tool name (e.g., invoke_ai_action, create_entry) |
unpublish_ai_action | read | Unpublish an AI Action |
unpublish_asset | read | Unpublish an asset |
unpublish_entry | read | Unpublish an entry or multiple entries. Accepts either a single entryId (string) or an array of entryIds (up to 100 entries). For a single entry, it uses the standard unpublish operation. For multiple entries, it automatically uses bulk unpublishing. |
update_ai_action | write | Update an existing AI Action |
update_asset | write | Update an asset |
update_comment | write | Update an existing comment on an entry. The handler will merge your updates with the existing comment data. |
update_content_type | write | Update an existing content type. The handler will merge your field updates with existing content type data, so you only need to provide the fields and properties you want to change. |
update_entry | write | Update an existing entry. The handler will merge your field updates with the existing entry fields, so you only need to provide the fields and locales you want to change. IMPORTANT: All field values MUST include a locale key (e.g., |
upload_asset | write | Upload a new asset |
useCase | read | Description of the content modeling scenario |
variableType | read | Type of variable (Text, Reference, StandardInput, etc) |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (10)
return ["-----BEGIN RSA PRIVATE KEY-----", ...chunks, "-----END RSA PRIVATE KEY-----"].join(
"-----BEGIN RSA PRIVATE KEY-----\ntest-private-key\n-----END RSA PRIVATE KEY-----",
delete_ai_action, delete_asset, delete_comment, delete_content_type, delete_entry, delete_environment, task
.releaserc
import { aiActionHandlers } from "../../src/handlers/ai-action-handlers"import { aiActionsClient } from "../../src/config/ai-actions-client"vi.mock("../../src/config/ai-actions-client", () => ({vi.mock("../../src/config/client", () => {import { aiActionsClient } from "../../src/config/ai-actions-client"@contentful/node-apps-toolkit, @modelcontextprotocol/sdk, contentful-management, cors, dotenv, express, zod, zod-to-json-schema
Gates applied: critical_finding, no_behavioural_pass.
23aa1abd7336full audit observations/trust-audit/mcp-server/ivo-toby__contentful-management.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | 23aa1abd7336 | BLOCK | D | 69 | first audit |
Questions
What is the Contentful Management MCP server?
MCP (Model Context Protocol) server for the Contentful Management API
What tools does Contentful Management expose?
67 in total: 42 read-only, 18 that write, and 7 that can delete or overwrite (delete_ai_action, delete_asset, delete_comment, delete_content_type, delete_entry). Every one is listed on this page with its risk.
Is Contentful Management safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 7 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Contentful Management need?
It reads CONTENTFUL_MANAGEMENT_ACCESS_TOKEN and PRIVATE_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Contentful Management run?
It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @ivotoby/contentful-management-mcp-server at 1.14.0.
How current is this page?
The grade is for one exact copy of the source (23aa1abd7336), read on 2026-10-07. The repository is watched and re-audited when it changes.