Tool tree
gradeNot graded
get_deck_stateAnswer
Returns the full current state of the presentation deck: all slides in order, their layouts, the active slide, and the current theme. Use this when you need an overview of the WHOLE deck (e.g. how many slides exist, what order they're in, the current theme) — not as a routine first call before every action. If you only need one slide's regions, call get_slide_structure directly instead; calling both back to back is usually redundant since get_slide_structure alone is enough for editing a specific slide.
View tool JSON
{
"name": "get_deck_state",
"kind": "answer",
"impl": "imperative",
"description": "Returns the full current state of the presentation deck: all slides in order, their layouts, the active slide, and the current theme. Use this when you need an overview of the WHOLE deck (e.g. how many slides exist, what order they're in, the current theme) — not as a routine first call before every action. If you only need one slide's regions, call get_slide_structure directly instead; calling both back to back is usually redundant since get_slide_structure alone is enough for editing a specific slide.",
"inputSchema": {
"type": "object",
"properties": {}
}
}get_slide_structureAnswer
Returns one slide's layout name and the full list of its regions (id, name, type, and current content). You usually do NOT need to call this before writing to a region — all content tools accept a region's name directly (e.g. 'left_body', 'body', 'title'), which is stable and predictable per layout, so you can go straight to the tool for the content you want to add. Call this when you don't already know a slide's layout/region names, or want to check current content before overwriting it. If slideId is omitted, uses the currently active slide.
View tool JSON
{
"name": "get_slide_structure",
"kind": "answer",
"impl": "imperative",
"description": "Returns one slide's layout name and the full list of its regions (id, name, type, and current content). You usually do NOT need to call this before writing to a region — all content tools accept a region's name directly (e.g. 'left_body', 'body', 'title'), which is stable and predictable per layout, so you can go straight to the tool for the content you want to add. Call this when you don't already know a slide's layout/region names, or want to check current content before overwriting it. If slideId is omitted, uses the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to inspect. Defaults to the active slide if omitted."
}
}
}
}get_region_contentAnswer
Returns the current content and type of a single region on a slide. Use this to check what's already in a region before overwriting it, or to confirm a previous edit took effect. If slideId is omitted, uses the currently active slide.
View tool JSON
{
"name": "get_region_content",
"kind": "answer",
"impl": "imperative",
"description": "Returns the current content and type of a single region on a slide. Use this to check what's already in a region before overwriting it, or to confirm a previous edit took effect. If slideId is omitted, uses the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media')."
}
},
"required": [
"regionId"
]
}
}add_slideAction
Creates a new slide using the given layout (defaults to 'title+bullets' if omitted) and inserts it at the given position (defaults to the end of the deck). Returns the new slide's id. Call this when the user wants to add a new slide to the presentation.
View tool JSON
{
"name": "add_slide",
"kind": "act",
"impl": "imperative",
"description": "Creates a new slide using the given layout (defaults to 'title+bullets' if omitted) and inserts it at the given position (defaults to the end of the deck). Returns the new slide's id. Call this when the user wants to add a new slide to the presentation.",
"inputSchema": {
"type": "object",
"properties": {
"layout": {
"type": "string",
"description": "Layout id for the new slide",
"enum": [
"title-slide",
"title+bullets",
"two-column",
"section-header",
"media-split"
]
},
"position": {
"type": "number",
"description": "0-indexed position to insert at; defaults to the end"
}
}
}
}remove_slideSensitive Action
Permanently removes a slide from the deck. slideId is required (not defaulted to the active slide) since this is destructive — call it only when the deletion target is unambiguous, and this cannot be undone by the agent.
View tool JSON
{
"name": "remove_slide",
"kind": "transact",
"impl": "imperative",
"description": "Permanently removes a slide from the deck. slideId is required (not defaulted to the active slide) since this is destructive — call it only when the deletion target is unambiguous, and this cannot be undone by the agent.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to delete"
}
},
"required": [
"slideId"
]
}
}duplicate_slideAction
Creates a copy of an existing slide, including all its region content, and inserts it immediately after the original. Returns the new slide's id. Call this when the user wants to reuse a slide's structure/content as a starting point for a new one. If slideId is omitted, duplicates the currently active slide.
View tool JSON
{
"name": "duplicate_slide",
"kind": "act",
"impl": "imperative",
"description": "Creates a copy of an existing slide, including all its region content, and inserts it immediately after the original. Returns the new slide's id. Call this when the user wants to reuse a slide's structure/content as a starting point for a new one. If slideId is omitted, duplicates the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to duplicate. Defaults to the active slide if omitted."
}
}
}
}reorder_slidesAction
Moves a slide to a new position (0-indexed) in the deck's slide order. Call this when the user wants to reorder slides, e.g. 'move the agenda slide to the front.' If slideId is omitted, moves the currently active slide.
View tool JSON
{
"name": "reorder_slides",
"kind": "act",
"impl": "imperative",
"description": "Moves a slide to a new position (0-indexed) in the deck's slide order. Call this when the user wants to reorder slides, e.g. 'move the agenda slide to the front.' If slideId is omitted, moves the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to move. Defaults to the active slide if omitted."
},
"newPosition": {
"type": "number",
"description": "The 0-indexed position to move the slide to"
}
},
"required": [
"newPosition"
]
}
}set_slide_layoutAction
Changes a slide's layout to a different named layout, preserving content in any regions whose names match between the old and new layout (unmatched regions are dropped, new regions start empty). Call this when the user wants to restructure a slide, e.g. turn a single-column slide into a two-column one. If slideId is omitted, restructures the currently active slide.
View tool JSON
{
"name": "set_slide_layout",
"kind": "act",
"impl": "imperative",
"description": "Changes a slide's layout to a different named layout, preserving content in any regions whose names match between the old and new layout (unmatched regions are dropped, new regions start empty). Call this when the user wants to restructure a slide, e.g. turn a single-column slide into a two-column one. If slideId is omitted, restructures the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to restructure. Defaults to the active slide if omitted."
},
"layout": {
"type": "string",
"description": "The new layout id",
"enum": [
"title-slide",
"title+bullets",
"two-column",
"section-header",
"media-split"
]
}
},
"required": [
"layout"
]
}
}fill_text_regionAction
Sets or replaces the text content of a single text-type region. Call this to write or overwrite a specific named region (other than the title or main body, which have their own convenience tools). This automatically converts the region to a text type — you do NOT need to call set_region_type first, even if the region currently holds a different type. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "fill_text_region",
"kind": "act",
"impl": "imperative",
"description": "Sets or replaces the text content of a single text-type region. Call this to write or overwrite a specific named region (other than the title or main body, which have their own convenience tools). This automatically converts the region to a text type — you do NOT need to call set_region_type first, even if the region currently holds a different type. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"text": {
"type": "string",
"description": "The text to set"
}
},
"required": [
"regionId",
"text"
]
}
}set_bulletsAction
Sets a bullets-type region's list of points, replacing any existing bullets. If maxPoints is given, truncates to that many bullets. Call this to populate or replace a bulleted list region with short, scannable points — keep each bullet under ~12 words. This automatically converts the region to a bullets type — you do NOT need to call set_region_type first, even if the region currently holds a different type. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "set_bullets",
"kind": "act",
"impl": "imperative",
"description": "Sets a bullets-type region's list of points, replacing any existing bullets. If maxPoints is given, truncates to that many bullets. Call this to populate or replace a bulleted list region with short, scannable points — keep each bullet under ~12 words. This automatically converts the region to a bullets type — you do NOT need to call set_region_type first, even if the region currently holds a different type. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"bullets": {
"type": "array",
"items": {
"type": "string"
},
"description": "The bullet point strings, in order"
},
"maxPoints": {
"type": "number",
"description": "Optional cap on the number of bullets to keep"
}
},
"required": [
"regionId",
"bullets"
]
}
}set_region_typeAction
Changes what kind of content a region holds, clearing its content in the process, WITHOUT setting new content. You almost never need to call this before filling a region — fill_text_region, set_bullets, set_chart_data, and set_diagram_steps all automatically convert the region to the matching type themselves when you call them directly, so just call the tool for the content you actually want to add. Only use this tool if you specifically want to change a region's type and leave it empty (e.g. to prep it for someone else to fill in later). Note: 'image-placeholder' is a dead end — there is no tool that can set real image content, so only convert a region to that type if the user specifically wants an empty placeholder for a human to fill in later; prefer set_chart_data or set_diagram_steps if the user actually wants visual content now. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "set_region_type",
"kind": "act",
"impl": "imperative",
"description": "Changes what kind of content a region holds, clearing its content in the process, WITHOUT setting new content. You almost never need to call this before filling a region — fill_text_region, set_bullets, set_chart_data, and set_diagram_steps all automatically convert the region to the matching type themselves when you call them directly, so just call the tool for the content you actually want to add. Only use this tool if you specifically want to change a region's type and leave it empty (e.g. to prep it for someone else to fill in later). Note: 'image-placeholder' is a dead end — there is no tool that can set real image content, so only convert a region to that type if the user specifically wants an empty placeholder for a human to fill in later; prefer set_chart_data or set_diagram_steps if the user actually wants visual content now. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"type": {
"type": "string",
"description": "The new region type",
"enum": [
"text",
"bullets",
"chart",
"diagram",
"image-placeholder",
"style"
]
}
},
"required": [
"regionId",
"type"
]
}
}clear_regionAction
Empties a region's content while keeping the region itself (and its type) in place on the slide. Call this when the user wants a region blanked out without removing it from the layout. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "clear_region",
"kind": "act",
"impl": "imperative",
"description": "Empties a region's content while keeping the region itself (and its type) in place on the slide. Call this when the user wants a region blanked out without removing it from the layout. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
}
},
"required": [
"regionId"
]
}
}adjust_font_sizeAction
Nudges a region's font size up or down by one step from its current size (each step is roughly 10%, clamped to a sane range). Call this when the user asks to make text bigger/smaller on a specific region, or when a region's text looks cramped or too large. Content is auto-fit to its region as it's written, so this is for manual fine-tuning on top of that, not required for normal use. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "adjust_font_size",
"kind": "act",
"impl": "imperative",
"description": "Nudges a region's font size up or down by one step from its current size (each step is roughly 10%, clamped to a sane range). Call this when the user asks to make text bigger/smaller on a specific region, or when a region's text looks cramped or too large. Content is auto-fit to its region as it's written, so this is for manual fine-tuning on top of that, not required for normal use. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"direction": {
"type": "string",
"description": "Whether to increase or decrease the font size",
"enum": [
"increase",
"decrease"
]
}
},
"required": [
"regionId",
"direction"
]
}
}set_chart_dataAction
Sets a chart region's data as a list of {label, value} points, rendered as a real bar or pie chart. This automatically converts the region to a chart type and fills it in ONE call — do NOT call set_region_type first, that would only change the type and leave it empty. Replaces any existing chart data. Use this to visualize simple numeric comparisons (e.g. market share, survey results, feature usage) — not for photos or illustrations. Keep to at most 8 data points for a legible chart; extras beyond that are dropped. Pie charts read best with 5 or fewer points. If the user just wants the same data shown as a different chart style (e.g. 'make it a pie chart'), use set_chart_type instead — it keeps the existing numbers rather than requiring you to resend them. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "set_chart_data",
"kind": "act",
"impl": "imperative",
"description": "Sets a chart region's data as a list of {label, value} points, rendered as a real bar or pie chart. This automatically converts the region to a chart type and fills it in ONE call — do NOT call set_region_type first, that would only change the type and leave it empty. Replaces any existing chart data. Use this to visualize simple numeric comparisons (e.g. market share, survey results, feature usage) — not for photos or illustrations. Keep to at most 8 data points for a legible chart; extras beyond that are dropped. Pie charts read best with 5 or fewer points. If the user just wants the same data shown as a different chart style (e.g. 'make it a pie chart'), use set_chart_type instead — it keeps the existing numbers rather than requiring you to resend them. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"chartType": {
"type": "string",
"description": "Visual style of the chart",
"enum": [
"bar",
"pie"
]
},
"data": {
"type": "array",
"description": "The data points to chart, in order",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Category label for this point"
},
"value": {
"type": "number",
"description": "Numeric value for this point — relative proportions are what matter"
}
}
}
}
},
"required": [
"regionId",
"chartType",
"data"
]
}
}set_chart_typeAction
Switches an existing chart region between 'bar' and 'pie' style WITHOUT changing its data — use this instead of set_chart_data when the user just wants a different visual style for the same numbers (e.g. 'make that a pie chart instead'). The region must already be a chart with data set via set_chart_data; if it isn't, this fails and you should use set_chart_data instead to set both the type and the data together. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "set_chart_type",
"kind": "act",
"impl": "imperative",
"description": "Switches an existing chart region between 'bar' and 'pie' style WITHOUT changing its data — use this instead of set_chart_data when the user just wants a different visual style for the same numbers (e.g. 'make that a pie chart instead'). The region must already be a chart with data set via set_chart_data; if it isn't, this fails and you should use set_chart_data instead to set both the type and the data together. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"chartType": {
"type": "string",
"description": "The chart style to switch to",
"enum": [
"bar",
"pie"
]
}
},
"required": [
"regionId",
"chartType"
]
}
}set_diagram_stepsAction
Sets a diagram region's content as an ordered sequence of short step labels, rendered as a left-to-right flow of connected boxes. This automatically converts the region to a diagram type and fills it in ONE call — do NOT call set_region_type first, that would only change the type and leave it empty. Replaces any existing steps. Use this for simple process flows, roadmaps, or sequences (e.g. "Plan → Build → Test → Ship"). Keep to at most 6 steps, each a short label (~3-5 words); extras beyond that are dropped. If slideId is omitted, targets the currently active slide.
View tool JSON
{
"name": "set_diagram_steps",
"kind": "act",
"impl": "imperative",
"description": "Sets a diagram region's content as an ordered sequence of short step labels, rendered as a left-to-right flow of connected boxes. This automatically converts the region to a diagram type and fills it in ONE call — do NOT call set_region_type first, that would only change the type and leave it empty. Replaces any existing steps. Use this for simple process flows, roadmaps, or sequences (e.g. \"Plan → Build → Test → Ship\"). Keep to at most 6 steps, each a short label (~3-5 words); extras beyond that are dropped. If slideId is omitted, targets the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide the region belongs to. Defaults to the active slide if omitted."
},
"regionId": {
"type": "string",
"description": "The region's id (from get_slide_structure) OR its name directly (e.g. 'title', 'body', 'left_body', 'right_body', 'media') — names are stable per layout. Prefer just trying a likely name directly (including right after the active slide changes) rather than calling get_slide_structure defensively first: a wrong name fails with a clear list of that slide's actual region names, which is cheap to recover from and faster than checking every time."
},
"steps": {
"type": "array",
"items": {
"type": "string"
},
"description": "The step labels, in order"
}
},
"required": [
"regionId",
"steps"
]
}
}set_titleAction
Convenience tool that sets the text of a slide's title region directly, without needing to look up its regionId first. Call this whenever the user wants to set or change a slide's title. If slideId is omitted, edits the currently active slide.
View tool JSON
{
"name": "set_title",
"kind": "act",
"impl": "imperative",
"description": "Convenience tool that sets the text of a slide's title region directly, without needing to look up its regionId first. Call this whenever the user wants to set or change a slide's title. If slideId is omitted, edits the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to edit. Defaults to the active slide if omitted."
},
"title": {
"type": "string",
"description": "The new title text"
}
},
"required": [
"title"
]
}
}set_body_textAction
Convenience tool that sets the text of a slide's main body region directly, without needing to look up its regionId first. Use this for simple paragraph-style body content; use set_bullets instead if the content should be a bulleted list. If slideId is omitted, edits the currently active slide.
View tool JSON
{
"name": "set_body_text",
"kind": "act",
"impl": "imperative",
"description": "Convenience tool that sets the text of a slide's main body region directly, without needing to look up its regionId first. Use this for simple paragraph-style body content; use set_bullets instead if the content should be a bulleted list. If slideId is omitted, edits the currently active slide.",
"inputSchema": {
"type": "object",
"properties": {
"slideId": {
"type": "string",
"description": "The id of the slide to edit. Defaults to the active slide if omitted."
},
"text": {
"type": "string",
"description": "The new body text"
}
},
"required": [
"text"
]
}
}apply_themeAction
Applies a named theme (color palette and fonts) to the entire deck, affecting all slides. Call this when the user wants to change the overall look of the presentation, e.g. 'make it look more corporate' or 'switch to the dark theme.'
View tool JSON
{
"name": "apply_theme",
"kind": "act",
"impl": "imperative",
"description": "Applies a named theme (color palette and fonts) to the entire deck, affecting all slides. Call this when the user wants to change the overall look of the presentation, e.g. 'make it look more corporate' or 'switch to the dark theme.'",
"inputSchema": {
"type": "object",
"properties": {
"themeName": {
"type": "string",
"description": "The theme id to apply",
"enum": [
"midnight",
"daylight",
"sandstone",
"emerald"
]
}
},
"required": [
"themeName"
]
}
}