Skip to main content
Glama

Merge Designs

merge-designs
Destructive

Restructure a Canva design by combining designs, inserting or removing whole pages, or changing page order.

Use to make a new presentation from selected pages, add slides from another design, merge separate designs together, rearrange a design's flow, or remove entire pages.

Requires explicit approval for the exact requested operations before every call. Deleting pages is permanent.

Not for changing text, images, or other content within a page.

Returns the completed design result, including its design_id.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeYesWhether to create a new design from pages in existing designs, or change the pages in one existing design.
titleNoTitle for the new design. Required when "type" is "create_new_design". Optional when "type" is "modify_existing_design", where it renames the design.
design_idNoID of the existing Canva design whose pages will change. Required when "type" is "modify_existing_design". Design IDs start with "D".
operationsYesPage operations to perform, in order. Each operation runs before the next, so page numbers refer to the design's updated page structure. When "type" is "create_new_design", only "insert_pages" operations are accepted. When "type" is "modify_existing_design", every operation type is accepted.
user_intentNoMandatory description of what the user is trying to accomplish with this tool call. This should always be provided by LLM clients. Please keep it concise (255 characters or less recommended).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / design_id / description
      Previous value: -"ID of the design to modify (required for modify_existing_design, must start with \"D\")."New value: +"ID of the existing Canva design whose pages will change. Required when \"type\" is \"modify_existing_design\". Design IDs start with \"D\"."
    • addedInput schema / properties / design_id / maxLength
      Added value: +11
    • addedInput schema / properties / design_id / minLength
      Added value: +11
    • addedInput schema / properties / design_id / pattern
      Added value: +"^D[a-zA-Z0-9_-]+$"
    • changedInput schema / properties / operations / description
      Previous value: -"List of operations to perform. For create_new_design, only insert_pages operations are allowed. For modify_existing_design, all operation types are allowed."New value: +"Page operations to perform, in order. Each operation runs before the next, so page numbers refer to the design's updated page structure. When \"type\" is \"create_new_design\", only \"insert_pages\" operations are accepted. When \"type\" is \"modify_existing_design\", every operation type is accepted."
    • changedInput schema / properties / operations / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "after_page_number": {
      -        "description": "Insert after this page number (0 to insert at beginning, omit to append at end)",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "source": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "design_id": {
      -            "description": "ID of the source design (must start with \"D\")",
      -            "type": "string"
      -          },
      -          "page_numbers": {
      -            "description": "One-based page numbers to insert. If omitted, all pages are inserted.",
      -            "items": {
      -              "exclusiveMinimum": 0,
      -              "type": "integer"
      -            },
      -            "type": "array"
      -          },
      -          "type": {
      -            "const": "design",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "type",
      -          "design_id"
      -        ],
      -        "type": "object"
      -      },
      -      "type": {
      -        "const": "insert_pages",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "source"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "from_page_numbers": {
      -        "description": "One-based page numbers to move",
      -        "items": {
      -          "exclusiveMinimum": 0,
      -          "type": "integer"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "to_after_page_number": {
      -        "description": "Move pages to after this page number (0 to move to beginning)",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "move_pages",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "from_page_numbers",
      -      "to_after_page_number"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "page_numbers": {
      -        "description": "One-based page numbers to delete",
      -        "items": {
      -          "exclusiveMinimum": 0,
      -          "type": "integer"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "delete_pages",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "page_numbers"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "after_page_number": {
      +        "description": "Insert after this 1-based page number. Use 0 to insert at the beginning, or omit to append to the end.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "source": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "design_id": {
      +            "description": "ID of the source design (must start with \"D\")",
      +            "maxLength": 11,
      +            "minLength": 11,
      +            "pattern": "^D[a-zA-Z0-9_-]+$",
      +            "type": "string"
      +          },
      +          "page_numbers": {
      +            "description": "One-based page numbers to insert. If omitted, all pages are inserted.",
      +            "items": {
      +              "exclusiveMinimum": 0,
      +              "type": "integer"
      +            },
      +            "type": "array"
      +          },
      +          "type": {
      +            "const": "design",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "type",
      +          "design_id"
      +        ],
      +        "type": "object"
      +      },
      +      "type": {
      +        "const": "insert_pages",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "source"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "from_page_numbers": {
      +        "description": "Pages to move, using 1-based page numbers.",
      +        "items": {
      +          "exclusiveMinimum": 0,
      +          "type": "integer"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "to_after_page_number": {
      +        "description": "Move the pages after this 1-based page number. Use 0 to move them to the beginning.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "move_pages",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "from_page_numbers",
      +      "to_after_page_number"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "page_numbers": {
      +        "description": "One-based page numbers to delete",
      +        "items": {
      +          "exclusiveMinimum": 0,
      +          "type": "integer"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "delete_pages",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "page_numbers"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / title / description
      Previous value: -"Title for the new design (required for create_new_design). Optional for modify_existing_design to rename the design."New value: +"Title for the new design. Required when \"type\" is \"create_new_design\". Optional when \"type\" is \"modify_existing_design\", where it renames the design."
    • changedInput schema / properties / type / description
      Previous value: -"Whether to create a new design or modify an existing one. Use \"create_new_design\" to combine pages from multiple designs into a new design. Use \"modify_existing_design\" to insert, move, or delete pages in an existing design."New value: +"Whether to create a new design from pages in existing designs, or change the pages in one existing design."
  2. Added
  3. Removed
  4. Added

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already include destructiveHint=true, and the description adds valuable context: 'Deleting pages is permanent' and 'Requires explicit approval for the exact requested operations before every call.' It also states the return behavior. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently organized: main purpose first, then use cases, then warnings and exclusions, then return value. Every sentence earns its place and there is no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a rich input schema and no output schema, the description adequately covers scope, safety, exclusions, and the return value. It could go slightly further by naming the sibling tool for content edits, but the provided context is sufficient for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries the parameter documentation burden. The description summarizes the operation types ('inserting or removing whole pages, or changing page order') but adds no parameter-level detail beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Restructure a Canva design by combining designs, inserting or removing whole pages, or changing page order.' It clearly distinguishes page-level structural changes from content-level editing, so an agent can tell it apart from siblings like perform-editing-operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides concrete use cases: making a new presentation, adding slides, merging designs, rearranging flow, and removing pages. It also gives a clear exclusion: 'Not for changing text, images, or other content within a page.' It does not name an alternative sibling tool, but the when-to-use and when-not-to-use guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources