Skip to main content
Creates new content conforming to a content type’s schema and structure.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "description": "Project ID (optional, uses session default)"
    },
    "typeId": {
      "type": "string",
      "description": "Content type to use as structure"
    },
    "typeVersion": {
      "type": "number",
      "description": "Version of the content type schema (defaults to latest published)"
    },
    "name": {
      "type": "string",
      "description": "Name/title for the content item"
    },
    "description": {
      "type": "string",
      "description": "Structured description (optional)"
    },
    "content": {
      "type": "object",
      "description": "Content data matching the type's JSON schema"
    },
    "tags": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Tags for categorization (optional)"
    },
    "metadata": {
      "type": "object",
      "properties": {
        "locale": { "type": "string" },
        "author": { "type": "string" }
      },
      "description": "Additional metadata"
    }
  },
  "required": ["typeId", "name", "content"]
}

Parameters

ParameterTypeRequiredDescription
projectIdstringNoProject ID (uses session default)
typeIdstringYesContent type to use as structure
typeVersionnumberNoSchema version (defaults to latest published)
namestringYesName/title for the content item
descriptionstringNoStructured description
contentobjectYesContent data matching the schema
tagsstring[]NoTags for categorization
metadataobjectNoAdditional metadata

Response

FieldTypeDescription
idstringUnique identifier for the created content
typeIdstringContent type identifier used
typeVersionnumberVersion of the content type schema used
namestringDisplay name/title
descriptionstringContent description
statusstringInitial status (typically “draft”)
createdAtstringISO 8601 creation timestamp

Example

Request

{
  "typeId": "ct_story_001",
  "name": "How Acme Corp Unified Multiple Products",
  "description": "A comprehensive case study of digital transformation.\n\n**Topics:** Design Systems\n**Length:** ~1500 words",
  "content": {
    "title": "How Acme Corp Unified Multiple Products",
    "subtitle": "2024: The Digital Transformation",
    "asset": {
      "id": "asset-workspace-001"
    },
    "assetDescription": "The Acme design team collaborating on the new unified component library.",
    "components": [
      {
        "type": "StoryParagraph",
        "text": "Acme Corporation's transformation began in early 2024..."
      },
      {
        "type": "StorySubheader",
        "text": "The Challenge: Fragmentation at Scale"
      },
      {
        "type": "StoryParagraph",
        "text": "The VP of Design assembled a cross-functional team..."
      }
    ]
  },
  "tags": ["case-study", "design-system"],
  "metadata": {
    "locale": "en-US",
    "author": "[email protected]"
  }
}

Response

{
  "id": "cont_story_acme_001",
  "typeId": "ct_story_001",
  "typeVersion": 2,
  "name": "How Acme Corp Unified Multiple Products",
  "description": "A comprehensive case study of digital transformation...",
  "status": "draft",
  "createdAt": "2024-03-21T10:00:00Z"
}

Usage

Basic Content Creation

// First, get the content type schema
const contentType = await mcp.call("get_content_type", {
  contentTypeId: "ct_story_001"
});

// Then create content that matches the schema
const result = await mcp.call("create_content", {
  typeId: "ct_story_001",
  name: "My Story Title",
  content: {
    title: "My Story Title",
    components: [
      {
        type: "StoryParagraph",
        text: "Opening paragraph of the story..."
      }
    ]
  }
});

With Assets

// Find an asset to use
const assets = await mcp.call("search_assets", {
  query: "hero image",
  type: "image/*"
});

// Create content with asset reference
const result = await mcp.call("create_content", {
  typeId: "ct_story_001",
  name: "Story with Hero Image",
  content: {
    title: "Story with Hero Image",
    asset: {
      id: assets.items[0].id
    },
    components: [...]
  }
});

With Metadata

const result = await mcp.call("create_content", {
  typeId: "ct_story_001",
  name: "Localized Content",
  content: {...},
  metadata: {
    locale: "es-ES",
    author: "[email protected]"
  }
});
Content is created in “draft” status. It must be published through the Metabind interface to be available via the content delivery APIs.