tools/integrations/contentful.md
Enterprise headless CMS with multi-locale support, two-API architecture, and composable content.
| Integration | Available | Notes |
|---|---|---|
| API | ✓ | Content Delivery API (read), Content Management API (write) |
| MCP | - | No official MCP server |
| CLI | ✓ | contentful-cli for spaces, content types, migrations |
| SDK | ✓ | contentful (delivery), contentful-management (management) |
Authorization: Bearer {delivery_token}
https://cdn.contentful.comAuthorization: Bearer {preview_token}
https://preview.contentful.comAuthorization: Bearer {management_token}
https://api.contentful.comGET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?content_type=blogPost&limit=10
Authorization: Bearer {delivery_token}
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}
Authorization: Bearer {delivery_token}
# By field value
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?content_type=blogPost&fields.slug=my-post
# Full-text search
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?query=marketing+strategy
# By date range
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?content_type=blogPost&fields.publishDate[gte]=2024-01-01
CMA uses PUT with a client-generated entry_id. To auto-generate, use POST without an ID in the path.
PUT https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}
Content-Type: application/vnd.contentful.management.v1+json
X-Contentful-Content-Type: blogPost
Authorization: Bearer {management_token}
{
"fields": {
"title": {"en-US": "New Post"},
"slug": {"en-US": "new-post"},
"body": {"en-US": "Post content here"}
}
}
PUT https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}
Content-Type: application/vnd.contentful.management.v1+json
X-Contentful-Version: {current_version}
Authorization: Bearer {management_token}
{
"fields": {
"title": {"en-US": "Updated Title"}
}
}
PUT https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}/published
X-Contentful-Version: {current_version}
Authorization: Bearer {management_token}
DELETE https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}/published
X-Contentful-Version: {current_version}
Authorization: Bearer {management_token}
# Login
contentful login
# List spaces
contentful space list
# Export space content
contentful space export --space-id {space_id}
# Import content
contentful space import --space-id {space_id} --content-file export.json
# Create migration
contentful space migration --space-id {space_id} migration.js
# List content types
contentful content-type list --space-id {space_id}
master, staging, etc.)en-US, de-DE)Rate limits are plan-dependent. Check X-Contentful-RateLimit-Second-Limit response header for your actual limits.