Kontent.ai
Create, manage, and explore your content and content model using natural language in any MCP-compatible AI tool.
Kontent.ai MCP Server
Transform your content operations with AI-powered tools for Kontent.ai. Create, manage, and explore your structured content through natural language conversations in your favorite AI-enabled editor.
Kontent.ai MCP Server implements the Model Context Protocol to connect your Kontent.ai projects with AI tools like Claude, Cursor, and VS Code. It enables AI models to understand your content structure and perform operations through natural language instructions.
β¨ Key Features
- π Rapid prototyping: Transform your diagrams into live content models in seconds
- π Data Visualisation: Visualise your content model in any format you want
Table of Contents
- β¨ Key Features
- π Quickstart
- π οΈ Available Tools
- βοΈ Configuration
- π Transport Options
- π» Development
- License
π Quickstart
π Prerequisites
Before you can use the MCP server, you need:
- A Kontent.ai account - Sign up if you don't have an account.
- A project - Create a project to work with.
- Management API key - Create a Management API key with appropriate permissions.
- Environment ID - Get your environment ID.
π Setup Options
You can run the Kontent.ai MCP Server with npx:
STDIO Transport
npx @kontent-ai/mcp-server@latest stdio
Streamable HTTP Transport
npx @kontent-ai/mcp-server@latest shttp
π οΈ Available Tools
Patch Operations Guide
- get-patch-guide β π¨ REQUIRED before any patch operation. Get patch operations guide for Kontent.ai Management API by entity type
Content Type Management
- get-type-mapi β Get Kontent.ai content type by internal ID from Management API
- list-content-types-mapi β Get all Kontent.ai content types from Management API
- add-content-type-mapi β Add new Kontent.ai content type via Management API
- patch-content-type-mapi β Update an existing Kontent.ai content type by codename using patch operations (move, addInto, remove, replace)
- delete-content-type-mapi β Delete a Kontent.ai content type by codename
Content Type Snippet Management
- get-type-snippet-mapi β Get Kontent.ai content type snippet by internal ID from Management API
- list-content-type-snippets-mapi β Get all Kontent.ai content type snippets from Management API
- add-content-type-snippet-mapi β Add new Kontent.ai content type snippet via Management API
- patch-type-snippet-mapi β Update an existing Kontent.ai content type snippet by internal ID using patch operations (move, addInto, remove, replace)
- delete-type-snippet-mapi β Delete a Kontent.ai content type snippet by codename
Taxonomy Management
- get-taxonomy-group-mapi β Get Kontent.ai taxonomy group by internal ID from Management API
- list-taxonomy-groups-mapi β Get all Kontent.ai taxonomy groups from Management API
- add-taxonomy-group-mapi β Add new Kontent.ai taxonomy group via Management API
- patch-taxonomy-group-mapi β Update Kontent.ai taxonomy group using patch operations (addInto, move, remove, replace) via Management API
- delete-taxonomy-group-mapi β Delete Kontent.ai taxonomy group by internal ID
Content Item Management
- get-item-mapi β Get Kontent.ai item by internal ID from Management API
- get-latest-variant-mapi β Get latest version of Kontent.ai language variant from Management API
- get-published-variant-mapi β Get published version of Kontent.ai language variant from Management API
- list-variants-item-mapi β List all Kontent.ai language variants of a content item from Management API
- list-variants-collection-mapi β List Kontent.ai language variants by collection from Management API (paginated)
- list-variants-type-mapi β List Kontent.ai language variants by content type from Management API (paginated)
- list-variants-components-type-mapi β List Kontent.ai language variants containing components of a specific content type from Management API (paginated)
- list-variants-space-mapi β List Kontent.ai language variants by space from Management API (paginated)
- add-content-item-mapi β Add new Kontent.ai content item via Management API. This creates the content item structure but does not add content to language variants. Use create-language-variant-mapi to add content to the item
- update-content-item-mapi β Update existing Kontent.ai content item by internal ID via Management API. The content item must already exist - this tool will not create new items
- delete-content-item-mapi β Delete Kontent.ai content item by internal ID from Management API
- create-language-variant-mapi β Create Kontent.ai variant assigning current user as contributor. Element values must fulfill limitations and guidelines defined in content type
- update-language-variant-mapi β Update Kontent.ai language variant of a content item via Management API. Element values must fulfill limitations and guidelines defined in content type. Only provided elements will be modified
- create-variant-version-mapi β Create new version of Kontent.ai language variant via Management API. This operation creates a new version of an existing language variant, useful for content versioning and creating new drafts from published content
- delete-language-variant-mapi β Delete Kontent.ai language variant from Management API
- filter-variants-mapi β Filter Kontent.ai items with variants returning references (item ID + language ID). Use for exact keyword matching and finding specific terms in content. Supports full filtering capabilities (content types, workflow steps, taxonomies, spaces, collections, publishing states, etc.). Returns paginated results with continuation token for fetching subsequent pages. Use bulk-get-items-variants-mapi to retrieve full content for matched items
- bulk-get-items-variants-mapi β Bulk get Kontent.ai content items with their language variants by item and language reference pairs. Use after filter-variants-mapi to retrieve full content data for specific item+language pairs. Items without a variant in the requested language return the item without the variant property. Returns paginated results with continuation token
- search-variants-mapi β AI-powered semantic search for finding content by meaning and concepts in a specific language variant. Use for: conceptual searches when you don't know exact keywords. Limited filtering options (variant ID only)
Asset Management
- get-asset-mapi β Get a specific Kontent.ai asset by internal ID from Management API
- list-assets-mapi β Get all Kontent.ai assets from Management API
- update-asset-mapi β Update Kontent.ai asset by internal ID
Asset Folder Management
- list-asset-folders-mapi β List all Kontent.ai asset folders
- patch-asset-folders-mapi β Modify Kontent.ai asset folders using patch operations (addInto to add new folders, rename to change names, remove to delete folders)
Language Management
- list-languages-mapi β Get all Kontent.ai languages from Management API (includes both active and inactive - check is_active property)
- add-language-mapi β Add new Kontent.ai language via Management API (languages are always created as active)
- patch-language-mapi β Update Kontent.ai language using replace operations via Management API (only active languages can be modified - to activate/deactivate, use the Kontent.ai web UI)
Collection Management
- list-collections-mapi β Get all Kontent.ai collections from Management API. Collections set boundaries for content items in your environment and help organize content by team, brand, or project
- patch-collections-mapi β Update Kontent.ai collections using patch operations (addInto to add new collections, move to reorder, remove to delete empty collections, replace to rename)
Space Management
- list-spaces-mapi β Get all Kontent.ai spaces from Management API
- add-space-mapi β Add Kontent.ai space to environment
- patch-space-mapi β Patch Kontent.ai space using replace operations
- delete-space-mapi β Delete Kontent.ai space
Role Management
- list-roles-mapi β Get all Kontent.ai roles from Management API. Requires Enterprise or Flex plan with "Manage custom roles" permission
Workflow Management
- list-workflows-mapi β Get all Kontent.ai workflows from Management API. Workflows define the content lifecycle stages and transitions between them
- add-workflow-mapi β Create a new Kontent.ai workflow via Management API. Define custom workflow steps, transitions, scopes (content types and collections), and role permissions
- update-workflow-mapi β Update an existing Kontent.ai workflow by ID via Management API. Modify steps, transitions, scopes, and role permissions. Cannot remove steps that are in use
- delete-workflow-mapi β Delete a Kontent.ai workflow by ID via Management API. The workflow must not be in use by any content items
- change-variant-workflow-step-mapi β Change the workflow step of a language variant in Kontent.ai. This operation moves a language variant to a different step in the workflow, enabling content lifecycle management such as moving content from draft to review, review to published, etc.
- publish-variant-mapi β Publish or schedule a language variant of a content item in Kontent.ai. This operation can either immediately publish the variant or schedule it for publication at a specific future date and time with optional timezone specification
- unpublish-variant-mapi β Unpublish or schedule unpublishing of a language variant of a content item in Kontent.ai. This operation can either immediately unpublish the variant (making it unavailable through the Delivery API) or schedule it for unpublishing at a specific future date and time with optional timezone specification
βοΈ Configuration
The server supports two modes, each tied to its transport:
| Transport | Mode | Authentication | Use Case |
|---|---|---|---|
| STDIO | Single-tenant | Environment variables | Local communication with a single Kontent.ai environment |
| Streamable HTTP | Multi-tenant | Bearer token per request | Remote/shared server handling multiple environments |
Single-Tenant Mode (STDIO)
Configure credentials via environment variables:
| Variable | Description | Required |
|---|---|---|
| KONTENT_API_KEY | Your Kontent.ai Management API key | β |
| KONTENT_ENVIRONMENT_ID | Your environment ID | β |
| appInsightsConnectionString | Application Insights connection string for telemetry | β |
| projectLocation | Project location identifier for telemetry tracking | β |
| manageApiUrl | Custom Management API base URL (for preview environments) | β |
Multi-Tenant Mode (Streamable HTTP)
For the Streamable HTTP transport, credentials are provided per request:
- Environment ID as a URL path parameter:
/{environmentId}/mcp - API Key via Bearer token in the Authorization header:
Authorization: Bearer <api-key>
This allows a single server instance to handle requests for multiple Kontent.ai environments without requiring credential environment variables.
| Variable | Description | Required |
|---|---|---|
| PORT | Port for HTTP transport (defaults to 3001) | β |
| appInsightsConnectionString | Application Insights connection string for telemetry | β |
| projectLocation | Project location identifier for telemetry tracking | β |
| manageApiUrl | Custom Management API base URL (for preview environments) | β |
π Transport Options
π STDIO Transport
To run the server with STDIO transport, configure your MCP client with:
{
"kontent-ai-stdio": {
"command": "npx",
"args": ["@kontent-ai/mcp-server@latest", "stdio"],
"env": {
"KONTENT_API_KEY": "<management-api-key>",
"KONTENT_ENVIRONMENT_ID": "<environment-id>"
}
}
}
π Streamable HTTP Transport (Multi-Tenant)
Streamable HTTP transport serves multiple Kontent.ai environments from a single server instance. Each request provides credentials via URL path parameters and Bearer authentication.
First start the server:
npx @kontent-ai/mcp-server@latest shttp
Create a .vscode/mcp.json file in your workspace:
{
"servers": {
"kontent-ai-multi": {
"uri": "http://localhost:3001/<environment-id>/mcp",
"headers": {
"Authorization": "Bearer <management-api-key>"
}
}
}
}
For secure configuration with input prompts:
{
"inputs": [
{
"id": "apiKey",
"type": "password",
"description": "Kontent.ai API Key"
},
{
"id": "environmentId",
"type": "text",
"description": "Environment ID"
}
],
"servers": {
"kontent-ai-multi": {
"uri": "http://localhost:3001/${inputs.environmentId}/mcp",
"headers": {
"Authorization": "Bearer ${inputs.apiKey}"
}
}
}
}
Update your Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Use mcp-remote as a proxy to add authentication headers:
{
"mcpServers": {
"kontent-ai-multi": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:3001/<environment-id>/mcp",
"--header",
"Authorization: Bearer <management-api-key>"
]
}
}
}
Add the server using the CLI:
claude mcp add --transport http kontent-ai-multi \
"http://localhost:3001/<environment-id>/mcp" \
--header "Authorization: Bearer <management-api-key>"
Note: You can also configure this in your Claude Code settings JSON with the
urlandheadersproperties.
[!IMPORTANT] Replace
<environment-id>with your Kontent.ai environment ID (GUID) and<management-api-key>with your Management API key.
π» Development
π Local Installation
# Clone the repository
git clone https://github.com/kontent-ai/mcp-server.git
cd mcp-server
# Install dependencies
npm ci
# Build the project
npm run build
# Start the server
npm run start:stdio # For STDIO transport
npm run start:shttp # For Streamable HTTP transport
# Start the server with automatic reloading (no need to build first)
npm run dev:stdio # For STDIO transport
npm run dev:shttp # For Streamable HTTP transport
π Project Structure
src/- Source codetools/- MCP tool implementationsclients/- Kontent.ai API client setupschemas/- Data validation schemasutils/- Utility functionserrorHandler.ts- Standardized error handling for MCP toolsthrowError.ts- Generic error throwing utility
server.ts- Main server setup and tool registrationbin.ts- Single entry point that handles both transport types
π Debugging
For debugging, you can use the MCP inspector:
npx @modelcontextprotocol/inspector -e KONTENT_API_KEY=<key> -e KONTENT_ENVIRONMENT_ID=<env-id> node path/to/build/bin.js
Or use the MCP inspector on a running streamable HTTP server:
npx @modelcontextprotocol/inspector
This provides a web interface for inspecting and testing the available tools.
π¦ Release Process
To release a new version:
- Bump the version using
npm version [patch|minor|major]- this updatespackage.json,package-lock.json, and syncs toserver.json - Push the commit to your branch and create a pull request
- Merge the pull request
- Create a new GitHub release with the version number as both name and tag, using auto-generated release notes
- Publishing the release triggers an automated workflow that publishes to npm and GitHub MCP registry
License
MIT
Related Servers
Cloudglue
Connects Cloudglue to AI assistants, turning video collections into structured data for LLMs. Requires a Cloudglue API Key.
Authorize.Net by CData
A read-only MCP server by CData for querying live Authorize.Net data.
Gdrive Cloudflare worker
Remote MCP server for Google Drive and Sheets running on Cloudflare Workers with full OAuth 2.0 support.
Remote MCP Server (Authless)
A remote MCP server deployable on Cloudflare Workers without authentication.
AWSβIRevealβMCP
Provides a unified interface to AWS services for security investigations and incident response.
Workday by CData
A read-only server for querying live Workday data using LLMs, powered by the CData JDBC Driver.
Terra
Access and manage wearable and health app data through the Terra API.
Cloud PC Management
Manage Azure Cloud PCs using the Microsoft Graph API.
OCI MCP Servers
A collection of MCP servers for managing Oracle Cloud Infrastructure (OCI) resources.
Edgee MCP Server
Manage organizations, projects, components, and users via the Edgee API.