Getdeck

studio.dodraftPublished by dodraft.studiov0.1.2Updated Nov 5, 2026

250+ finished slide layouts and 40+ themes your agent can search, fetch and build a deck from

Overview

AI-generated overview

Getdeck lets an assistant search finished slide layouts and themes, fill their text slots, and render or export presentation decks as HTML or PowerPoint.

What you can do
  • Search and inspect the layout and theme catalogs, including the user's own saved themes
  • Fetch a single layout or theme in full, plus a starter kit for assembling several slides into one file
  • Compose a deck and get a preview link, or validate slot text against a layout before rendering
  • Render one slide into a finished, self-contained HTML document
  • Export a deck to a downloadable .pptx file
  • Manage saved templates, slide objects and media, and read team review requests and pin comments
When to use it
Useful when the user wants a pitch, sales, investor or similar presentation built from ready-made layouts rather than designed from scratch, and wants it delivered as HTML or PowerPoint. Also fits teams that keep reusable templates and review feedback in Getdeck.
Requirements
Remote endpoint at getdeck.co over streamable HTTP. A bearer API key is required in the Authorization header, issued from the user's account page after signing in. Some tools (suggest_deck, save_template, update_template, add_objects, update_objects, remove_objects, and template export) require a Pro account.
Before you install
The API key in the Authorization header grants access to the user's account, templates, media library and team data, so keep it private. Several tools write to the account: saving and updating templates, adding, changing or removing slide objects, and exporting files. Template and object changes are limited by plan and slide caps, and deletions of slides or templates must be done on the web.

Installation

In SourceWeft

  1. Open Getdeck in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/studio.dodraft%2Fgetdeck/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "getdeck": {
      "type": "http",
      "url": "https://getdeck.co/api/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

Tools

19

list_layouts

List layouts

Search or filter the layout catalog to find a specific layout. Returns metadata only, no HTML. Each entry has position (opener/middle/closer: its role in a deck), when_to_use and when_not_to_use: read them to check the layout fits the content before choosing it. Filter by position to fill a slot of the story, e.g. position "closer" for the last slide. Also the tool for "what is new", "any new layouts?", "what got added since last month" - pass `since` and it returns only what landed after that date. If the user asked for a whole deck rather than one slide, call suggest_deck first instead of this.

Parameterslanglimitquerysincecategoryposition

list_themes

List themes

Search or filter the theme catalog. Returns metadata and key colors only, not the full CSS. With an API key, the user's own saved themes (My Themes, id "custom:...") come last with custom: true; their ids work anywhere a theme id does.

Parametersmoodscheme

get_layout

Get layout

Return one layout as a ready-to-use, self-contained document: HTML, theme CSS, and its slot definitions. Call this once the user knows which layout they want, or with ids returned by suggest_deck.

Parametersidrequiredlangtheme_id

get_theme

Get theme

Return one theme in full: its complete CSS and design tokens.

Parametersidrequired

get_starter_kit

Get starter kit

Call this when joining several fetched layouts into one deck file. Requests like "merge these into one file", "bundle it as a deck", or "make it one HTML" mean this tool. Returns the base CSS, assembly rules, spacing tokens, and a viewport snippet for standalone viewing.

Takes no parameters.

suggest_deck

Suggest deck

Compose a deck and return a preview link the user can open in the browser right away. The user sees what the finished deck looks like without a single file being generated. Use this for requests like "make me a pitch deck", "I need a sales deck", "10 slides for an investor update", "put together a product overview", or "show me a deck outline" - anything where the user has a topic but has not picked layouts yet. ALSO use it when the user already has layouts in hand - "이 레이아웃들 모아서 프리뷰 만들어줘", "combine these layouts into a preview", "추천 프리뷰 만들어줘", "show these together as a deck" - pass them as layout_ids and it returns ONE deck preview link for the whole set. Never answer that kind of request with a list of individual layout links: one deck preview is the deliverable. Returns one theme + a slide order + the preview link, plus a `clarify` question to put to the user so the composition and theme are their call, not a guess. Always pass the preview link through to the user verbatim, ask clarify.question with its options, and wait for the answer - then call this tool again with deck_id / theme_id as clarify.answer_with says. Do not start generating files while a clarify question is unanswered. Once it is settled, fetch each layout id with get_layout, then call get_starter_kit to join them into one deck.

Parameterstonedeck_idpurposerequiredtheme_idlayout_idsslide_count

render_slide

Render slide

Fill one layout with your text and get back a finished, self-contained HTML document (theme, base and contract CSS inlined) that renders correctly when opened. Use it instead of get_layout when you already know the text: you do not assemble CSS or edit the markup yourself. Input: layout_id, optional theme_id (use the same one for every slide of a deck), slots, lang. Returns { layout_id, theme_id, html, warnings[], ok }. warnings[] lists missing required slots, text over max_chars, unknown slot ids and sample copy left behind, each with a fix; read them and call again after correcting, do not hand the user a slide that has errors. To validate without rendering use check_slots.

Parameterslangslotsrequiredtheme_idlayout_idrequired

check_slots

Check slots

Validate slot text against a layout before rendering. Nothing is rendered and no CSS is returned, so it is cheap: run it on every slide you wrote, fix what it reports, then call render_slide. Input: layout_id and slots (slot id to text), the same as render_slide. Returns { layout_id, ok, error_count, warning_count, issues[] }. Each issue has slot, code (unknown_slot, missing_required, empty_required, too_long, not_filled, blanked), severity ("error" must be fixed, "warning" is a quality note) and a one-line fix. ok is true when there are no errors.

Parametersslotsrequiredlayout_idrequired

export_pptx

Export PPTX

Turn a deck into a downloadable .pptx file. Requests like "make it a PowerPoint", "PPT로 뽑아줘", or "export this deck" mean this tool. Takes the layout ids and the text for each slot, and returns a signed download link. Coordinates come from our measurements, so the file matches what the gallery shows, but the boxes are fixed, so text longer than slots[].max_chars will be clipped.

Parametersthemeslidesembed_fontstemplate_id

save_template

Save template

Save a deck as a named template in the user's My Templates so it can be reused later. Requires a Pro account; without one the call fails and nothing is saved. Use it after you have built a deck the user wants to keep, for example from suggest_deck. Input: name, optional theme_id (a catalog theme id or custom:<uuid>), and slides as [{layout, slots}], the same shape export_pptx takes. A template holds 1 to 25 slides. Returns template_id, url (the template's page), slide_count, version (use it as expected_version in update_template), overflow[] (slots whose text is longer than max_chars) and unknown_layouts[]. Pass owner "team" to save it to the user's team instead of their own templates. Deleting is not available here, only on the web. Errors: pro_required, slide_limit, template_limit (the account already has the most templates it can hold), unknown_theme, invalid_input.

Parametersnamerequiredownerslidesrequiredtheme_id

list_templates

List templates

List the templates the user saved in My Templates, and those of the team they belong to: id, name, owner ("personal" or "team"), slide_count, theme_id, source, updated_at and version. Team templates also have created_by, review_state and unresolved_feedback (pin comments waiting). Use it to find a template the user refers to, and to read slide_count before appending with update_template. Needs an API key; works on any plan.

Takes no parameters.

get_template

Get template

Return one saved template: name, theme_id and slides as [{id, layout, slots, objects, overrides?}], plus each slide's slot definitions with max_chars. Use it to fill the same structure with new text, then save with update_template or export with export_pptx(template_id), both of which need Pro. To place or change only the objects of one slide, use add_objects, update_objects and remove_objects. Teammates' team templates open here too; those also return new_feedback (open pin comments). Needs an API key; reading works on any plan.

Parametersidrequired

update_template

Update template

Change a template the user already saved. Requires a Pro account; without one the call fails and nothing is changed. Pass the template id and any of: name, theme_id, slides (replaces all slides), or append_slides (adds slides to the end). A template holds at most 25 slides. If the result would be more than 25, nothing is changed and the response is a slide_limit error that includes how many slides still fit. Call list_templates first to read slide_count when you plan to append. The response has the same fields as save_template. Deleting is not available here, only on the web. Errors: pro_required, not_found, slide_limit, conflict (the template changed since expected_version, or kept changing during an append; nothing was saved), unknown_theme, invalid_input.

Parametersidrequirednameslidestheme_idappend_slidesexpected_version

list_media

List images

List the images the user uploaded to their media library on the web: id, name, width, height, aspect_ratio (width/height), bytes, mime and created_at, newest first, plus used_bytes. Pass an id to add_objects to place the picture on a slide. You cannot upload an image or fetch one from a web address; if the picture you need is missing, ask the user to upload it to their media library on the web. Pass scope "team" to list the team library instead (images every team member can use in team templates). Needs an API key; works on any plan.

Parametersscope

add_objects

Add objects

Add text boxes and images on top of one slide of a saved template, up to 50 per call and 50 per slide. Requires a Pro account. Use this instead of update_template to place objects: it never touches slots, other slides or other objects. Each item is {type:"text", text, ...} or {type:"image", asset, ...}; position and size are optional (a text box lands near the middle, an image is centered and fitted). Coordinates are pixels on a 1920x1080 slide and are kept inside it. Colors are theme tokens, not hex. Images come only from list_media ids. Set behind:true to put an object under the layout's own title and text (a background picture behind the default title); it is hidden wherever a layout card or panel has a solid fill. All items are added or none. Returns the slide's objects with their ids and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.

Parametersobjectsrequiredslide_idrequiredtemplate_idrequiredexpected_version

update_objects

Update objects

Change objects already on a slide, by id: position, size, rotation, text, text style, the image's alt text or picture, stacking order, and behind (true sends it behind the layout's own elements, false brings it back in front). Requires a Pro account. Send only the fields to change; the style is merged. An image keeps its proportions (send w alone). Up to 50 changes per call, all applied or none. Read ids and the current version with get_template. Returns the slide's objects and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.

Parameterschangesrequiredslide_idrequiredtemplate_idrequiredexpected_version

remove_objects

Remove objects

Remove objects from a slide by id. Requires a Pro account. The slide, its slots and the other objects stay. Only objects can be removed here; slides and templates are deleted on the web. If any id is not on the slide, nothing is removed. Returns the objects that remain and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.

Parametersidsrequiredslide_idrequiredtemplate_idrequiredexpected_version

list_pending_reviews

List pending reviews

List the review requests ("confirm" requests) in the user's team that are waiting on them: templates whose review is requested or needs a new look because the slides changed after an approval, where the user was picked as a reviewer or has not decided yet. Their own requests are left out. Each item has template_id, name, url, state, version, message, requested_by, requested_at, assigned_to_me and unresolved_feedback. Read the notes on a template with get_template_feedback. Deciding a review (approve or send back) is only possible on the web, so ask the user to do it there. Needs an API key; works on any plan. An account without a team gets an empty list.

Takes no parameters.

get_template_feedback

Get template feedback

Read the pin comments teammates left on a team template. By default only unresolved ones on slides the template still has; pass include_resolved to get every thread. Each thread has the comment id, slide_id and slide_number (null if the slide was deleted), slot (the text slot under the pin, if any), body, author, resolved and replies[]. Use slide_id to match a thread to the slide in get_template, then fix the slide with update_template (keep the slide ids). Resolving a thread is done on the web. Only for templates that belong to the user's team: a personal template answers not_team_template, a template they cannot use not_found. Needs an API key; works on any plan.

Parametersidrequiredinclude_resolved

Version history

3
  1. v0.1.2LatestNov 5, 2026
  2. v0.1.1Sep 23, 2026
  3. v0.1.0Sep 16, 2026

Score

83% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.