heydecks
Your agent writes the content.
What it can do
- List Slide Templates: List every available slide template with its field schema (key, label, type, optional max length, allowed values). Use this BEFORE creating slides so you know what content shape
- List Brands: List every brand in the current user's workspace.
- List Decks: List every deck visible to the current user (their workspace + decks they collaborate on).
What data it sees
Do you need an account
No: the server works without sign-in
Your agent writes the content. heydecks turns it into a real deck: on brand, shareable, and exportable to PDF and PPTX, all from one call.
Slide creator MCP and API
How to connect
How to connect heydecks to Claude
The server address to paste into Claude settings:
https://heydecks.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect heydecks to ChatGPT
The server address to paste into ChatGPT settings:
https://heydecks.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect heydecks to Cursor
The server address to paste into Cursor settings:
https://heydecks.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (34)
Raw names from tools/list. Only developers need these.
| list_slide_templates | List every available slide template with its field schema (key, label, type, optional max length, allowed values). Use this BEFORE creating slides so you know what content shape each template expects. Pass `verbose: true` to also receive the placeholder `defaults` for each slide (much larger payload). |
| list_brands | List every brand in the current user's workspace. |
| list_decks | List every deck visible to the current user (their workspace + decks they collaborate on). |
| get_deck | Fetch a full deck including every slide instance with its slide_type and content. |
| create_deck | Create a new empty deck (it ships with a title-cover and a CTA-close slide). Returns the created deck. Costs 100 credits, the same as building a deck on the dashboard or REST API; reading and editing the deck afterward is free. |
| append_slide | Add a slide to a deck. `slide_type` must come from list_slide_templates OR list_slide_types (custom blocks use `custom:<id>`). `content` must match the chosen template's field schema. By default the slide is appended at the end; pass `index` (0-based) or `after_slide_id` to place it elsewhere. Optional `notes` sets the slide's speaker notes. |
| add_slides | Add MANY slides to a deck in one call (the fastest way to build a deck you have already designed). `slides` is an ordered array of { slide_type, content, notes? }; each `slide_type` comes from list_slide_templates or list_slide_types (custom blocks use `custom:<id>`) and each `content` matches that template's field schema. By default the slides are appended at the end; pass `replace: true` to make this array the deck's COMPLETE slide list (this drops the placeholder cover/close that create_deck ships with, so include your own). |
| update_slide | Change an existing slide's content. Pass only the fields you want to change in `content`, they're merged on top of the current content. Optional `notes` sets the slide's speaker notes. |
| delete_slide | Remove a slide from a deck. |
| reorder_slides | Reorder a deck's slides. Pass `ordered_slide_ids` as the full set of slide ids in the new order. |
| update_deck | Update top-level deck metadata (title, slug, visibility, password, locale). Pass only the fields you want changed. |
| publish_deck | Make a deck publicly viewable at https://heydecks.com/d/<slug>. |
| unpublish_deck | Take a deck offline (revert it to draft). |
| delete_deck | Permanently delete a deck and all its slides. |
| get_brand | Fetch a single brand by id, including colors, typography, logos, locale, and tone. |
| create_brand | Create a new brand in the current workspace. By default it clones the active brand's tokens; pass `clone_from_brand_id` to seed from a specific brand. |
| update_brand | Patch a brand. Pass only the fields you want to change — colors / typography / logos / locale are deep-merged. |
| set_active_brand | Mark a brand as the workspace's active brand. New decks adopt its tokens by default. |
| delete_brand | Permanently delete a brand from the workspace. |
| extract_brand_from_url | Visit a public website with Cloudflare Browser Rendering, sample its colors / fonts / logos, and return an `ExtractedBrand` payload. Call create_brand or update_brand to persist the result. |
| list_images | List every hosted image URL referenced across the current workspace's decks. Useful for reusing previously-uploaded photos and logos. Inline `data:` URIs (embedded base64 blobs) are filtered out by default — pass `include_data_uris: true` to receive them as well (large payload). |
| list_slide_templates_saved | List the current workspace's *saved* slide templates (user-created reusable blocks). Distinct from list_slide_templates which returns the built-in catalog. |
| save_slide_template | Save a slide's content as a reusable template in the current workspace. `base_template_key` must match a built-in slide template; content must conform to that template's schema. |
| update_slide_template | Rename or update the content of a saved slide template. |
| delete_slide_template | Delete a saved slide template. |
| apply_slide_template | Append a previously-saved slide template to a deck. Equivalent to looking up the template, then calling append_slide with its content. |
| list_deck_versions | List the snapshot history for a deck — every save / publish / restore event with timestamp, author, and version number. |
| restore_deck_version | Roll a deck back to a prior snapshot. The current state is captured as a checkpoint first, so the restore is reversible. |
| list_slide_types | List every WORKSPACE-DEFINED custom slide type. Each entry has an id, name, description, the layout tree, the default content, and the derived list of field keys (for `content` shape on append_slide). Use `custom:<id>` as the slide_type on append_slide to insert one of these. |
| create_slide_type | Create a new custom slide type in the current workspace. Pass `layout` as the new tree shape (array of nodes — containers like `stack`/`row`/`grid` or leaves like `heading`/`paragraph`/`image`). Defaults seed the slide's initial content when added to a deck. |
| update_slide_type | Update an existing custom slide type. Pass only the fields you want changed. `layout` replaces the full tree; `defaults` replaces the full default content map. |
| delete_slide_type | Permanently delete a custom slide type. Decks that referenced it will display a fallback notice for that slide until edited. |
| send_test_email | Fire a sample invitation-style email to the given address. Used to preview the live email template; does not create any deck or collaborator row. |
| generate_image | Generate one or more AI images from a text prompt. Images are saved to your workspace image library and returned as public URLs you can drop into any deck image field. Costs 80 credits per image. |