Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

SlideForge

REMOTE · API.SLIDEFORGE.DEV · 2 COMPONENTS · SCANNED OCT 12

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

0 this week 89 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security92
Transport & Reachability100
Schema Quality & AI Usability66
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 6102 tokens (~554/item across 11 items; 9 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage97
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 90% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
  • Supports UI / widget rendering.Pass
Install

How do I install the SlideForge MCP server?

SlideForge is a hosted endpoint at https://api.slideforge.dev/mcp/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.slideforge.dev

# add to Claude Code
claude mcp add --transport http dev-slideforge-slideforge 'https://api.slideforge.dev/mcp/'
// .cursor/mcp.json
{
  "mcpServers": {
    "dev-slideforge-slideforge": {
      "url": "https://api.slideforge.dev/mcp/"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "dev-slideforge-slideforge": {
      "type": "http",
      "url": "https://api.slideforge.dev/mcp/"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.dev-slideforge-slideforge]
url = "https://api.slideforge.dev/mcp/"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-slideforge-slideforge": {
      "type": "remote",
      "url": "https://api.slideforge.dev/mcp/",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add dev-slideforge-slideforge --url 'https://api.slideforge.dev/mcp/' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  dev-slideforge-slideforge:
    url: "https://api.slideforge.dev/mcp/"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "dev-slideforge-slideforge": {
      "Transport": "http",
      "Url": "https://api.slideforge.dev/mcp/"
    }
  }
}
# add to Vellum
assistant mcp add dev-slideforge-slideforge -t streamable-http -u 'https://api.slideforge.dev/mcp/'
// mcp.json
{
  "mcpServers": {
    "dev-slideforge-slideforge": {
      "type": "http",
      "url": "https://api.slideforge.dev/mcp/"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 12 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
  • 11 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
  • 10 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
  • 4 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
  • 3 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
  • 2 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
  • 1 Oct 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
    • Tool “manage_account” rewrote its description, which is the text the model reads security
    • Tool “translate_deck” rewrote its description, which is the text the model reads security
    • Tool “upload_asset” rewrote its description, which is the text the model reads security
    • Tool “create_slide” rewrote its description, which is the text the model reads security
    • Tool “create_deck” rewrote its description, which is the text the model reads security
    • Tool “edit_deck” is now declared destructive security
    • Tool “edit_slide” is now declared destructive security
    • “create_slide” reworded the description of “image_prompt” cosmetic
    • “create_slide” reworded the description of “min_font_pt” cosmetic
    • “create_slide” reworded the description of “mode” cosmetic
    • “create_slide” reworded the description of “variant” cosmetic
    • “create_slide” reworded the description of “verify” cosmetic
    • “manage_account” reworded the description of “action” cosmetic
    • “create_slide” reworded the description of “allow_fabrication” cosmetic
    • “manage_account” dropped the optional parameter “events” cosmetic
    • “manage_account” dropped the optional parameter “url” cosmetic
    • “manage_account” dropped the optional parameter “webhook_id” cosmetic
    • “manage_account” dropped the optional parameter “amount” cosmetic
  • 30 Sept 26 0
    • Resource “SlideForge Result Card” now points somewhere else: ui://slideforge/result-card/v19 → ui://slideforge/result-card/skybridge/v19 security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 12 Oct 2026 · Probed https://api.slideforge.dev/mcp/

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.slideforge.dev CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US 17 Jul 2026 17 Jan 2027 RSA 2048 SHA256-RSA 119f41a7e9cb3b9a3e647e9abf8afde
SANs: api.slideforge.dev
CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US 2 Nov 2017 2 Nov 2027 RSA 2048 SHA256-RSA d07782a133fc6f9a57296e131ffd179
CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US 1 Aug 2013 15 Jan 2038 RSA 2048 SHA256-RSA 33af1e6a711a9a0bb2864b11d09fae5

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.slideforge.dev. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
slideforge.dev. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://api.slideforge.dev/.well-known/oauth-protected-resource/mcp"

Bearer resource_metadata="https://api.slideforge.dev/.well-known/oauth-protected-resource/mcp"

Protected resource metadata

Document https://api.slideforge.dev/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://api.slideforge.dev/mcp
Authorisation server https://api.slideforge.dev

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.slideforge.dev/mcp/ Verified 200
http (plaintext) http://api.slideforge.dev/mcp/ HTTPS enforced 301 https://api.slideforge.dev/mcp/
MCP tools · 9 exposed · ~5,901 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
browse_catalog ~523

Browse the PowerPoint slide 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}).

NameTypeReqDescription
familystring––
limitinteger–Max results (with q= or family=).
namestring–Widget name (with type=widgets): returns the full contract + worked example + a rendered thumbnail.
offsetinteger–Pagination offset (with q= or family=).
prior_idstring––
qstring–Semantic search across all variants; returns ranked form/variant matches with scores.
sourcestring–Theme source filter (with type=themes). Default all (built-in + your saved).
theme_idstring–With type=themes: an uploaded theme's id -> its branded furniture layouts + fill schemas (render via create_slide(form=template_layout)).
topinteger–Max results (with type=themes).
typestring–Omit for the form overview (or family=/q= to drill in). schema (+family, optionally +variant=) = schema-first discovery: family only returns a compact variant chooser; family+variant returns that var…
variantstring––

No output schema declared.

No examples provided.

create_deck ~740

Create a complete PowerPoint presentation (.pptx): a whole multi-slide deck, native and editable, 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 (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. 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>).

NameTypeReqDescription
allow_partialboolean–IGNORED. A deck bills per rendered slide and always returns its pptx; slides that failed or rendered badly are free and named in repair_actions.
deck_idstring–Existing deck ID (for mode=fork, or mode=render to update)
directionstring–Deck-level writing direction, inherited by every slide (a slide-level direction wins) — set it once for an Arabic/Hebrew deck. Covers/dividers rendered on an UPLOADED brand template keep that templat…
dry_runboolean–Deck-level free pre-flight (cost:0, NO render/PPTX): returns a per-slide validation manifest [{i, form, fidelity_forecast, status, errors}] so you can fix bad slides before spending. A deck is one ar…
force_renderboolean–IGNORED (deck-level). pptx_url is always returned when at least one slide rendered, so there is nothing to force. Still meaningful on create_slide.
imagerystring–Deck-level imagery mode, inherited by every slide (a slide-level imagery wins). See create_slide.imagery.
imagery_tagstring–Deck-level subject declaration, inherited by every slide (a slide-level imagery_tag wins). Declare it once for a whole deck. See create_slide.imagery_tag.
job_idsarray–Slide job IDs to merge (for mode=assemble)
languagestring–ISO 639-1 (default en) for every slide: furniture labels and authored fills follow it.
logo_idstring–Optional brand logo (from upload_asset purpose=logo) applied as chrome to every content slide in the deck.
modestring–Default render. assemble/fork are free deck plumbing.
namestring––
slidesarray–each item is a create_slide intent (same form menu, typed fields, and data shapes as create_slide).
strict_policyobject–Optional CI-style gate for automated report pipelines. dry_run returns policy_result; render returns rejected/cost:0 if the policy fails.
stylingstring–Deck-level topical-design switch, inherited by every slide (a slide-level styling wins). See create_slide.styling.
theme_idstring––
titlestring–Deck title (PowerPoint metadata)

No output schema declared.

No examples provided.

create_slide ~2,642

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_sp…

NameTypeReqDescription
allow_fabricationboolean–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…
allow_low_confidenceboolean–Brief 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. De…
allow_truncationboolean–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 fals…
allow_variant_fallbackboolean–If the pinned variant is unknown, render the form's default variant (with a warning) instead of rejecting. Default false.
blocksarray–list: [{"label","sub","detail":[str],"emphasis","icon":lucide-name,"metric":{value,label}}]
briefstring–prose fallback / extra context for fills
cautionstring–one-line risk / caveat callout (per-form).
codestring–Python 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,…
contextstring–one-line subtitle/standfirst
dataobject–family-specific payload — see the documented shapes
datestring–date callout (per-form).
detailstring–Response 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,…
directionstring–rtl typesets AND mirrors the slide right-to-left (Arabic/Hebrew). Never inferred — pass it.
dry_runboolean–Free 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 er…
force_renderboolean–On completed_with_errors, pptx_url is null (broken slide). Set true to get it anyway. No cost/status effect.
formstring–the form menu pick (see description) — the routing field
form_descriptionstring––
headlinestring–the assertion-style slide title
highlightstring–one-line emphasis callout (per-form).
image_promptstring–generate an image when no image_src
image_srcstring–https URL | asset:<id> for image-bearing forms
imagerystring–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.
imagery_tagstring–Subject/industry: steers library photos (covers, sections, picture slides) AND the topical palette. Omit = general; `education` = teaching.
include_previewstring–Inline-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.
job_idstring–Previous job ID (for mode=status, or mode=code patching)
languagestring–ISO 639-1 (default en): furniture labels and authored fills follow it.
logo_idstring–Optional brand logo (from upload_asset purpose=logo) drawn as chrome on content slides; covers/section breaks stay clean.
metricobject––
min_font_ptnumber–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.
modestring–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…
namestring––
notesstring–Speaker notes for the presenter; never drawn on the slide.
quality_profilestring–Thresholds layout.presentation_ready is judged against (executive strictest). Measurement only — never blocks a render or changes cost.
replacementsarray–String replacements on loaded code [{old, new}] (for mode=code with job_id)
source_notestring–source / footnote line (per-form).
stylingstring–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.
subjectstring–central entity for forms that have one — hub label, org root, section #, fork origin, media label (per-form).
takeawaystring–optional 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_idstring–Optional theme id from browse_catalog(type=themes). Omit for Default (slideforge_standard).
variantstring–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.
variant_policystring–Routed-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=. Defaul…
verifystring–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.
waitstring–AI-image slides block ~10-15s; `false` returns a job_id to poll, not block (mode=brief).

No output schema declared.

No examples provided.

edit_deck ~102

Change one or more slides of a deck you already rendered, in place and free: only the patched slides re-render, the deck is re-merged and keeps its id and links. Never runs a model: a brief or a picture request is refused. Each edited slide's entry carries its full current spec as `intent`. Up to 20 edits per deck.

NameTypeReqDescription
job_idstringyesthe deck's job_id
slidesarrayyes–

No output schema declared.

No examples provided.

edit_slide ~162

Change a slide you already rendered, in place and free: the job keeps its id and links. Send the job_id and a patch of the fields to change. Never runs a model: a brief or a picture request is refused (make a new slide for those). The response carries the slide's full current spec as `intent`. Up to 20 edits per slide.

NameTypeReqDescription
job_idstringyesthe rendered slide's job_id
patchobjectyesthe slide fields to change (same fields as create_slide). A field left out keeps its value, a field sent as null is removed, a list replaces the whole list, `data` merges key by key. Send only `notes…

No output schema declared.

No examples provided.

manage_account ~654

SlideForge account for PowerPoint generation: balance, job history, feedback, 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), feedback_list (read your reports back: status + resolution), onboarding (capabilities overview), download_url (fresh short-TTL PPTX link for an owned job — when a result carries no inline URL), security_status (retention + access-model + deletion posture), delete_job (irreversible: job + versions + files) Action delete_asset irreversibly deletes a user-owned uploaded/generated image asset.

NameTypeReqDescription
actionstringyesOperation (required). feedback → report a defect or request against a render; pass job_id so it is actionable, and ask the user before filing. feedback_list → read YOUR OWN filed reports back, with `…
asset_idstring–Image asset ID (for action=delete_asset). Logos are content-addressed/shared and are not deleted by this action.
categorystring–Feedback category (action=feedback to file under it, action=feedback_list to filter by it). The first nine are slide-quality categories — pair them with job_id.
daysinteger–Lookback period (for action=usage, default 30)
detailboolean–For action=status only: default false masks identity fields; true returns full email/user_id diagnostics for the authenticated user.
include_childrenboolean–For action=jobs: include deck child slides (each carries parent_deck_id) so a deck's slides are discoverable by listing. Default false (parents only). Deck rows roll child cost up to the deck.
include_previewstring–Preview (for action=job)
job_idstring–Job ID (for action=job, action=download_url and action=delete_job)
limitinteger–Max rows (action=jobs default 10; action=feedback_list default 50, max 100)
messagestring–What went wrong or what you want, in the user's own words (for action=feedback).
severitystring–For action=feedback: `bug` = it is broken, `quality` = it rendered but reads poorly, `suggestion` = a request. Defaults to suggestion, so file real defects explicitly or they are triaged as wishes.
slugstring–Report slug (for action=reports — returns one report's full metadata; omit to list all).
statusstring–Filter — action=jobs: queued/generating/complete/failed; action=feedback_list: open/resolved

No output schema declared.

No examples provided.

plan_slide ~296

Plan a PowerPoint slide before rendering (free): 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 = jev (calibrated router, took the route at >=0.9) | classifier | structural_router (LLM-rescued). candidate_margin on the top candidate = literal gap between the two shown scores.

NameTypeReqDescription
briefstringyes–
escalateboolean–Default true: on a low-confidence route the plan runs the SAME LLM rescue create_slide would (small COGS on that tail only), so plan and create always agree. Set false for a classifier-only, fully fr…
topinteger––
variant_policystring–production_safe: if the top routed variant is draft/beta, the family's demo-safe sibling leads and route reports both best_semantic and best_production_safe.

No output schema declared.

No examples provided.

translate_deck ~224

Translate a PowerPoint (.pptx) deck preserving all formatting. Supports 35 languages (Latin, Cyrillic, Greek, Chinese, Japanese, Korean). Provide job_id (from a previous create_slide/create_deck), pptx_url, or pptx_base64.

NameTypeReqDescription
concise_modeboolean–Prefer shorter translations for tight text boxes
include_notesboolean–Translate speaker notes (default false)
include_previewstring–Wait+embed preview (default=wait)
include_tablesboolean–Translate table cells (default true)
job_idstring–Source: previous slide/deck job ID (preferred — no file transfer needed)
namestring–Job name
pptx_base64string–Source: Base64-encoded .pptx (max ~10 MB)
pptx_urlstring–Source: HTTPS URL to .pptx
source_languagestring–Source language or 'auto' (default auto)
target_languagestringyesTarget language (required)

No output schema declared.

No examples provided.

upload_asset ~558

Upload assets for PowerPoint (.pptx) generation: company template, logo, 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 • translate — PPTX to translate → deck job_id (requires `target_language`) • pdf — PDF → editable slides; pass `target_language` to also translate • recreate — image OF a slide → editable PPTX slide (honest annotate/preserve fallback). Use `image` to just place a picture Files >3MB (pdf/translate/theme) — and recreate on chat hosts — omit `data`: a drop-zone appears in the result card; bytes never pass through the agent.

NameTypeReqDescription
datastring–Base64-encoded file content. Required for logo/image/theme/translate. Optional for pdf — omit to get a drop-zone (recommended for files >3MB).
filenamestring–Original filename (for type detection)
job_idstring–For purpose=brand: keep the look a recreate rendered in — pass that recreate's job_id and its exact kit is saved as yours (no upload, no charge).
modelstring–Explicit gateway model ID. Overrides `quality`.
positionstring–Logo position: top-left / top-right / bottom-left / bottom-right
promptstring–Image description (required when purpose=generate_image)
purposestringyesAsset type (required). brand = a .pptx/.potx corporate template imported as your brand kit (theme is the same thing under its old name).
qualitystring–draft = Flux Schnell. balanced (default) = Gemini Flash Image. premium = GPT Image 2. Overridden by `model`.
sizestring–Image dimensions for generate_image (default 1024×1024)
target_languagestring–Required for purpose=translate. Optional for purpose=pdf — chains pdf→pptx→translate in one call.
theme_idstring–For purpose=recreate: the brand kit or built-in theme to render the recreated slide in — your kit slug, `slug@version`, or a built-in id. Omit to keep the look of the source image.
theme_namestring–Name for extracted theme (purpose=theme)

No output schema declared.

No examples provided.

Common questions

What is the SlideForge MCP server?

SlideForge is an MCP server listed in the public MCP registry as dev.slideforge/slideforge. Deterministic, fully editable PowerPoint from typed slide intents. 200+ layouts, brand templates. This page covers its hosted endpoint (https://api.slideforge.dev/mcp/).

Is the SlideForge MCP server safe to use?

SlideForge scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the SlideForge MCP server expose?

SlideForge exposes 9 tools: browse_catalog, plan_slide, create_slide, create_deck, edit_slide, and 4 more. Their descriptions and schemas cost roughly 5,901 tokens of context every time the server is loaded.

Does the SlideForge MCP server require authentication?

Yes. SlideForge asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the SlideForge MCP server still maintained?

SlideForge is still listed as active in the MCP registry. We last reached this channel on 12 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.