# How to integrate Contentful MCP with CrewAI

```json
{
  "title": "How to integrate Contentful MCP with CrewAI",
  "toolkit": "Contentful",
  "toolkit_slug": "contentful",
  "framework": "CrewAI",
  "framework_slug": "crew-ai",
  "url": "https://composio.dev/toolkits/contentful/framework/crew-ai",
  "markdown_url": "https://composio.dev/toolkits/contentful/framework/crew-ai.md",
  "updated_at": "2026-05-12T10:07:24.414Z"
}
```

## Introduction

This guide walks you through connecting Contentful to CrewAI using the Composio tool router. By the end, you'll have a working Contentful agent that can list all contentful spaces i manage, get details for the 'marketing' space, update the name of your blog space through natural language commands.
This guide will help you understand how to give your CrewAI agent real control over a Contentful account through Composio's Contentful MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Contentful with

- [OpenAI Agents SDK](https://composio.dev/toolkits/contentful/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/contentful/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/contentful/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/contentful/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/contentful/framework/codex)
- [OpenClaw](https://composio.dev/toolkits/contentful/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/contentful/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/contentful/framework/cli)
- [Google ADK](https://composio.dev/toolkits/contentful/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/contentful/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/contentful/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/contentful/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/contentful/framework/llama-index)

## TL;DR

Here's what you'll learn:
- Get a Composio API key and configure your Contentful connection
- Set up CrewAI with an MCP enabled agent
- Create a Tool Router session or standalone MCP server for Contentful
- Build a conversational loop where your agent can execute Contentful operations

## What is CrewAI?

CrewAI is a powerful framework for building multi-agent AI systems. It provides primitives for defining agents with specific roles, creating tasks, and orchestrating workflows through crews.
Key features include:
- Agent Roles: Define specialized agents with specific goals and backstories
- Task Management: Create tasks with clear descriptions and expected outputs
- Crew Orchestration: Combine agents and tasks into collaborative workflows
- MCP Integration: Connect to external tools through Model Context Protocol

## What is the Contentful MCP server, and what's possible with it?

The Contentful MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Contentful account. It provides structured and secure access to your Contentful spaces, so your agent can perform actions like listing spaces, retrieving space details, and updating space information on your behalf.
- List all available spaces: Quickly fetch a comprehensive list of all Contentful spaces you have access to, making it easier to choose where to manage or publish content.
- Retrieve detailed space information: Ask your agent to pull up full details about any specific Contentful space, including metadata and configuration—great for audits or content planning.
- Update space names safely: Let your agent rename a space by handling version checks and updates for you, ensuring your workspace stays organized and accurately labeled.
- Streamline space management: Automate repetitive space-related tasks, like checking which spaces are available or updating their names, so you can focus on content creation.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `CONTENTFUL_ACTIVATE_CONTENT_TYPE` | Activate Content Type | Activates (publishes) a content type in Contentful. Use this to make a content type available for creating entries. Requires the current version number for optimistic locking. |
| `CONTENTFUL_ARCHIVE_ASSET` | Archive Asset | Tool to archive an asset in Contentful. Use when you need to archive an asset to remove it from active use without deleting it permanently. |
| `CONTENTFUL_ARCHIVE_ENTRY` | Archive Entry | Tool to archive an entry in Contentful. Use when you need to move an entry to archived status. The entry must not be currently published, and you may need to provide the X-Contentful-Version header matching the entry's current version. |
| `CONTENTFUL_ARCHIVE_RELEASE` | Archive Release | Tool to archive a release in Contentful. Use when you need to lock a release to prevent modifications. An archived release cannot be edited until unarchived. Requires the current version number for optimistic locking. |
| `CONTENTFUL_CREATE_APP_DEFINITIONS_KEYS` | Create App Signing Key | Tool to generate an app signing key for a Contentful app definition. Use when you need to create cryptographic keys for app authentication. Either provide generate=true to let Contentful create a key pair (returns private key), or provide a pre-generated public key in JWK format. |
| `CONTENTFUL_CREATE_CONTENT_TYPE` | Create Content Type | Tool to create a new content type in a Contentful environment. Use when you need to define a new content structure with custom fields. Content types define the schema for entries. |
| `CONTENTFUL_CREATE_ENTRY_TASK` | Create Entry Task | Tool to create a task on a Contentful entry. Use when you need to create workflow tasks for collaboration on entries. Tasks can be assigned to users and are used for managing content review and approval workflows. |
| `CONTENTFUL_CREATE_ENVIRONMENT` | Create Environment | Tool to create a new environment within a Contentful space. Use when you need to set up a new environment for content management, such as staging or production. Optionally clone from an existing source environment. |
| `CONTENTFUL_CREATE_ORGANIZATIONS_APP_DEF_ACCESS_GRANTS` | Create App Access Grant | Creates an access grant for an app definition to allow organizations to install the app. Use when you need to grant installation permissions for an app to specific organizations or all organizations (marketplace apps). |
| `CONTENTFUL_CREATE_ORGANIZATIONS_APP_DEFINITIONS` | Create Organizations App Definitions | Tool to create a new app definition in a Contentful organization. Use when you need to register a new app that can be installed into space environments. |
| `CONTENTFUL_CREATE_ORGANIZATIONS_APP_DEFINITIONS_ACTIONS` | Create App Definition Action | Tool to create an action for a Contentful app definition. Use when you need to define actions that your app can perform, such as endpoint invocations or function calls. |
| `CONTENTFUL_CREATE_ORGANIZATIONS_INVITATIONS` | Create Organization Invitation | Create an invitation to an organization in Contentful (alpha feature). Use this to invite new users to join an organization with a specified role. |
| `CONTENTFUL_CREATE_ORGANIZATIONS_SECURITY_CONTACTS` | Create Organizations Security Contacts | Creates a security contact for a specific organization. Use when you need to add an email address to receive security notifications for the organization. |
| `CONTENTFUL_CREATE_ORGANIZATIONS_TAXONOMY_CONCEPTS` | Create Organizations Taxonomy Concepts | Tool to create a new taxonomy concept in a Contentful organization. Use when you need to add a concept for classifying and organizing content within an organization's taxonomy. |
| `CONTENTFUL_CREATE_ORGANIZATIONS_TAXONOMY_CONCEPT_SCHEMES` | Create Organizations Taxonomy Concept Schemes | Tool to create a new taxonomy concept scheme in an organization. Use when you need to establish a new taxonomy structure or classification system for organizing content. |
| `CONTENTFUL_CREATE_RELEASE` | Create Release | Tool to create a new release in Contentful. Use when you need to group entries and assets into a release for coordinated publishing or tracking. Requires at least one entity to be specified. |
| `CONTENTFUL_CREATE_SPACES_API_KEYS` | Create Delivery API Key | Tool to create a new Delivery API key for a Contentful space. Use when you need to generate new API credentials for accessing content delivery. The created key provides access to specified environments within the space. |
| `CONTENTFUL_CREATE_SPACES_ENVIRONMENTS_ASSETS` | Create Asset | Tool to create a new asset in a Contentful space environment. Use when you need to upload files like images, videos, or documents. After creation, the asset must be processed before it's available, and you may need to publish it to make it publicly accessible. |
| `CONTENTFUL_CREATE_SPACES_ENVIRONMENTS_ENTRIES` | Create Entry | Tool to create a new entry in a Contentful space environment. Use when you need to add new content entries. Requires specifying the content type ID via X-Contentful-Content-Type header, and providing fields organized by locale. |
| `CONTENTFUL_CREATE_SPACES_ENVIRONMENTS_ENTRIES_COMMENTS` | Create Entry Comment | Tool to create a comment on an entry in Contentful. Use when you need to add a comment to a specific entry. Returns the created comment with status 'active' by default. |
| `CONTENTFUL_CREATE_SPACES_ENVIRONMENTS_EXTENSIONS` | Create Extension | Tool to create a new UI extension within a Contentful space and environment. Use when you need to add custom field editors or sidebar widgets to enhance content editing capabilities. |
| `CONTENTFUL_CREATE_SPACES_SCHEDULED_ACTIONS` | Create Scheduled Action | Tool to create a scheduled action for publishing or unpublishing entries/assets in Contentful. Use when you need to schedule an automatic publish or unpublish operation at a specific future time. |
| `CONTENTFUL_DELETE_ASSET` | Delete Asset | Deletes an asset by ID from a Contentful environment. Use this when you need to permanently remove an asset. Note: If Contentful rejects deletion for published or archived assets, you must unpublish first using the appropriate CMA endpoints. |
| `CONTENTFUL_DELETE_CONTENT_TYPE` | Delete Content Type | Deletes a content type by ID from a Contentful environment. Use this when you need to permanently remove a content type. Note: Content types must be unpublished before deletion if they are published, and must have no associated entries. |
| `CONTENTFUL_DELETE_ENTRY` | Delete Entry | Deletes an entry by ID from a Contentful environment. Use this when you need to permanently remove an entry. Note: If Contentful rejects deletion for published or archived entries, you must unpublish or unarchive first using the appropriate CMA endpoints. |
| `CONTENTFUL_DELETE_ENVIRONMENT` | Delete Environment | Deletes an environment by ID from a Contentful space. Use this when you need to permanently remove an environment. Note: You cannot delete the 'master' environment or an environment with active aliases. |
| `CONTENTFUL_DELETE_EXTENSION` | Delete Extension | Deletes an extension by ID from a Contentful environment. Use this when you need to permanently remove an extension. |
| `CONTENTFUL_DELETE_ORGANIZATIONS_APP_DEF_EVENT_SUBSCRIPTION` | Delete App Event Subscription | Deletes an app event subscription from a Contentful organization. Use this when you need to remove event subscriptions from an app definition. |
| `CONTENTFUL_DELETE_ORGANIZATIONS_APP_DEFINITIONS_DETAILS` | Delete App Definition Details | Tool to delete app definition details for an organization in Contentful. Use when you need to remove app definition details from an organization. |
| `CONTENTFUL_DELETE_ORGANIZATIONS_APP_DEFINITIONS_KEYS` | Delete App Key | Tool to delete an app key from an app definition in a Contentful organization. Use when you need to permanently remove an app key. |
| `CONTENTFUL_DELETE_ORGANIZATIONS_APP_DEF_SIGNING_SECRET` | Delete App Definition Signing Secret | Tool to remove the current app signing secret from an app definition. Use when you need to delete an existing signing secret for security or rotation purposes. |
| `CONTENTFUL_DELETE_ORGANIZATIONS_SECURITY_CONTACTS` | Delete Organization Security Contact | Deletes a security contact from a Contentful organization. Use this when you need to remove a security contact from an organization. |
| `CONTENTFUL_DELETE_RELEASE` | Delete Release | Deletes a release by ID from a Contentful environment. Use this when you need to permanently remove a release. |
| `CONTENTFUL_DELETE_SCHEDULED_ACTION` | Delete Scheduled Action | Cancels a scheduled action by ID in Contentful. Use this when you need to cancel a scheduled publish, unpublish, or other scheduled operation. |
| `CONTENTFUL_DELETE_SPACE_MEMBERSHIP` | Delete Space Membership | Deletes a space membership by ID from a Contentful space. Use this when you need to remove a user's access to a space. |
| `CONTENTFUL_DELETE_SPACES_API_KEYS` | Delete Delivery API Key | Tool to delete a single Delivery API key from a Contentful space. Use when you need to permanently remove an API key. This action is useful for revoking access credentials when they are no longer needed or have been compromised. |
| `CONTENTFUL_DELETE_SPACES_UPLOAD` | Delete Spaces Upload | Deletes an upload by ID from a Contentful space. Use this when you need to permanently remove an upload. Note: This operation uses the upload.contentful.com base URL instead of the standard API URL. |
| `CONTENTFUL_DELETE_TAG` | Delete Tag | Deletes a tag by ID from a Contentful environment. Use this when you need to permanently remove a tag. |
| `CONTENTFUL_GET_APP_BUNDLE` | Get App Bundle | Retrieves details of a specific app bundle by its ID. Use this to get information about an app bundle including its files, metadata, and associated app definition within a Contentful organization. |
| `CONTENTFUL_GET_APP_DEFINITION` | Get App Definition | Tool to retrieve details of a specific app definition by its ID. Use when you need information about an app definition in an organization. |
| `CONTENTFUL_GET_ASSET` | Get Asset | Tool to retrieve a single asset from a Contentful environment by its ID. Use when you need to get details about a specific asset including its file information, metadata, and publication status. |
| `CONTENTFUL_GET_CONTENT_TYPES` | Get Content Types | Retrieves all content types in a Contentful environment. Use this to discover the structure and fields defined for different content types. Content types define the schema for entries and are essential for understanding what data can be stored in the environment. |
| `CONTENTFUL_GET_CONTENT_TYPE_SNAPSHOT` | Get Content Type Snapshot | Tool to retrieve a snapshot of a content type by snapshot ID. Use when you need to view the state of a content type at a specific point in time. Snapshots are only available for content types in the master environment. |
| `CONTENTFUL_GET_CONTENT_TYPE_SNAPSHOTS` | Get Content Type Snapshots | Tool to get all snapshots of a content type in Contentful. Use when you need to retrieve the history of changes made to a content type structure. |
| `CONTENTFUL_GET_EDITOR_INTERFACE` | Get Editor Interface | Tool to retrieve the editor interface configuration for a content type. Use when you need to see how fields are configured in the Contentful UI. The editor interface is automatically created when a content type is first activated. |
| `CONTENTFUL_GET_ENTRY_COMMENT` | Get Entry Comment | Tool to retrieve a specific comment from an entry in Contentful. Use when you need to get details of a comment including its body, status, author, and metadata. |
| `CONTENTFUL_GET_ENTRY_REFERENCES` | Get Entry References | Tool to retrieve references to a specific entry in Contentful. Use when you need to find all entries that reference a particular entry. The include parameter controls how many levels of nested references are returned. |
| `CONTENTFUL_GET_ENTRY_SNAPSHOTS` | Get Entry Snapshots | Tool to get all snapshots of an entry in Contentful. Use when you need to retrieve the history of changes made to an entry. |
| `CONTENTFUL_GET_ENVIRONMENT` | Get Environment | Tool to retrieve details of a specific environment by its ID within a space. Use when you need information about a single environment in Contentful. |
| `CONTENTFUL_GET_ORGANIZATION` | Get Organization | Retrieves details of a specific organization by its ID. Use this when you need to get information about an organization that an admin or owner has access to. |
| `CONTENTFUL_GET_ORGANIZATION_ACCESS_GRANT` | Get Organization Access Grant | Retrieves the access grant status for a specific organization. Use this to verify whether the authenticated user has access to a specific organization. |
| `CONTENTFUL_GET_ORGANIZATIONS` | Get Organizations | Tool to get all organizations an account has access to in Contentful. Use when you need to list available organizations for the authenticated user. |
| `CONTENTFUL_GET_ORGANIZATIONS_AI_PROVIDERS` | Get Organizations AI Providers | Retrieves all AI providers configured for an organization in Contentful. Use this to list AI service providers (OpenAI, AWS Bedrock, Google Gemini, etc.) that have been configured for the organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_ACTIONS_CATEGORIES` | Get Organization App Actions Categories | Retrieves app action categories for a Contentful organization. Use this to discover available app action categories and their parameters. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEF_EVENT_SUBSCRIPTION` | Get App Event Subscription | Tool to retrieve details of an app event subscription by organization and app definition ID. Use when you need to check the configuration of event subscriptions for an app. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS` | Get Organizations App Definitions | Retrieves all app definitions for a specific organization. Use when you need to list or discover apps owned by an organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_ACCESS_GRANTS` | Get Organizations App Definitions Access Grants | Get all app access grants for a specific app definition within an organization. Use when you need to list which organizations can install a specific app definition. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_ACTIONS` | Get App Definition Actions | Tool to get all actions of an app definition within an organization. Use when you need to retrieve the list of actions defined for a specific Contentful app. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_ACTIONS2` | Get App Action Details | Tool to read a specific app action from an app definition within an organization. Use when you need to retrieve details of a particular action defined for a Contentful app. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_APP_BUNDLES` | Get App Definition App Bundles | Tool to get all app bundles for a specific app definition within an organization. Use when you need to list all uploaded bundles for a Contentful app. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_FUNCTIONS` | Get App Definition Functions | Tool to get all functions of an app definition within an organization. Use when you need to retrieve the list of functions defined for a specific Contentful app. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_KEYS` | Get App Definition Keys | Tool to retrieve all app keys for a specific app definition in a Contentful organization. Use when you need to list cryptographic keys for app authentication. |
| `CONTENTFUL_GET_ORGANIZATIONS_APP_DEFINITIONS_SIGNING_SECRET` | Get App Definition Signing Secret | Tool to retrieve the current app signing secret for an app definition. Use when you need to verify the existence or view the last 4 characters of a signing secret. Note: Full secret is only available at creation time. |
| `CONTENTFUL_GET_ORGANIZATIONS_ENABLEMENTS` | Get Organization Enablements | Retrieves feature enablements for a specific organization in Contentful. Use this to check which AI and vectorization features are enabled for the organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_INVITATIONS` | Get Organization Invitation | Retrieves a single invitation for an organization (alpha). Use this to get details about a specific invitation including invitee information and status. Note: This endpoint is in alpha state and may be subject to breaking changes. |
| `CONTENTFUL_GET_ORGANIZATIONS_ORGANIZATION_PERIODIC_USAGES` | Get Organization Periodic Usages | Tool to get organization periodic usage statistics. Use when you need to retrieve API usage metrics for an organization during a specific time period, with optional filtering by metric type and date range. |
| `CONTENTFUL_GET_ORGANIZATIONS_ROLES` | Get Organization Roles | Retrieves all space roles in an organization. Use this to list roles that define user permissions and access levels within an organization's spaces. |
| `CONTENTFUL_GET_ORGANIZATIONS_SECURITY_CONTACTS` | Get Organization Security Contacts | Retrieves security contacts for a specific organization that an admin or owner has access to. Use this to get the list of security contacts configured for an organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_SPACE_ENABLEMENTS` | Get Organizations Space Enablements | Retrieves all space enablements for a specific organization. Use when you need to check which features are enabled for spaces within an organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_SPACE_PERIODIC_USAGES` | Get Organizations Space Periodic Usages | Tool to retrieve space periodic usage data for an organization. Use this when you need to analyze usage metrics, monitor API consumption, or track resource utilization over time. |
| `CONTENTFUL_GET_ORGANIZATIONS_TAXONOMY_CONCEPTS` | Get Organizations Taxonomy Concepts | Retrieves all taxonomy concepts for an organization in Contentful. Use this to list concepts that can be used to classify and organize content within the organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_TAXONOMY_CONCEPTS_ANCESTORS` | Get Taxonomy Concept Ancestors | Retrieves the list of ancestor concepts for a specific taxonomy concept. Use this when you need to understand the hierarchical lineage of a concept in the taxonomy structure. |
| `CONTENTFUL_GET_ORGANIZATIONS_TAXONOMY_CONCEPT_SCHEMES` | Get Organizations Taxonomy Concept Schemes | Tool to retrieve all taxonomy concept schemes from an organization. Use when you need to list or discover the taxonomy structure and concept schemes available in an organization. |
| `CONTENTFUL_GET_ORGANIZATIONS_TAXONOMY_CONCEPT_SCHEMES2` | Get Taxonomy Concept Scheme | Tool to retrieve a specific taxonomy concept scheme from an organization. Use when you need to get detailed information about a taxonomy concept scheme including its concepts, labels, and definitions. |
| `CONTENTFUL_GET_ORGANIZATIONS_TAXONOMY_CONCEPT_SCHEMES_TOTAL` | Get Organizations Taxonomy Concept Schemes Total | Retrieves the total count of taxonomy concept schemes for a specific organization. Use this when you need to get the number of concept schemes configured for an organization's taxonomy. |
| `CONTENTFUL_GET_ORGANIZATIONS_TAXONOMY_CONCEPTS_TOTAL` | Get Organizations Taxonomy Concepts Total | Retrieves the total count of taxonomy concepts for a specific organization. Use this when you need to get the number of concepts configured for an organization's taxonomy. |
| `CONTENTFUL_GET_RELEASE` | Get Release | Tool to get a single release by ID from Contentful. Use when you need to retrieve details about a specific release including its entities, metadata, and archive status. |
| `CONTENTFUL_GET_SPACE` | Get space | Retrieves metadata of a specific space by its ID. Returns space-level details only (name, locales, sys fields) — not entries, content types, or assets. The returned sys.version is required for subsequent CONTENTFUL_UPDATE_SPACE calls to avoid version conflict errors. |
| `CONTENTFUL_GET_SPACE_MEMBERSHIPS` | Get Space Memberships | Tool to get all space memberships in a Contentful space. Use when you need to list all users who have access to a space and their assigned roles. Returns paginated results with membership details including admin status and role assignments. |
| `CONTENTFUL_GET_SPACES_API_KEYS` | Get Delivery API Keys | Tool to retrieve all Delivery API keys for a specific Contentful space. Use when you need to list all API keys configured for content delivery. This action returns key details including name, access token, policies, and associated environments. |
| `CONTENTFUL_GET_SPACES_ENVIRONMENTS` | Get Space Environments | Retrieves all environments of a space in Contentful. Use this to list all environments (including the master environment) within a specific space. |
| `CONTENTFUL_GET_SPACES_ENVIRONMENTS_APP_INSTALLATIONS` | List App Installations | Lists all app installations in a specific Contentful environment. Use this to discover which apps are currently installed in an environment. |
| `CONTENTFUL_GET_SPACES_ENVIRONMENTS_ASSETS` | Get All Assets | Retrieves all assets from a specific environment in a Contentful space. Use this to list and browse assets like images, videos, and documents. Supports pagination and ordering for large asset collections. |
| `CONTENTFUL_GET_SPACES_ENVIRONMENTS_LOCALES` | Get Space Environment Locales | Tool to retrieve all locales of a space environment in Contentful. Use when you need to list all available locales including their codes, names, default status, and fallback configurations. |
| `CONTENTFUL_GET_SPACES_ENVS_APP_INSTALLATIONS_FUNCTIONS` | Get App Installation Functions | Tool to get all functions for an app installation in a Contentful environment. Use when you need to retrieve the list of functions defined for an installed app in a specific space and environment. |
| `CONTENTFUL_GET_USERS_ME` | Get Authenticated User | Tool to retrieve information about the currently authenticated user. Use when you need to get details about the user making the API calls, such as their profile information, email, or account status. |
| `CONTENTFUL_LIST_ENTRIES` | List Entries | Tool to retrieve all entries from a Contentful space environment. Use when you need to list, search, or filter content entries. Supports pagination, sorting, field selection, and filtering by content type or custom fields. |
| `CONTENTFUL_LIST_SPACES` | List spaces | Lists all spaces that the authenticated user has access to in Contentful. This is a fundamental operation needed before performing any other content management actions since most operations require a space ID. To paginate, increment `skip` by `limit` across successive calls; stop when the returned count is less than `limit`. |
| `CONTENTFUL_LIST_SPACES_ROLES` | Get All Space Roles | Tool to retrieve all roles from a Contentful space. Use this to list roles that define user permissions and access levels within a space. |
| `CONTENTFUL_PUBLISH_ENTRY` | Publish Entry | Tool to publish an entry in Contentful, making it available via the Content Delivery API. Use when you need to make an entry publicly accessible or move it from draft to published status. The entry must not be archived and should have all required fields completed. Publishing increments the entry version. |
| `CONTENTFUL_QUERY_ASSET_COLLECTION` | Query Asset Collection | Tool to retrieve multiple assets with pagination and filtering via GraphQL API. Use when you need to query assets from Contentful with advanced filtering, sorting, and locale selection. Supports preview mode and fallback locale options. |
| `CONTENTFUL_QUERY_GRAPHQL_CONTENT_TYPE_COLLECTION` | Query GraphQL Content Type Collection | Tool to query a collection of entries for a specific content type using GraphQL. Use when you need to fetch multiple entries with filtering, sorting, pagination, or preview mode. The query field name must be the camelCase content type ID with 'Collection' suffix (e.g., 'blogPostCollection'). |
| `CONTENTFUL_UPDATE_APP_DEFINITION` | Update App Definition | Tool to update an app definition by ID in a Contentful organization. Use when you need to modify an app's name, source URL, locations, or parameters. |
| `CONTENTFUL_UPDATE_EDITOR_INTERFACE` | Update Editor Interface | Tool to update the editor interface configuration for a content type. Use when you need to customize how fields are displayed and edited in the Contentful UI. The version number is required to prevent conflicts when multiple users update the same editor interface. |
| `CONTENTFUL_UPDATE_ENTRY` | Update Entry | Tool to create or update an entry in a Contentful space environment. Use when you need to modify entry content or create a new entry with a specific ID. Requires the content type ID, entry version for updates, and field values organized by locale. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_APP_DEF_EVENT_SUBSCRIPTION` | Update App Event Subscription | Tool to update or create an app event subscription in a Contentful organization. Use when you need to configure event subscriptions for an app definition to receive webhooks. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_APP_DEFINITIONS_ACTIONS` | Update App Definition Action | Tool to update an action for a Contentful app definition. Use when you need to modify existing action properties such as name, URL, type, or category. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_APP_DEFINITIONS_DETAILS` | Update App Definition Details | Tool to create or update app definition details for an organization in Contentful. Use when you need to initialize or modify app details such as icons or preview images. Note: This endpoint accepts an empty body to initialize details; properties like 'name' and 'src' are not accepted here and will cause validation errors. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_APP_DEF_SIGNING_SECRET` | Update App Definition Signing Secret | Tool to create or overwrite the app signing secret for an app definition. Use when you need to set up webhook signature verification or rotate an existing secret. Note: This operation overwrites any existing signing secret. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_ENABLEMENTS` | Update Organization Enablements | Updates feature enablements for a specific organization in Contentful. Use this to enable or disable AI and vectorization features for the organization. Requires the current version number for optimistic locking to prevent conflicts. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_SECURITY_CONTACTS` | Update Organization Security Contact | Updates an organization security contact that an admin or owner has access to. Use this to change the email address of a security contact. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_TAXONOMY_CONCEPTS` | Update Organizations Taxonomy Concepts | Tool to create or update a taxonomy concept with a user-defined ID in a Contentful organization. Use when you need to create a concept with a specific ID or update an existing concept's properties. |
| `CONTENTFUL_UPDATE_ORGANIZATIONS_TAXONOMY_CONCEPT_SCHEMES` | Update Organizations Taxonomy Concept Schemes | Tool to create or update a taxonomy concept scheme with a user-defined ID in an organization. Use when you need to create a new classification scheme or update an existing one with localized labels and definitions. |
| `CONTENTFUL_UPDATE_SPACE` | Update space | Updates the name of a specific space. Notes: - The version number is required to ensure you're updating the latest version of the space. - You can get the current version from the sys.version field when fetching space details. - Only the name of the space can be updated. |
| `CONTENTFUL_UPDATE_SPACES_ENVIRONMENTS_TAGS` | Update Tag | Creates or updates a tag in a Contentful environment. Use this when you need to modify an existing tag's name or create a new one. |
| `CONTENTFUL_VALIDATE_BULK_ACTION` | Validate Bulk Action | Tool to validate a bulk action before executing it. Use when you need to check if multiple entries or assets can be published in bulk without actually publishing them. This helps identify potential issues before attempting the actual bulk operation. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Contentful MCP server is an implementation of the Model Context Protocol that connects your AI agent to Contentful. It provides structured and secure access so your agent can perform Contentful operations on your behalf through a secure, permission-based interface.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Python 3.9 or higher
- A Composio account and API key
- A Contentful connection authorized in Composio
- An OpenAI API key for the CrewAI LLM
- Basic familiarity with Python

### 1. Getting API Keys for OpenAI and Composio

OpenAI API Key
- Go to the [OpenAI dashboard](https://platform.openai.com/settings/organization/api-keys) and create an API key. You'll need credits to use the models, or you can connect to another model provider.
- Keep the API key safe.
Composio API Key
- Log in to the [Composio dashboard](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Navigate to your API settings and generate a new API key.
- Store this key securely as you'll need it for authentication.

### 2. Install dependencies

**What's happening:**
- composio connects your agent to Contentful via MCP
- crewai provides Agent, Task, Crew, and LLM primitives
- crewai-tools[mcp] includes MCP helpers
- python-dotenv loads environment variables from .env
```bash
pip install composio crewai crewai-tools[mcp] python-dotenv
```

### 3. Set up environment variables

Create a .env file in your project root.
What's happening:
- COMPOSIO_API_KEY authenticates with Composio
- USER_ID scopes the session to your account
- OPENAI_API_KEY lets CrewAI use your chosen OpenAI model
```bash
COMPOSIO_API_KEY=your_composio_api_key_here
USER_ID=your_user_id_here
OPENAI_API_KEY=your_openai_api_key_here
```

### 4. Import dependencies

**What's happening:**
- CrewAI classes define agents and tasks, and run the workflow
- MCPServerHTTP connects the agent to an MCP endpoint
- Composio will give you a short lived Contentful MCP URL
```python
import os
from composio import Composio
from crewai import Agent, Task, Crew
from crewai_tools import MCPServerAdapter
import dotenv

dotenv.load_dotenv()

COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
COMPOSIO_USER_ID = os.getenv("COMPOSIO_USER_ID")

if not COMPOSIO_API_KEY:
    raise ValueError("COMPOSIO_API_KEY is not set")
if not COMPOSIO_USER_ID:
    raise ValueError("COMPOSIO_USER_ID is not set")
```

### 5. Create a Composio Tool Router session for Contentful

**What's happening:**
- You create a Contentful only session through Composio
- Composio returns an MCP HTTP URL that exposes Contentful tools
```python
composio_client = Composio(api_key=COMPOSIO_API_KEY)
session = composio_client.create(user_id=COMPOSIO_USER_ID, toolkits=["contentful"])

url = session.mcp.url
```

### 6. Initialize the MCP Server

**What's Happening:**
- Server Configuration: The code sets up connection parameters including the MCP server URL, streamable HTTP transport, and Composio API key authentication.
- MCP Adapter Bridge: MCPServerAdapter acts as a context manager that converts Composio MCP tools into a CrewAI-compatible format.
- Agent Setup: Creates a CrewAI Agent with a defined role (Search Assistant), goal (help with internet searches), and access to the MCP tools.
- Configuration Options: The agent includes settings like verbose=False for clean output and max_iter=10 to prevent infinite loops.
- Dynamic Tool Usage: Once created, the agent automatically accesses all Composio Search tools and decides when to use them based on user queries.
```python
server_params = {
    "url": url,
    "transport": "streamable-http",
    "headers": {"x-api-key": COMPOSIO_API_KEY},
}

with MCPServerAdapter(server_params) as tools:
    agent = Agent(
        role="Search Assistant",
        goal="Help users search the internet effectively",
        backstory="You are a helpful assistant with access to search tools.",
        tools=tools,
        verbose=False,
        max_iter=10,
    )
```

### 7. Create a CLI Chatloop and define the Crew

**What's Happening:**
- Interactive CLI Setup: The code creates an infinite loop that continuously prompts for user input and maintains the entire conversation history in a string variable.
- Input Validation: Empty inputs are ignored to prevent processing blank messages and keep the conversation clean.
- Context Building: Each user message is appended to the conversation context, which preserves the full dialogue history for better agent responses.
- Dynamic Task Creation: For every user input, a new Task is created that includes both the full conversation history and the current request as context.
- Crew Execution: A Crew is instantiated with the agent and task, then kicked off to process the request and generate a response.
- Response Management: The agent's response is converted to a string, added to the conversation context, and displayed to the user, maintaining conversational continuity.
```python
print("Chat started! Type 'exit' or 'quit' to end.\n")

conversation_context = ""

while True:
    user_input = input("You: ").strip()

    if user_input.lower() in ["exit", "quit", "bye"]:
        print("\nGoodbye!")
        break

    if not user_input:
        continue

    conversation_context += f"\nUser: {user_input}\n"
    print("\nAgent is thinking...\n")

    task = Task(
        description=(
            f"Conversation history:\n{conversation_context}\n\n"
            f"Current request: {user_input}"
        ),
        expected_output="A helpful response addressing the user's request",
        agent=agent,
    )

    crew = Crew(agents=[agent], tasks=[task], verbose=False)
    result = crew.kickoff()
    response = str(result)

    conversation_context += f"Agent: {response}\n"
    print(f"Agent: {response}\n")
```

## Complete Code

```python
from crewai import Agent, Task, Crew, LLM
from crewai_tools import MCPServerAdapter
from composio import Composio
from dotenv import load_dotenv
import os

load_dotenv()

GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
COMPOSIO_API_KEY = os.getenv("COMPOSIO_API_KEY")
COMPOSIO_USER_ID = os.getenv("COMPOSIO_USER_ID")

if not GOOGLE_API_KEY:
    raise ValueError("GOOGLE_API_KEY is not set in the environment.")
if not COMPOSIO_API_KEY:
    raise ValueError("COMPOSIO_API_KEY is not set in the environment.")
if not COMPOSIO_USER_ID:
    raise ValueError("COMPOSIO_USER_ID is not set in the environment.")

# Initialize Composio and create a session
composio = Composio(api_key=COMPOSIO_API_KEY)
session = composio.create(
    user_id=COMPOSIO_USER_ID,
    toolkits=["contentful"],
)
url = session.mcp.url

# Configure LLM
llm = LLM(
    model="gpt-5",
    api_key=os.getenv("OPENAI_API_KEY"),
)

server_params = {
    "url": url,
    "transport": "streamable-http",
    "headers": {"x-api-key": COMPOSIO_API_KEY},
}

with MCPServerAdapter(server_params) as tools:
    agent = Agent(
        role="Search Assistant",
        goal="Help users with internet searches",
        backstory="You are an expert assistant with access to Composio Search tools.",
        tools=tools,
        llm=llm,
        verbose=False,
        max_iter=10,
    )

    print("Chat started! Type 'exit' or 'quit' to end.\n")

    conversation_context = ""

    while True:
        user_input = input("You: ").strip()

        if user_input.lower() in ["exit", "quit", "bye"]:
            print("\nGoodbye!")
            break

        if not user_input:
            continue

        conversation_context += f"\nUser: {user_input}\n"
        print("\nAgent is thinking...\n")

        task = Task(
            description=(
                f"Conversation history:\n{conversation_context}\n\n"
                f"Current request: {user_input}"
            ),
            expected_output="A helpful response addressing the user's request",
            agent=agent,
        )

        crew = Crew(agents=[agent], tasks=[task], verbose=False)
        result = crew.kickoff()
        response = str(result)

        conversation_context += f"Agent: {response}\n"
        print(f"Agent: {response}\n")
```

## Conclusion

You now have a CrewAI agent connected to Contentful through Composio's Tool Router. The agent can perform Contentful operations through natural language commands.
Next steps:
- Add role-specific instructions to customize agent behavior
- Plug in more toolkits for multi-app workflows
- Chain tasks for complex multi-step operations

## How to build Contentful MCP Agent with another framework

- [OpenAI Agents SDK](https://composio.dev/toolkits/contentful/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/contentful/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/contentful/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/contentful/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/contentful/framework/codex)
- [OpenClaw](https://composio.dev/toolkits/contentful/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/contentful/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/contentful/framework/cli)
- [Google ADK](https://composio.dev/toolkits/contentful/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/contentful/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/contentful/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/contentful/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/contentful/framework/llama-index)

## Related Toolkits

- [Supabase](https://composio.dev/toolkits/supabase) - Supabase is an open-source backend platform offering scalable Postgres databases, authentication, storage, and real-time APIs. It lets developers build modern apps without managing infrastructure.
- [Codeinterpreter](https://composio.dev/toolkits/codeinterpreter) - Codeinterpreter is a Python-based coding environment with built-in data analysis and visualization. It lets you instantly run scripts, plot results, and prototype solutions inside supported platforms.
- [GitHub](https://composio.dev/toolkits/github) - GitHub is a code hosting platform for version control and collaborative software development. It streamlines project management, code review, and team workflows in one place.
- [Ably](https://composio.dev/toolkits/ably) - Ably is a real-time messaging platform for live chat and data sync in modern apps. It offers global scale and rock-solid reliability for seamless, instant experiences.
- [Abuselpdb](https://composio.dev/toolkits/abuselpdb) - Abuselpdb is a central database for reporting and checking IPs linked to malicious online activity. Use it to quickly identify and report suspicious or abusive IP addresses.
- [Alchemy](https://composio.dev/toolkits/alchemy) - Alchemy is a blockchain development platform offering APIs and tools for Ethereum apps. It simplifies building and scaling Web3 projects with robust infrastructure.
- [Algolia](https://composio.dev/toolkits/algolia) - Algolia is a hosted search API that powers lightning-fast, relevant search experiences for web and mobile apps. It helps developers deliver instant, typo-tolerant, and scalable search without complex infrastructure.
- [Anchor browser](https://composio.dev/toolkits/anchor_browser) - Anchor browser is a developer platform for AI-powered web automation. It transforms complex browser actions into easy API endpoints for streamlined web interaction.
- [Apiflash](https://composio.dev/toolkits/apiflash) - Apiflash is a website screenshot API for programmatically capturing web pages. It delivers high-quality screenshots on demand for automation, monitoring, or reporting.
- [Apiverve](https://composio.dev/toolkits/apiverve) - Apiverve delivers a suite of powerful APIs that simplify integration for developers. It's designed for reliability and scalability so you can build faster, smarter applications without the integration headache.
- [Appcircle](https://composio.dev/toolkits/appcircle) - Appcircle is an enterprise-grade mobile CI/CD platform for building, testing, and publishing mobile apps. It streamlines mobile DevOps so teams ship faster and with more confidence.
- [Appdrag](https://composio.dev/toolkits/appdrag) - Appdrag is a cloud platform for building websites, APIs, and databases with drag-and-drop tools and code editing. It accelerates development and iteration by combining hosting, database management, and low-code features in one place.
- [Appveyor](https://composio.dev/toolkits/appveyor) - AppVeyor is a cloud-based continuous integration service for building, testing, and deploying applications. It helps developers automate and streamline their software delivery pipelines.
- [Backendless](https://composio.dev/toolkits/backendless) - Backendless is a backend-as-a-service platform for mobile and web apps, offering database, file storage, user authentication, and APIs. It helps developers ship scalable applications faster without managing server infrastructure.
- [Baserow](https://composio.dev/toolkits/baserow) - Baserow is an open-source no-code database platform for building collaborative data apps. It makes it easy for teams to organize data and automate workflows without writing code.
- [Bench](https://composio.dev/toolkits/bench) - Bench is a benchmarking tool for automated performance measurement and analysis. It helps you quickly evaluate, compare, and track your systems or workflows.
- [Better stack](https://composio.dev/toolkits/better_stack) - Better Stack is a monitoring, logging, and incident management solution for apps and services. It helps teams ensure application reliability and performance with real-time insights.
- [Bitbucket](https://composio.dev/toolkits/bitbucket) - Bitbucket is a Git-based code hosting and collaboration platform for teams. It enables secure repository management and streamlined code reviews.
- [Blazemeter](https://composio.dev/toolkits/blazemeter) - Blazemeter is a continuous testing platform for web and mobile app performance. It empowers teams to automate and analyze large-scale tests with ease.
- [Blocknative](https://composio.dev/toolkits/blocknative) - Blocknative delivers real-time mempool monitoring and transaction management for public blockchains. Instantly track pending transactions and optimize blockchain interactions with live data.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Contentful MCP?

With a standalone Contentful MCP server, the agents and LLMs can only access a fixed set of Contentful tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Contentful and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with CrewAI?

Yes, you can. CrewAI fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Contentful tools.

### Can I manage the permissions and scopes for Contentful while using Tool Router?

Yes, absolutely. You can configure which Contentful scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Contentful data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
