Templates

Your AI assistant uses these tools to discover and apply your brand templates — pre-configured layouts, colors, and fonts that keep every presentation on-brand.

Templates are imported from PowerPoint files (.potx / .potm) and contain one or more layouts — predefined slide structures with placeholders for titles, body text, images, and decorative elements. When your assistant creates slides using a template, it automatically applies the template's colors, fonts, and positioning.

For a step-by-step guide on importing and using templates, see How Do I Use Brand Templates?

Renamed: the layout tools dropped their template_ prefix

template_layout_list, template_layout_get and template_layout_update are now layout_list, layout_get and layout_update, and their templateId parameter is now deckId. The old names were removed rather than aliased — they always accepted a plain deck as well as a template, and the prefix hid that. Reconnect your MCP client to pick up the new tool list.

Listing Your Templates

When you ask to “use my corporate template” or your assistant is about to create a new presentation, it first calls template_list to see what templates you have available. This is a required step before creating any new deck — your assistant checks for brand templates so it can use them instead of starting from scratch.

Parameters

ParameterTypeRequiredDescription
limitnumberNoMaximum templates to return (1–100, default 20)
offsetnumberNoNumber of templates to skip for pagination (default 0)

What It Returns

  • total — total number of templates you have
  • templates — array of template summaries (id, name, layoutCount, primaryColor, updatedAt). Your own imported templates plus Rideful's published starters, which are marked (Rideful starter) and are read-only — buildable by anyone, editable by no one
  • hasMore — whether more templates are available beyond the current page

Example

template_list({ limit: 10 })

// Response:
// {
//   total: 2,
//   hasMore: false,
//   templates: [
//     { id: "template_abc", name: "Corporate Blue",
//       layoutCount: 5, primaryColor: "#0066CC",
//       updatedAt: 1706000000000 },
//     { id: "template_def", name: "Marketing Deck",
//       layoutCount: 8, primaryColor: "#E33737",
//       updatedAt: 1705900000000 }
//   ]
// }

Browsing Layouts

Your assistant calls layout_list to see what layouts are available — on a brand template, or on the deck it is currently working in, which carries its own copy of the template's layouts. Each layout is a predefined slide structure — like “Title Slide,” “Content,” or “Two Column” — with specific placeholders and background styling.

Parameters

ParameterTypeRequiredDescription
deckIdstringYesThe deck (or template) to list layouts for

What It Returns

  • templateName — name of the template
  • layouts — array of layout summaries, each with:
    • id, name, order — layout identity and sort position
    • isDefault — whether this is the default layout — the first layout by order
    • layoutDescription — the free-text guidance on when to use this layout, or null where none has been written
    • placeholderCount, placeholderTypes — how many placeholders the layout has and what types, with a ×N suffix when a type repeats: ["title", "body×3", "footer", "slideNumber"]
    • placeholders — the targetable placeholders, each with elementId, type, size, and fontSize. Pass the elementId back as slide_bulk_create's placeholders[].elementId to write into one specific slot. Text-capable types only (title, subTitle, body, footer), so this list is shorter than placeholderCount on layouts carrying slide numbers, dates, or picture zones
    • hasBackgroundImage, backgroundColor — the layout's background details

Example

layout_list({
  deckId: "template_abc"
})

// Response:
// {
//   templateId: "template_abc",
//   templateName: "Corporate Blue",
//   layouts: [
//     { id: "layout_001", name: "Title Slide",
//       order: 0, isDefault: true,
//       placeholderCount: 2,
//       placeholderTypes: ["title", "subTitle"],
//       placeholders: [
//         { elementId: "dle-text-Ka1bZ9mQ",
//           type: "title",
//           size: { width: 1160, height: 120 },
//           fontSize: 44 },
//         { elementId: "dle-text-Xa9bK2mQ",
//           type: "subTitle",
//           size: { width: 1160, height: 80 },
//           fontSize: 24 }
//       ],
//       backgroundColor: "#FFFFFF" },
//     { id: "layout_002", name: "Content",
//       order: 1, isDefault: false,
//       placeholderCount: 3,
//       placeholderTypes: ["title", "body",
//                          "slideNumber"],
//       placeholders: [ /* title, body —
//         the slideNumber is counted above
//         but cannot hold text */ ],
//       backgroundColor: "#FFFFFF" },
//     { id: "layout_003", name: "Two Column",
//       order: 2, isDefault: false,
//       placeholderCount: 3,
//       placeholderTypes: ["title", "body×2"],
//       placeholders: [
//         { elementId: "dle-text-Lm3pQ8vT",
//           type: "title", ... },
//         { elementId: "dle-text-Pq7nR4vT",
//           type: "body",
//           size: { width: 560, height: 400 },
//           fontSize: 18 },
//         { elementId: "dle-text-Wc4kT6nR",
//           type: "body",
//           size: { width: 560, height: 400 },
//           fontSize: 18 }
//       ],
//       backgroundColor: "#FFFFFF" }
//   ]
// }

Inspecting a Layout

To understand exactly what a layout contains before using it, your assistant calls layout_get. This returns the full structural detail: every placeholder with its position, size, and text style; every decorative object (shapes, accent bars); and any background images.

Parameters

ParameterTypeRequiredDescription
deckIdstringYesThe parent deck (or template)
layoutIdstringYesThe specific layout to inspect

What It Returns

A detailed breakdown of the layout, including:

  • Layout info — name, order, whether it's the default, background color
  • Placeholders — each placeholder's elementId, type (title, body, subTitle, footer), position, size, font, color, alignment, and default text. The elementId is what slide_bulk_create's placeholders[] targets
  • Decorative objects — shapes, accent bars, and other non-placeholder elements with their positions, colors, and styles
  • Images — background or decorative images with positions and dimensions

Example

layout_get({
  deckId: "template_abc",
  layoutId: "layout_001"
})

// Response (formatted markdown):
//
// ## Layout: "Title Slide"
//
// Deck: Corporate Blue
// ID: layout_001
// Order: 0 (default layout)
// Background: #FFFFFF
//
// ### Placeholders
//
//   1. **title** `dle-text-Ka1bZ9mQ` (idx: 0)
//      Position: (60, 200) — Size: 1160 × 120
//      Style: font: Inter, size: 44pt,
//             color: #1C2833, align: center
//
//   2. **subTitle** `dle-text-Xa9bK2mQ` (idx: 1)
//      Position: (60, 340) — Size: 1160 × 80
//      Style: font: Inter, size: 24pt,
//             color: #666666, align: center
//
// ### Decorative Objects
//
//   1. **AccentBar** (rectangle)
//      Position: (0, 0) — Size: 1280 × 16
//      Style: fill: #0066CC, opacity: 100%

Updating a Layout Description

After inspecting a layout, your assistant can save a description that helps it (and other AI assistants) pick the right layout in the future. layout_update updates the layout's name and/or description. Your assistant will always ask for confirmation before saving.

This tool writes a layout's metadata, and only on a template — a plain deck's layout name and description are not writable. The limit stops there: a layout's elements are editable on any deck through the element tools, by passing the layout id where you would name a slide.

Parameters

ParameterTypeRequiredDescription
deckIdstringYesThe parent template
layoutIdstringYesThe layout to update
namestringNo*New layout name (1–200 characters)
layoutDescriptionstringNo*Free-text description for when and how to use this layout (max 2000 characters)

* At least one of name or layoutDescription must be provided.

What It Returns

  • success — whether the update succeeded
  • updatedFields — list of field names that were changed

Example

layout_update({
  deckId: "template_abc",
  layoutId: "layout_003",
  layoutDescription: "Two-column comparison layout. Use for side-by-side content like pros/cons, before/after, or feature comparisons. Title spans full width at top."
})

// Response:
// {
//   success: true,
//   layoutId: "layout_003",
//   templateId: "template_abc",
//   updatedFields: ["layoutDescription"]
// }

Using Templates When Creating Slides

Once your assistant knows which template and layouts to use, it passes them to slide_bulk_create with a templateId and layout IDs for each slide. The template's theme (fonts, colors) is applied automatically, and placeholder content is filled in from your request.

Example

// Create a deck using template layouts
slide_bulk_create({
  name: "Q4 Review",
  templateId: "template_abc",
  slides: [
    {
      layoutId: "layout_001",
      title: "Q4 Business Review",
      subtitle: "January 2026"
    },
    {
      layoutId: "layout_002",
      title: "Revenue Highlights",
      body: "- Total revenue: **$4.2M**\n- Growth: +18% QoQ"
    },
    {
      // layout_003 has two body placeholders —
      // `body` alone can only fill the larger one,
      // so target each by id instead
      layoutId: "layout_003",
      placeholders: [
        { elementId: "dle-text-Lm3pQ8vT",
          text: "EMEA vs APAC" },
        { elementId: "dle-text-Pq7nR4vT",
          text: "- EMEA: $2.4M\n- Up 22% QoQ" },
        { elementId: "dle-text-Wc4kT6nR",
          text: "- APAC: $1.8M\n- Up 12% QoQ" }
      ]
    }
  ]
})

Which Tool Will My Assistant Use?

Your AI assistant picks the right tool based on what you ask:

  • “Do I have any templates?” template_list to list available templates
  • “What layouts does my corporate template have?” layout_list to browse layouts
  • “Show me what the title slide looks like” layout_get to inspect placeholder positions and styles
  • “Create a pitch deck using my brand template” template_list layout_list slide_bulk_create with the template
  • “Add a description to this layout” layout_update to save a helpful description

Related