Skip to main content
Glama

Create or Inspect a Slide

create_slide

Create one PowerPoint slide (.pptx, native, editable) from a structured intent in ONE call: pick a form from the menu and put your content in the typed fields (placed on the slide as given), or pass a brief and let the server route it. Fields tagged (per-form) bind only where the form has that slot — ignored-with-warning elsewhere; see each form's binds in browse_catalog.

BLOCKED (not billed)? If an error has can_autofix:true, merge its patch into the args at patch_target. Unchanged retries repeat the block. New form: browse_catalog(type=schema) first.

FORM MENU: agenda_list: an ordered list of sections/topics or learning objectives to walk through bar_rank_chart: bars comparing magnitudes across categories calendar_grid: events on a real calendar - week planner (day x hour) or month grid with event chips (data.events) card_grid: several equal, unordered peer blocks (features, options, pillars, a concept's defined parts, rules/guidelines/common mistakes) case_story: one named story told as evidence, proven by measured results (data.results = figures) comparison_matrix: options x criteria grid: data.columns x data.rows cycle_flow: a closed loop of ordered stages where the last feeds the first (recurring process) data_table: a plain factual table of records by fields editorial_split: two side-by-side halves: contrast (before/after, problem/solution) or copy/numbered steps beside a picture (image_src) exercise_prompt: an exercise/practice/discussion prompt: instruction + hints; optional problem items with blank answer boxes funnel: a quantity narrowing through ordered stages gantt_plan: tasks as bars across named periods on a schedule grid gauge_score: one score on a dial against a scale hero_statement: a statement slide: covers (title/image-led/exec), from->to/thesis-quote transitions, statement/contact/next-steps closings; supporting points -> takeaway_stack, contacts -> data.contacts, next steps -> data.next_steps hub_spoke: one central element with several elements connected around it image_story: a picture shown WHOLE (uncropped) + prose and up to 4 labelled blocks beside it, or a 1-6 picture/placeholder gallery (data.images) kpi_metrics: a metrics dashboard: headline metric cards; data.sections (Highlights/Risks/Asks) makes it an exec summary / QBR snapshot layer_stack: stacked layers where higher sits on, and depends on, lower linear_flow: ordered process stages read left to right (or inputs to process to outputs) maturity_staircase: ascending levels climbing to a higher state nested_magnitude: nested containment - each level contains the next org_structure: a reporting hierarchy / org tree position_map: items placed by two axes - named 2x2 cells or scatter positions pyramid_hierarchy: a triangle of stacked tiers, foundation to apex ramp_curve: a continuous rising wedge split into phases - effort or value accumulating over time section_divider: a section-break: big section number + title; blocks = agenda progress chips (emphasis=primary = current) segment_wheel: a wheel of equal segments around a center - peer categories in the round (composition, not flow) status_dashboard: initiatives/workstreams tracked by status, owner, progress strategic_fork: one origin splitting into two mutually exclusive paths, one recommended swimlane_flow: actor/function lanes by phases, task cells, handoffs across lanes swot: the four-quadrant strengths / weaknesses / opportunities / threats grid system_flow_map: architecture/system components: panels with internals (edges optional) or nodes wired by directed arrows takeaway_stack: a title plus a few supporting points, each with one line of detail (executive summary, key findings); optional closing ask timeline_roadmap: milestones/phases laid out along a time axis trend_chart: one or more series plotted over time value_chain: support bands over primary activity columns flowing into a goal arrowhead (data.support = the bands) visual_showcase: one dominant screenshot/image with numbered callouts pointing into it waterfall_bridge: a start value bridged to an end value by plus/minus contributions

Exact per-form data shapes: browse_catalog(type=schema, family=) — the generated,always-current JSON Schema + a worked example. (List-shaped forms take blocks: [{"label","sub","detail":[str],"emphasis"}]; structured forms take typed data.)

Escape modes: mode=code (caller-supplied python-pptx in sandbox — use for forms the menu cannot express: calendars, custom diagrams); mode=status (poll a job, free). Image-led asks (photo covers, full-bleed visuals): hero_statement + image_prompt or image_src.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeNoPython code defining build(prs). Canvas 13.33×7.5", coords in inches. Pre-imported: Presentation, Inches, Pt, Emu, RGBColor, MSO_ANCHOR, PP_ALIGN. Helpers: add_text_box(slide, left, top, w, h, text, font_size=12, bold=False, color=None), add_box(slide, left, top, w, h, fill_color=None, line_color=None, corner_radius=0.05), add_icon, add_image (src = path or https://); theme_color(name) → RGBColor. add_widget(slide, name, x, y, w, h, params=|content=, theme=THEME) draws board-grade SSG widgets/charts (cards, waterfall, gantt, funnel…) — names via `browse_catalog(type=widgets)`. Use font_size=, not size=; use fill_color=, not fill=. When chrome is supplied, use `build(prs, slide)` — chrome is pre-rendered. Helper signatures: `browse_catalog(type=helpers)`.
dataNofamily-specific payload — see the documented shapes
dateNodate callout (per-form).
formNothe form menu pick (see description) — the routing field
modeNoDefault: structured intent / brief. safe = validate-then-render in ONE call (renders + bills only if faithful; else an unbilled invalid report with the fix — recommended, no dry_run round-trip). code = python-pptx escape. status = poll.
nameNo
waitNoAI-image slides block ~10-15s; `false` returns a job_id to poll, not block (mode=brief).
briefNoprose fallback / extra context for fills
notesNoSpeaker notes for the presenter; never drawn on the slide.
blocksNolist: [{"label","sub","detail":[str],"emphasis","icon":lucide-name,"metric":{value,label}}]
detailNoResponse verbosity. Default `compact`: status, form/variant, fidelity (verbatim|mixed|ai_completed), warnings[]/errors[] (only when present), urls, cost. `full` adds a debug object (engine internals, verify events, latency buckets).
job_idNoPrevious job ID (for mode=status, or mode=code patching)
metricNo
verifyNomode=code. Default `lint`: static geometry + content checks, no LLM. `lint+vlm` adds a VLM second look (~+3s); a blank render is then an unbilled error, not a billed warning. `off` skips checks.
cautionNoone-line risk / caveat callout (per-form).
contextNoone-line subtitle/standfirst
dry_runNoFree pre-commit check (intent or mode=code), cost:0, no PPTX: status + warnings/errors, plus fidelity_forecast (verbatim|mixed|ai_completed|would_reject) and which fields bind vs get authored. Fix errors, re-call with dry_run=false to render.
imageryNoCover/section-divider imagery: photo (default — curated stock photo, half-bleed), wash (abstract color wash), off (plain panel, no photo — only when asked). Content slides are never photo-decorated.
logo_idNoOptional brand logo (from upload_asset purpose=logo) drawn as chrome on content slides; covers/section breaks stay clean.
stylingNoTopical design on default themes (default on; the note names it): designed cover + a subject palette (from imagery_tag, or the brief). clean = neutral. Pins never take it.
subjectNocentral entity for forms that have one — hub label, org root, section #, fork origin, media label (per-form).
variantNopin a specific variant within the form (list them via browse_catalog). Unknown variant -> rejected (not billed) with the valid list; set allow_variant_fallback to render the family default instead.
headlineNothe assertion-style slide title
languageNoISO 639-1 (default en): furniture labels and authored fills follow it.
takeawayNooptional verdict band (per-form). Put the so-what in the headline; add only for a verdict the title can't carry — not every slide.
theme_idNoOptional theme id from browse_catalog(type=themes). Omit for Default (slideforge_standard).
directionNortl typesets AND mirrors the slide right-to-left (Arabic/Hebrew). Never inferred — pass it.
highlightNoone-line emphasis callout (per-form).
image_srcNohttps URL | asset:<id> for image-bearing forms
imagery_tagNoSubject/industry: steers library photos (covers, sections, picture slides) AND the topical palette. Omit = general; `education` = teaching.
min_font_ptNoBinding type floor for prose (exhibit furniture has its own). Type grows to meet it; content that can't fit is an unbilled min_font_not_met naming the size needed. Typical: 12.
source_noteNosource / footnote line (per-form).
force_renderNoOn completed_with_errors, pptx_url is null (broken slide). Set true to get it anyway. No cost/status effect.
image_promptNogenerate an image when no image_src
replacementsNoString replacements on loaded code [{old, new}] (for mode=code with job_id)
variant_policyNoRouted-variant maturity policy: production_safe = if the ROUTED variant is draft/beta, render the family's demo-safe sibling instead (warning names both). Never overrides an explicit variant=. Default best_semantic_match.
include_previewNoInline-preview PAYLOAD only (not execution). Default: default (768px). none omits the inline image and returns just the URLs — it does NOT change sync/async. Use `wait` to control execution.
quality_profileNoThresholds layout.presentation_ready is judged against (executive strictest). Measurement only — never blocks a render or changes cost.
allow_truncationNoMore items than the form holds blocks (it would drop your data); the response names the dropped count + a suggested_split. true renders the capacity subset (fidelity=verbatim_truncated). Default false.
form_descriptionNo
allow_fabricationNoBrief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate, not billed, rather than INVENT numbers. Send typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false.
allow_low_confidenceNoBrief routing only: by default a brief that doesn't match a form clearly returns status=needs_confirmation + candidates at cost:0 (no guessed render). Set true to render the top guess and bill it. Default false.
allow_variant_fallbackNoIf the pinned variant is unknown, render the form's default variant (with a warning) instead of rejecting. Default false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / allow_fabrication / description
      Previous value: -"Brief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate at $0 rather than INVENT numbers. Send typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false."New value: +"Brief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate, not billed, rather than INVENT numbers. Send typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false."
    • changedInput schema / properties / image_prompt / description
      Previous value: -"generate an image when no image_src (+$0.05)"New value: +"generate an image when no image_src"
    • changedInput schema / properties / min_font_pt / description
      Previous value: -"Binding type floor for prose (exhibit furniture has its own). Type grows to meet it; content that can't fit is a $0 min_font_not_met naming the size needed. Typical: 12."New value: +"Binding type floor for prose (exhibit furniture has its own). Type grows to meet it; content that can't fit is an unbilled min_font_not_met naming the size needed. Typical: 12."
    • changedInput schema / properties / mode / description
      Previous value: -"Default: structured intent / brief. safe = validate-then-render in ONE call (renders + bills only if faithful; else $0 invalid report with the fix — recommended, no dry_run round-trip). code = python-pptx escape. status = poll."New value: +"Default: structured intent / brief. safe = validate-then-render in ONE call (renders + bills only if faithful; else an unbilled invalid report with the fix — recommended, no dry_run round-trip). code = python-pptx escape. status = poll."
    • changedInput schema / properties / variant / description
      Previous value: -"pin a specific variant within the form (list them via browse_catalog). Unknown variant -> rejected ($0) with the valid list; set allow_variant_fallback to render the family default instead."New value: +"pin a specific variant within the form (list them via browse_catalog). Unknown variant -> rejected (not billed) with the valid list; set allow_variant_fallback to render the family default instead."
    • changedInput schema / properties / verify / description
      Previous value: -"mode=code. Default `lint`: static geometry + content checks, no LLM. `lint+vlm` adds a VLM second look (~+3s); a blank render is then a $0 error, not a billed warning. `off` skips checks."New value: +"mode=code. Default `lint`: static geometry + content checks, no LLM. `lint+vlm` adds a VLM second look (~+3s); a blank render is then an unbilled error, not a billed warning. `off` skips checks."
  2. Changed3 schema fields changed
    • changedInput schema / properties / language / description
      Previous value: -"Target language (default: en)"New value: +"ISO 639-1 (default en): furniture labels and authored fills follow it."
    • changedInput schema / properties / language / enum
      Previous value: -[
      -  "en",
      -  "de",
      -  "fr",
      -  "es",
      -  "it",
      -  "pt",
      -  "nl",
      -  "pl",
      -  "ru",
      -  "uk"
      -]New value: +[
      +  "bg",
      +  "ca",
      +  "cs",
      +  "da",
      +  "de",
      +  "el",
      +  "en",
      +  "es",
      +  "et",
      +  "fi",
      +  "fr",
      +  "gl",
      +  "hr",
      +  "hu",
      +  "id",
      +  "is",
      +  "it",
      +  "ja",
      +  "ko",
      +  "lt",
      +  "lv",
      +  "nl",
      +  "no",
      +  "pl",
      +  "pt",
      +  "ro",
      +  "ru",
      +  "sk",
      +  "sl",
      +  "sr",
      +  "sv",
      +  "tr",
      +  "uk",
      +  "vi",
      +  "zh"
      +]
    • changedInput schema / properties / verify / description
      Previous value: -"mode=code tier. Default `lint`: static geometry linter (overlap/off-canvas/zero-size) + composer content validators — no LLM. `lint+vlm` adds a VLM second-look (~+3s) and makes a blank/contentless render a $0 error, not a billed warning. `off` skips checks."New value: +"mode=code. Default `lint`: static geometry + content checks, no LLM. `lint+vlm` adds a VLM second look (~+3s); a blank render is then a $0 error, not a billed warning. `off` skips checks."
  3. Changed1 schema field changed
    • changedInput schema / properties / imagery_tag / description
      Previous value: -"Subject/industry: steers cover/section photos AND the topical palette. Omit = general; `education` = teaching."New value: +"Subject/industry: steers library photos (covers, sections, picture slides) AND the topical palette. Omit = general; `education` = teaching."
  4. Changed1 schema field changed
    • addedInput schema / properties / notes
      Added value: +{
      +  "description": "Speaker notes for the presenter; never drawn on the slide.",
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / imagery / description
      Previous value: -"Cover/section-divider imagery: photo (default — curated stock photo, half-bleed), wash (abstract color wash), off (typographic only). Content slides are never photo-decorated."New value: +"Cover/section-divider imagery: photo (default — curated stock photo, half-bleed), wash (abstract color wash), off (plain panel, no photo — only when asked). Content slides are never photo-decorated."
  6. Changed1 schema field changed
    • changedInput schema / properties / direction / description
      Previous value: -"rtl typesets the slide right-to-left (Arabic/Hebrew). Layout is not mirrored. Never inferred — pass it."New value: +"rtl typesets AND mirrors the slide right-to-left (Arabic/Hebrew). Never inferred — pass it."
  7. Changed4 schema fields changed
    • changedInput schema / properties / allow_fabrication / description
      Previous value: -"Brief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate at cost:0 rather than INVENT numbers/entities. Supply typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false."New value: +"Brief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate at $0 rather than INVENT numbers. Send typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false."
    • changedInput schema / properties / allow_truncation / description
      Previous value: -"Supplying MORE items than a form holds blocks (it would drop your data) — the response names the dropped count + a suggested_split. true renders the capacity subset (fidelity=verbatim_truncated, never verbatim). Default false."New value: +"More items than the form holds blocks (it would drop your data); the response names the dropped count + a suggested_split. true renders the capacity subset (fidelity=verbatim_truncated). Default false."
    • addedInput schema / properties / direction
      Added value: +{
      +  "description": "rtl typesets the slide right-to-left (Arabic/Hebrew). Layout is not mirrored. Never inferred — pass it.",
      +  "enum": [
      +    "ltr",
      +    "rtl"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / min_font_pt / description
      Previous value: -"Binding type floor for prose (exhibit furniture has its own). Type grows to meet it; content that can't fit is a $0 min_font_not_met naming the size needed — allow_truncation renders the fitting subset. Typical: 12."New value: +"Binding type floor for prose (exhibit furniture has its own). Type grows to meet it; content that can't fit is a $0 min_font_not_met naming the size needed. Typical: 12."
  8. Changed4 schema fields changed
    • changedInput schema / properties / allow_fabrication / description
      Previous value: -"Brief mode only: by default a bare brief on a DATA form (kpi/funnel/comparison/…) returns status=would_fabricate at cost:0 rather than INVENT the numbers/entities. Supply the data as typed fields to render verbatim, or set true to let the brief author them (fidelity=ai_completed). Default false."New value: +"Brief mode only: a bare brief on a DATA form (kpi/funnel/comparison/…) returns would_fabricate at cost:0 rather than INVENT numbers/entities. Supply typed fields for verbatim, or true to let the brief author them (fidelity=ai_completed). Default false."
    • changedInput schema / properties / allow_truncation / description
      Previous value: -"By default, supplying MORE items than a form holds is a blocking error (it would drop your data) — the response names the dropped count + a suggested_split. Set true to render the capacity subset anyway (fidelity=verbatim_truncated, never verbatim). Default false."New value: +"Supplying MORE items than a form holds blocks (it would drop your data) — the response names the dropped count + a suggested_split. true renders the capacity subset (fidelity=verbatim_truncated, never verbatim). Default false."
    • changedInput schema / properties / imagery_tag / description
      Previous value: -"Industry bucket for cover/section photos. Omit = general; `education` for classrooms."New value: +"Subject/industry: steers cover/section photos AND the topical palette. Omit = general; `education` = teaching."
    • changedInput schema / properties / styling / description
      Previous value: -"Subject-informed palette + designed cover on default themes (on by default; the design note names the choice). clean = neutral look. Pinned themes never take it."New value: +"Topical design on default themes (default on; the note names it): designed cover + a subject palette (from imagery_tag, or the brief). clean = neutral. Pins never take it."
  9. Changed1 schema field changed
    • changedInput schema / properties / imagery_tag / description
      Previous value: -"Industry bucket for cover/section photos. Omit for the general pool."New value: +"Industry bucket for cover/section photos. Omit = general; `education` for classrooms."
  10. Changed1 schema field changed
    • changedInput schema / properties / language / enum
      Previous value: -[
      -  "en",
      -  "de",
      -  "fr",
      -  "es",
      -  "it",
      -  "pt",
      -  "nl",
      -  "pl"
      -]New value: +[
      +  "en",
      +  "de",
      +  "fr",
      +  "es",
      +  "it",
      +  "pt",
      +  "nl",
      +  "pl",
      +  "ru",
      +  "uk"
      +]
  11. Changed1 schema field changed
    • changedInput schema / properties / verify / description
      Previous value: -"mode=code tier. Default `lint`: static geometry linter (overlap/off-canvas/zero-size) + composer content validators — no LLM. `lint+vlm` adds a VLM second-look (~+8s). `off` skips checks."New value: +"mode=code tier. Default `lint`: static geometry linter (overlap/off-canvas/zero-size) + composer content validators — no LLM. `lint+vlm` adds a VLM second-look (~+3s) and makes a blank/contentless render a $0 error, not a billed warning. `off` skips checks."
  12. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, the description discloses rich behavioral traits: billing occurs only on faithful render, autofix patches are available for blocked errors, dry_run and status are free, verify levels affect VLM checks, and AI-image slides can block or return a job_id. It also documents unbilled blocking for min_font_not_met, truncation, fabrication, and low-confidence routing.

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 long, but its size is justified by 43 parameters and 35 form options. It is front-loaded with the core one-call creation purpose, then organized into form menu, data-shape guidance, escape modes, and image-led usage. Every section appears to earn its place for an agent that must choose a form and mode correctly.

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

Completeness5/5

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

Given the tool's complexity and lack of an output schema, the description is complete enough: it covers creation modes, form selection, per-form schema lookup via browse_catalog, error recovery, billing behavior, and image handling. Return details are sufficiently described through the `detail`, `include_preview`, and status/job responses.

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

Parameters5/5

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

Although schema description coverage is high at 93%, the description supplies the full form menu that the `form` parameter depends on, plus binding rules like fields being ignored-with-warning outside their form. It also adds routing and policy semantics for mode, dry_run, wait, allow_fabrication, allow_low_confidence, and variant handling.

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: 'Create one PowerPoint slide (.pptx, native, editable) from a structured intent in ONE call.' It distinguishes this from deck-level siblings by scoping to a single slide and explains the two main input paths: a form menu or a brief. The extensive form menu further clarifies exactly what kind of slide output is being created.

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?

The description gives clear usage context for form vs. brief, mode=safe/code/status, dry_run, and when to call browse_catalog(type=schema) for new forms. It also explains when to use mode=code for forms the menu cannot express. However, it does not explicitly compare create_slide to sibling tools like edit_slide, plan_slide, or create_deck, so the sibling-selection guidance is incomplete.

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.