MCP
MCP Server
Connect Claude Desktop or Claude Code to heydecks. Build, edit, and publish decks in natural language.
The heydecks MCP server lets Claude (or any MCP-aware agent) create and edit decks in your workspace. The server lives at https://heydecks.com/mcp. Auth is a personal access token you generate in the dashboard. Every action runs as you — same workspace, same brands, same decks.
The endpoint speaks JSON-RPC 2.0 over HTTP. One POST per call (or a batched array). No SSE or long-polling.
#Mint a token
- Sign in — Go to heydecks.com and sign in.
- Create a token — Open Account settings → MCP access → New token. Name it (e.g. "Claude Desktop"), then copy the plaintext — it is shown once.
- Revoke when done — Revoke at any time from the same page. Revocation takes effect on the next call.
heydecks stores only sha256(token) plus an 8-character prefix for recognition. Tokens are scoped to your user — they never grant cross-workspace access.
#Connect Claude Desktop
Open Settings → Developer → Edit Config and paste:
claude_desktop_config.json
{
"mcpServers": {
"heydecks": {
"transport": {
"type": "http",
"url": "https://heydecks.com/mcp",
"headers": {
"Authorization": "Bearer mcp_…your_token…"
}
}
}
}
}Restart Claude Desktop. heydecks appears in the MCP servers panel.
#Connect Claude Code
claude mcp add --transport http heydecks https://heydecks.com/mcp \
--header "Authorization: Bearer <token>"Replace <token> with the plaintext from the dashboard.
#Tools
Start with generate_deck for one-shot creation. Use the fine-grained tools when you need explicit control over sections.
| Tool | Purpose |
|---|---|
generate_deck ★ start here | One-shot: turns a prompt (or pasted notes) into a complete deck. Returns the deck id and URL. Costs 10 credits. |
list_section_templates | Returns every available template with its content field schema. Call before building sections manually so you know what shape each template expects. |
list_brands | Lists brands in your workspace — palette, typography, active flag. |
list_decks | Lists your decks, slugs, status, and public URL (if published). |
get_deck | Returns a single deck with every section and its content. |
create_deck | Creates a new empty deck with a title cover and CTA close, ready to fill. |
append_section | Appends a section to a deck. template_key must come from list_section_templates; content must match that template's field schema. |
update_section | Replaces a section's content fields. Pass only the fields to change — merged on top of current content. |
delete_section | Removes a section permanently. |
reorder_sections | Reorders sections by passing the full list of section ids in the new order. |
update_deck | Updates deck title, slug, visibility, password, locale, or brandId. |
publish_deck | Makes the deck live at https://heydecks.com/d/<slug>. |
unpublish_deck | Reverts to draft. The public URL stops resolving. |
delete_deck | Permanently deletes a deck and all its sections. |
get_brand | Fetches a single brand's full tokens. |
create_brand | Creates a new brand (clones tokens from active brand by default). |
update_brand | Patches a brand's colors, typography, logos, tone. |
set_active_brand | Marks a brand as the workspace default for new decks. |
delete_brand | Permanently deletes a brand. |
extract_brand_from_url | Visits a public URL, samples its colors/fonts/logos, and returns an ExtractedBrand payload. Costs 5 credits. |
list_images | Lists every hosted image URL referenced across your workspace's decks. |
list_section_templates_saved | Lists your workspace's saved (reusable) section blocks. |
save_section_template | Saves a section's content as a reusable block. |
update_section_template | Renames or updates a saved block. |
delete_section_template | Deletes a saved block. |
apply_section_template | Appends a saved block to a deck. |
list_deck_versions | Snapshot history for a deck — every save/publish/restore event. |
restore_deck_version | Rolls a deck back to a prior snapshot (current state is checkpointed first). |
list_section_types | Workspace-defined custom section types with their layout and field schema. |
create_section_type | Creates a new custom section type. |
update_section_type | Updates a custom section type's layout or defaults. |
delete_section_type | Permanently deletes a custom section type. |
send_test_email | Fires the invitation email template to a given address — for previewing email designs. |
#Example prompts
Try these with Claude after connecting:
"Create a deck about our Q3 product launch — include stats, a roadmap, and a CTA."
"List my section templates, then create a deck called 'Q3 review' with a title, three stats, a process flow, and a CTA. Publish it when done."
"Open the deck
feature-tour, swap the testimonial for one from M. Müller, and republish."
For one-shot prompts, Claude calls generate_deck and returns a deck id and draft URL in a single step. For fine-grained control it calls list_section_templates first to learn the schemas, then creates, appends, and publishes in sequence.
#Security
- Tokens are scoped to one user. Cross-workspace access is not possible.
- The endpoint is bearer-only — Clerk browser sessions are ignored on
/mcp. - All write tools enforce workspace ownership: a token can't edit a deck in another workspace even if it knows the deck id.
last_used_atis updated on every call so you can spot a leaked token in the dashboard.- Revoking a token via Account → MCP access sets
revoked_at; the next call returns 401.
#Notes
generate_deckcalls the Anthropic API inline and may take 10–60 seconds. Use a generous timeout in your MCP client.- Image fields take a URL. The server doesn't upload binary images — pass an
https://URL and the section will fetch it at render time. - Slugs are unique per workspace. If a slug clashes, the server auto-suffixes (
-2,-3…). generate_deckcosts 10 credits.extract_brand_from_urlcosts 5. All other tools are free.