generate_slide_deck
Convert Markdown content into PDF presentation slides using the Deckrun format, generating shareable slide decks with up to 10 slides.
Instructions
Convert Deckrun Markdown into a PDF slide deck. Call get_slide_format first to learn the correct Markdown format. Then call this tool with the completed Markdown. Returns: url (public PDF, 90-day expiry), slug, slides (count), warnings (non-fatal notices to self-correct), schema_version. Limits: max 10 slides, 50 KB Markdown. Slides separated by --- on its own line.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | Complete slide deck in Deckrun Markdown format. Must start with a title slide using <!-- <title-slide /> -->. |
Implementation Reference
- deckrun_mcp_http.py:354-373 (handler)The actual implementation of the _generate_slide_deck tool handler.
async def _generate_slide_deck(markdown: str) -> list[types.TextContent]: if not markdown.strip(): return [types.TextContent(type="text", text='{"error": "markdown is empty"}')] payload: dict = {"markdown": markdown, "schema_version": SCHEMA_VERSION} if PAID: payload["output_types"] = ["pdf"] try: resp = requests.post(_GENERATE_URL, json=payload, headers=_headers(), timeout=120) except requests.RequestException as exc: return [types.TextContent(type="text", text=json.dumps({"error": str(exc)}))] if resp.status_code == 200: data = resp.json() if resp.headers.get("content-type", "").startswith("application/json") else {} if not PAID and isinstance(data, dict): data["upgrade"] = ( "Want video, audio, custom themes, and more? " "Upgrade at https://agenticdecks.com/pricing — " "then set DECKRUN_API_KEY in your MCP config." ) return [types.TextContent(type="text", text=json.dumps(data))] return [types.TextContent(type="text", text=resp.text)] - deckrun_mcp_http.py:95-96 (registration)The tool definition and registration for generate_slide_deck.
_TOOL_GENERATE_SLIDE_DECK = types.Tool( name="generate_slide_deck",