Deck Operations

Your AI assistant uses these tools to create, find, and manage your presentations. You don't call them directly — just tell your assistant what you need and it handles the rest.

When you connect an AI assistant to Rideful via MCP, it gets access to tools for managing your presentations. A deck is a presentation containing ordered slides. Every deck has a name, an aspect ratio (which determines the canvas size), and optionally a theme with colors and fonts.

This page documents the four deck-level tools your AI assistant uses behind the scenes. Understanding them helps you give better instructions and troubleshoot when something doesn't look right.

Finding Your Presentations

When you ask your AI assistant to “open my Q4 deck” or “show me my presentations,” it uses deck_list to search your decks by name, see how many slides each has, and when they were last updated. This is a read-only operation.

Parameters

ParameterTypeRequiredDescription
limitnumberNoMaximum decks to return (1–100, default 20)
offsetnumberNoNumber of decks to skip for pagination (default 0)
namestringNoFilter by name (case-insensitive partial match)
folderIdstringNoFilter to decks in this folder. Use folder_list to get folder IDs

What It Returns

  • total — total number of matching decks
  • decks — array of deck summaries (id, name, slideCount, updatedAt)
  • hasMore — whether more results are available beyond the current page

Example

deck_list({ limit: 10 })

// Response:
// {
//   total: 3,
//   hasMore: false,
//   decks: [
//     { id: "deck_abc123", name: "Q4 Business Review",
//       slideCount: 8, updatedAt: 1706000000000 },
//     { id: "deck_def456", name: "Product Launch",
//       slideCount: 12, updatedAt: 1705900000000 },
//     { id: "deck_ghi789", name: "Team Standup",
//       slideCount: 3, updatedAt: 1705800000000 }
//   ]
// }
// Filter by name (case-insensitive partial match)
deck_list({ name: "review" })

// Returns only decks with "review" in the name

Viewing Deck Details

Before making any changes to a presentation, your AI assistant calls deck_get to understand what it's working with. This returns the canvas size, theme, available layouts, any slide rules to follow, and a summary of every slide and its elements. This is always the first step — it ensures the assistant positions elements correctly and follows your design rules.

Parameters

ParameterTypeRequiredDescription
deckIdstringYesThe ID of the slide deck to retrieve

What It Returns

A detailed overview of the deck, including:

  • Deck info — name, slide count, aspect ratio, last updated
  • Theme — heading and body fonts, primary and secondary colors (if a template is applied)
  • Available layouts — layout names and IDs the assistant can use when adding slides
  • Slide rules — mandatory content and design rules to follow when working with this deck
  • Quick reference — deck ID, canvas size, and a summary of each slide with its elements

Example

deck_get({ deckId: "deck_abc123" })

// Response (formatted markdown):
//
// ## Q4 Business Review
//
// **8 slides** | Aspect: 16:9
// Updated: 2 hours ago
//
// ### Theme
// - Fonts: Heading: Inter, Body: Inter
// - Colors: Primary: #1C2833, Secondary: #2E4053
//
// ### Available Layouts
//
//   1. "Title Slide" (default) — `layout-7Kd2Rm4p`
//      Cover slide with centered title and subtitle
//
//   2. "Title and Content" — `layout-Qc9Wb3Xn`
//      Standard content with a title and body area
//
//   3. "Blank" — `layout-Ze5Vh8Ta`
//      Empty canvas with no placeholders
//
// ### Quick Reference
// - Deck ID: deck_abc123
// - Canvas: 1280 × 720
// - Slides (8):
//   1. slide_001 — Title Slide (3 elements)
//      - elem_a text [title]
//      - elem_b text [subtitle]
//   2. slide_002 — Title and Content (2 elements)
//      ...

Creating an Empty Deck

When you need a blank starting point, deck_create creates a new presentation with one empty slide. This is useful when your assistant will build each slide individually with fine-grained control. For most cases, the assistant will use slide_bulk_create (below) instead, which creates a full deck with content in one step.

Parameters

ParameterTypeRequiredDescription
namestringYesName for the new deck (1–200 characters)
backgroundColorstringNoBackground color for the first slide (hex, e.g., '#1A1A2E'). Omit it and the slide inherits its layout's background, then the master's.
backgroundGradientobjectNoGradient background for the first slide, taking precedence over backgroundColor. Same shape as an element's gradientFill. Picture backgrounds cannot be created over MCP.
aspectRatioenumNo'16:9' (1280×720), '4:3' (1024×768), or '1:1' (1080×1080). Default '16:9'. The deck's actual canvas comes from the starter template for that ratio, so read it back with deck_get
folderIdstringNoPlace the new deck in this folder. Defaults to Shelf if omitted

What It Returns

  • id — the new deck's ID
  • name — the deck name
  • canvas { width, height } in pixels

Example

deck_create({
  name: "Quarterly Review",
  aspectRatio: "16:9",
  backgroundColor: "#1C2833"
})

// Response:
// {
//   id: "deck_abc123",
//   name: "Quarterly Review",
//   canvas: { width: 1280, height: 720 }
// }

Building a Full Presentation

When you say “create a pitch deck” or “make me a 10-slide presentation,” your assistant typically uses slide_bulk_create — the most efficient way to build a presentation. It creates a new deck (or adds to an existing one) with up to 20 slides of content in a single step. Use masterStyles to enforce consistent colors and fonts across all slides, then override individual slides as needed.

Parameters

ParameterTypeRequiredDescription
namestringNo*Create a new deck with this name (1–200 characters). Mutually exclusive with deckId
deckIdstringNo*Add slides to this existing deck. Mutually exclusive with name
aspectRatioenumNo'16:9', '4:3', or '1:1'. Only used when creating a new deck. Default '16:9'
folderIdstringNoPlace the new deck in this folder. Only used when creating a new deck (with name). Defaults to Shelf
masterStylesobjectNoDefault styles for all slides. Per-slide values override these (see below)
slidesarrayYesArray of slides to create (1–20 items)

* Exactly one of name or deckId must be provided.

masterStyles Object

Sets default styling for all slides in the call. Per-slide values override at the field level — for example, if a slide sets only textColor, it keeps the master's fontSize and fontFamily.

PropertyTypeDescription
backgroundColorstringDefault background color for all slides (hex)
titleStyleobjectDefault style for title placeholders: { textColor, fontSize, fontFamily }
subtitleStyleobjectDefault style for subtitle placeholders: { textColor, fontSize, fontFamily }
bodyStyleobjectDefault style for body placeholders: { textColor, fontSize, fontFamily }

Slide Object Properties

Each item in the slides array can have:

PropertyTypeDescription
layoutIdstringLayout ID from deck_get. Omit to use the deck's default layout. An unknown id is rejected with a list of the deck's valid ids
titlestringTitle text. Fills the layout's title placeholder
subtitlestringSubtitle text. Fills the layout's subtitle placeholder — any layout that has one, not only title layouts. Reported back as unplaced if the layout has none; it is never written into a body placeholder instead
bodystringBody text (supports markdown: **bold**, *italic*, - bullets, 1. numbered, <span style="color:#HEX">…</span> for one colored run). Fills the largest body placeholder the layout has — use placeholders to address the others
placeholdersarrayWrite text into specific placeholders by id: [{ elementId, text }]. Use this when a layout has more than one placeholder of the same type — title/subtitle/body each fill only one slot and cannot reach the rest. Applied first; the type-matched fields then fill whatever is left. Get ids from layout_list on the deck you are adding slides to — ids read from a template do not carry over to decks created from it
backgroundColorstringOverride background color for this slide (hex)
backgroundGradientobjectGradient background for this slide, taking precedence over backgroundColor. Same shape as an element's gradientFill. Omit to inherit the layout's gradient
titleStyle, subtitleStyle, bodyStyleobjectOverride styles for this slide. Same shape as masterStyles: { textColor, fontSize, fontFamily }

What It Returns

  • deckId, deckName — the deck that was created or appended to
  • isNewDeck — whether a new deck was created
  • canvas { width, height } in pixels
  • totalSlideCount — total number of slides in the deck after the operation
  • slides — array of created slides, each with slideId, slideNumber, layoutName, and elements
  • unassigned — per slide, any content that matched no placeholder, each with the field or elementId it was addressed to and a reason. Omitted when everything was placed
  • availablePlaceholders — the layout's targetable placeholders, attached alongside unassigned so the ids can be passed straight back in placeholders. Omitted when the slide was created without a layout

Example — New Deck

slide_bulk_create({
  name: "Q4 Business Review",
  masterStyles: {
    backgroundColor: "#1C2833",
    titleStyle: {
      textColor: "#FFFFFF",
      fontSize: 40,
      fontFamily: "Inter"
    },
    bodyStyle: {
      textColor: "#AAB7B8",
      fontSize: 16,
      fontFamily: "Inter"
    }
  },
  slides: [
    {
      title: "Q4 Business Review",
      subtitle: "January 2026"
    },
    {
      title: "Revenue Highlights",
      body: "- Total revenue: $4.2M\n- Growth: +18% QoQ\n- New customers: 340"
    },
    {
      title: "Key Initiatives",
      body: "1. Launch enterprise plan\n2. Expand to APAC\n3. Hire 12 engineers",
      backgroundColor: "#2E4053"
    }
  ]
})

// Response:
// {
//   deckId: "deck_abc123",
//   deckName: "Q4 Business Review",
//   isNewDeck: true,
//   totalSlideCount: 3,
//   canvas: { width: 1280, height: 720 },
//   slides: [
//     { slideId: "slide_001", slideNumber: 1,
//       layoutName: "Title Slide", elements: [...] },
//     { slideId: "slide_002", slideNumber: 2,
//       layoutName: "Title and Content", elements: [...] },
//     { slideId: "slide_003", slideNumber: 3,
//       layoutName: "Title and Content", elements: [...] }
//   ]
// }

Example — Add to Existing Deck

// Add slides to an existing deck (use deckId instead of name).
// Layout ids come from deck_get on that deck — omit layoutId for its default.
slide_bulk_create({
  deckId: "deck_abc123",
  slides: [
    {
      layoutId: "layout-Qc9Wb3Xn",
      title: "Next Steps",
      body: "- Finalize roadmap\n- Schedule kickoff\n- Assign owners"
    }
  ]
})

Which Approach Will My Assistant Use?

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

  • “Find my Q4 deck” deck_list to search by name
  • “What's in this presentation?” deck_get to get the full overview
  • “Create me a pitch deck about...” slide_bulk_create to build all slides at once
  • “Start a blank presentation” deck_create for an empty starting point
  • “Add 3 more slides to this deck” slide_bulk_create with the existing deck ID

Related