SlideForge
Server Details
Deterministic, fully editable PowerPoint from typed slide intents. 150+ layouts, brand templates.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- smartdatabrokers/slideforge-mcp
- GitHub Stars
- 4
- Server Listing
- Slideforge
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Score is being calculated. Check back soon.
Available Tools
7 toolsbrowse_catalogBrowse SlideForge's Catalog (Unified Discovery)Read-onlyIdempotentInspect
Browse the SSG catalog progressively. No args -> form overview (when-to-use, bound fields, variant counts). family= -> variant one-liners. q= -> 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= 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}).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Semantic search across all variants; returns ranked form/variant matches with scores. | |
| top | No | Max results (with type=themes). | |
| name | No | Widget name (with type=widgets): returns the full contract + worked example + a rendered thumbnail. | |
| type | No | 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 variant's exact machine-readable payload contract (JSON Schema for data, capacity limits, intent-field mapping, examples). widgets = the add_widget() catalog for mode=code (name=<widget> for its contract). helpers = python-pptx helper signatures. themes = list themes (built-in + your saved); Default appears first and can be omitted, or use any returned id as theme_id. | |
| limit | No | Max results (with q= or family=). | |
| family | No | ||
| offset | No | Pagination offset (with q= or family=). | |
| source | No | Theme source filter (with type=themes). Default all (built-in + your saved). | |
| variant | No | ||
| prior_id | No |
create_deckCreate Multi-Slide DeckInspect
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).
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 — create_slide(mode=status, job_id=).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Default render. assemble/fork are free deck plumbing. | |
| name | No | ||
| title | No | Deck title (PowerPoint metadata) | |
| slides | No | each item is a create_slide intent (same form menu, typed fields, and data shapes as create_slide). | |
| deck_id | No | Existing deck ID (for mode=fork, or mode=render to update) | |
| dry_run | No | 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 artifact, so validation is all-or-nothing — put dry_run here, not on individual slides. Resend without dry_run to render. | |
| job_ids | No | Slide job IDs to merge (for mode=assemble) | |
| logo_id | No | Optional brand logo (from upload_asset purpose=logo) applied as chrome to every content slide in the deck. | |
| styling | No | Deck-level topical-design switch, inherited by every slide (a slide-level styling wins). See create_slide.styling. | |
| language | No | Target language | |
| theme_id | No | ||
| force_render | No | If any slide is completed_with_errors, deck pptx_url is null. Set true to get it anyway; complete slides stay downloadable via their per-slide job_id either way. No cost/status effect. | |
| allow_partial | No | Non-regret default: if any slide fails, the deck is NOT billed (cost:0) and pptx withheld — the response carries repair_actions (assemble the completed children, free). Set true to render + bill the completed slides and get the partial deck. Default false. | |
| strict_policy | No | Optional CI-style gate for automated report pipelines. dry_run returns policy_result; render returns rejected/cost:0 if the policy fails. |
create_slideCreate or Inspect a SlideInspect
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.
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 - a week planner (day columns x hour axis) or a month grid with release/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: a cover (typographic/image-led/exec-metadata), a from->to or thesis-quote transition, or a contact or next-steps closing hub_spoke: one central element with several elements connected around it kpi_metrics: a board of headline metric cards; add data.sections (Highlights/Risks/Asks) for a one-slide exec summary / board update / 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 slide: big section number + title; blocks = agenda progress chips (emphasis=primary marks the current section) 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 (how value is created; 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, $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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | 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, 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)`. | |
| data | No | family-specific payload — see the documented shapes | |
| date | No | date callout (per-form). | |
| form | No | the form menu pick (see description) — the routing field | |
| mode | No | 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. | |
| name | No | ||
| wait | No | AI-image slides block ~10-15s; `false` returns a job_id to poll, not block (mode=brief). | |
| brief | No | prose fallback / extra context for fills | |
| blocks | No | list: [{"label","sub","detail":[str],"emphasis","icon":lucide-name,"metric":{value,label}}] | |
| detail | No | 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, verify events, latency buckets). | |
| job_id | No | Previous job ID (for mode=status, or mode=code patching) | |
| metric | No | ||
| verify | No | 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. | |
| caution | No | one-line risk / caveat callout (per-form). | |
| context | No | one-line subtitle/standfirst | |
| dry_run | No | 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 errors, re-call with dry_run=false to render. | |
| imagery | No | Cover/section-divider imagery: photo (default — curated stock photo, half-bleed), wash (abstract color wash), off (typographic only). Content slides are never photo-decorated. | |
| logo_id | No | Optional brand logo (from upload_asset purpose=logo) drawn as chrome on content slides; covers/section breaks stay clean. | |
| styling | No | 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. | |
| subject | No | central entity for forms that have one — hub label, org root, section #, fork origin, media label (per-form). | |
| variant | No | 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. | |
| headline | No | the assertion-style slide title | |
| language | No | Target language (default: en) | |
| takeaway | No | 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_id | No | Optional theme id from browse_catalog(type=themes). Omit for Default (slideforge_standard). | |
| highlight | No | one-line emphasis callout (per-form). | |
| image_src | No | https URL | asset:<id> for image-bearing forms | |
| imagery_tag | No | Industry bucket for cover/section photos. Omit for the general pool. | |
| min_font_pt | No | 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. | |
| source_note | No | source / footnote line (per-form). | |
| force_render | No | On completed_with_errors, pptx_url is null (broken slide). Set true to get it anyway. No cost/status effect. | |
| image_prompt | No | generate an image when no image_src (+$0.05) | |
| replacements | No | String replacements on loaded code [{old, new}] (for mode=code with job_id) | |
| variant_policy | No | 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=. Default best_semantic_match. | |
| include_preview | No | 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. | |
| quality_profile | No | Thresholds layout.presentation_ready is judged against (executive strictest). Measurement only — never blocks a render or changes cost. | |
| allow_truncation | No | 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. | |
| form_description | No | ||
| allow_fabrication | No | 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. | |
| allow_low_confidence | No | 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. Default false. | |
| allow_variant_fallback | No | If the pinned variant is unknown, render the form's default variant (with a warning) instead of rejecting. Default false. |
manage_accountAccount & HistoryDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | HTTPS endpoint to receive events (for action=webhook_add). Must be public HTTPS (private/loopback rejected). | |
| days | No | Lookback period (for action=usage, default 30) | |
| slug | No | Report slug (for action=reports — returns one report's full metadata; omit to list all). | |
| limit | No | Max jobs (for action=jobs, default 10) | |
| action | Yes | Operation (required). reports → list report types; webhook_add registers a push endpoint instead of polling — see the url/events props. delete_job is irreversible. delete_asset is irreversible for user-owned image assets. | |
| detail | No | For action=status only: default false masks identity fields; true returns full email/user_id diagnostics for the authenticated user. | |
| events | No | Event types to subscribe to (for action=webhook_add; default all): job.completed, job.failed, deck.completed, deck.partial, deck.failed. | |
| job_id | No | Job ID (for action=job, action=download_url and action=delete_job) | |
| status | No | Filter (for action=jobs): queued/generating/complete/failed | |
| message | No | Feedback text (for action=feedback) | |
| asset_id | No | Image asset ID (for action=delete_asset). Logos are content-addressed/shared and are not deleted by this action. | |
| category | No | Feedback category (for action=feedback): bug/feature_request/quality/general | |
| webhook_id | No | Webhook subscription id (for action=webhook_remove / webhook_test). | |
| include_preview | No | Preview (for action=job) | |
| include_children | No | 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. |
plan_slidePlan a Slide - Form + Variant CandidatesRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| brief | Yes | ||
| escalate | No | 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 free plan (response then flags will_escalate + create_slide_behavior). | |
| variant_policy | No | 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. |
translate_deckTranslate PPTXInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Job name | |
| job_id | No | Source: previous slide/deck job ID (preferred — no file transfer needed) | |
| pptx_url | No | Source: HTTPS URL to .pptx | |
| pptx_base64 | No | Source: Base64-encoded .pptx (max ~10 MB) | |
| concise_mode | No | Prefer shorter translations for tight text boxes | |
| include_notes | No | Translate speaker notes (default false) | |
| include_tables | No | Translate table cells (default true) | |
| include_preview | No | Wait+embed preview (default=wait) | |
| source_language | No | Source language or 'auto' (default auto) | |
| target_language | Yes | Target language (required) |
upload_assetUpload or Generate AssetInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Base64-encoded file content. Required for logo/image/theme/translate. Optional for pdf — omit to get a drop-zone (recommended for files >3MB). | |
| size | No | Image dimensions for generate_image (default 1024×1024) | |
| model | No | Explicit gateway model ID. Overrides `quality`. | |
| prompt | No | Image description (required when purpose=generate_image) | |
| purpose | Yes | Asset type (required) | |
| quality | No | draft = Flux Schnell. balanced (default) = Gemini Flash Image. premium = Imagen 4 Fast. Overridden by `model`. | |
| filename | No | Original filename (for type detection) | |
| position | No | Logo position: top-left / top-right / bottom-left / bottom-right | |
| theme_name | No | Name for extracted theme (purpose=theme) | |
| target_language | No | Required for purpose=translate. Optional for purpose=pdf — chains pdf→pptx→translate in one call. |
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.