# SlideForge MCP server

Deterministic, fully editable PowerPoint from typed slide intents. 150+ layouts, brand templates.

## Links
- Registry page: https://www.getdrio.com/mcp/dev-slideforge-slideforge
- Repository: https://github.com/smartdatabrokers/slideforge-mcp

## Install
- Command: `uvx slideforge-mcp`
- Endpoint: https://api.slideforge.dev/mcp/
- Auth: Not captured

## Setup notes
- Package: Pypi slideforge-mcp v5.5.1
- Environment variable: SLIDEFORGE_API_KEY (secret)
- Remote endpoint: https://api.slideforge.dev/mcp/

## Tools
- browse_catalog (Browse SlideForge's Catalog (Unified Discovery)) - Browse the SSG catalog progressively. No args -> form overview (when-to-use, bound fields, variant counts). family=<form> -> variant one-liners. q=<text> -> ranked search. variant=/prior_id= -> example payload. type=schema + family -> a compact family-level variant chooser (not a sendable contract); type=schema + family + variant -> that variant's exact payload contract (JSON Schema, capacity, field mapping, examples). Free. Code path: type=widgets = the add_widget() catalog (name=<widget> for its contract + thumbnail); type=helpers = python-pptx helper signatures. type=themes + an uploaded theme_id -> that template's branded FURNITURE layouts (its own cover/agenda/divider/closing slides + fill schemas + previews) — render via create_slide(form=template_layout, theme_id, data={layout, fills}). Endpoint: https://api.slideforge.dev/mcp/
- plan_slide (Plan a Slide - Form + Variant Candidates) - Plan before rendering: send a short brief, get ranked candidates + a separated verdict — route (which slide: selected|needs_confirmation|ambiguous), input (can it render: ready|extractable_from_brief|needs_structured_data) and next_action. Free (one embedding). Then call create_slide with the chosen form(+variant). route.confidence: calibrated = measured P(route correct) with label high/medium/low cut on it; retrieval_score/retrieval_margin = the raw family-aggregated classifier values (not probabilities; margin can be negative when families contest); source = classifier | structural_router (LLM-rescued). candidate_margin on the top candidate = literal gap between the two shown scores. Endpoint: https://api.slideforge.dev/mcp/
- create_slide (Create or Inspect a Slide) - Create ONE slide 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 ($0)? 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 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)
  case_story: one named story told as evidence: challenge, action, measured result
  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 in contrast (before/after, problem/solution)
  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 (typographic/image-led/exec), from->to / thesis-quote transitions, contact or next-steps closings
  hub_spoke: one central element with several elements connected around it
  image_story: a picture shown WHOLE (uncropped) beside/above narrative text - photo story, narrative
  kpi_metrics: a board of 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: nodes connected by directed arrows that carry the message (data/requests move)
  takeaway_stack: a few bold conclusions, each with one line of support; 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=<form>) — 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, $0.05 — 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 (+$0.05) or image_src. Endpoint: https://api.slideforge.dev/mcp/
- create_deck (Create Multi-Slide Deck) - Create a WHOLE deck in one call: `slides` is a list of create_slide intents (same form menu + data shapes — see create_slide). Slides fill in parallel and merge into one themed PPTX with page numbers. Include furniture: a hero_statement cover, section_divider breaks, and a closing (hero_statement variant=contact_closing via blocks-free slots).

BLOCKED ($0)? 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.



Also: mode=assemble merges existing slide job_ids as-rendered (free; theme_id does NOT re-theme them — render with create_deck(slides=[…], theme_id=…) for a unified theme); mode=fork clones a deck (free).
Polling: deck_id == job_id — manage_account(action=job, job_id=<deck_id>). Endpoint: https://api.slideforge.dev/mcp/
- translate_deck (Translate PPTX) - Translate a PPTX deck preserving all formatting. $0.02/slide. Supports 32 languages (Latin, Cyrillic, Greek scripts). Provide job_id (from a previous create_slide/create_deck), pptx_url, or pptx_base64. Endpoint: https://api.slideforge.dev/mcp/
- upload_asset (Upload or Generate Asset) - Upload a logo, theme PPTX, image, or document — or AI-generate an image.

Purposes:
• logo — company logo for chrome (PNG/JPG/SVG, max 5MB) → logo_id
• image — image for the Image component (max 10MB) → asset_id
• theme — company template PPTX → theme_id; slides with it render NATIVELY on the template (masters/layouts/chrome)
• generate_image — AI-generate via `prompt` → asset_id ($0.05)
• translate — PPTX to translate → deck job_id ($0.02/slide; requires `target_language`)
• pdf — PDF → editable slides; pass `target_language` to also translate

For files >3MB on purpose=pdf, purpose=translate, or purpose=theme, omit `data` — a drop-zone appears in the result card and bytes never pass through the agent. Endpoint: https://api.slideforge.dev/mcp/
- manage_account (Account & History) - Account info, billing, job history, feedback, and data controls. All free.
Actions: status (balance+plan), usage (spend breakdown), jobs (history), job (single job detail — slide jobs include `quality_warnings[]`; deck jobs add `slides_completed/slides_failed/failed_slides[]`), feedback (submit), onboarding (capabilities overview), webhooks/webhook_add/webhook_remove/webhook_test (register a push endpoint so you don't poll async jobs to terminal), download_url (mint a fresh short-TTL single-use PPTX download link for an owned job — use when a result carries no inline URL), security_status (retention + access-model + deletion posture), delete_job (irreversibly delete a job + all versions + their files)
Action delete_asset irreversibly deletes a user-owned uploaded/generated image asset. Endpoint: https://api.slideforge.dev/mcp/

## Resources
- ui://slideforge/result-card/v19 - Inline preview card rendered when a SlideForge tool returns a slide or deck. Updates live via ui/notifications/tool-result. Supports direct file upload (drag-drop) and chained PDF → translate flows. MIME type: text/html;profile=mcp-app
- ui://slideforge/result-card/skybridge/v19 - Inline preview card rendered when a SlideForge tool returns a slide or deck. Updates live via ui/notifications/tool-result. Supports direct file upload (drag-drop) and chained PDF → translate flows. MIME type: text/html+skybridge

## Prompts
- create_presentation - Generate a multi-slide PowerPoint deck from a topic via structured slide intents (parallel deterministic render). Arguments: topic, slide_count, audience
- quick_slide - Generate a single client-ready slide: pick a form from the create_slide menu and pass typed fields, or just a brief. Arguments: description, style

## Metadata
- Owner: dev.slideforge
- Version: 5.5.1
- Runtime: Pypi
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jul 23, 2026
- Source: https://registry.modelcontextprotocol.io
