MCP-Server

Renderball

com.renderball/renderball
Design & Kreativ Medien & Inhalte Produktivität Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Creates, edits, renders, previews, and shares presentation decks from outlines and submitted deck files.

create_deck
Create a deck
Start a new presentation from a brief, the brand as YOU know it (name, and only the colours, fonts and logo you actually have — never guess a colour) and your outline. With the outline the reply carries the WRITING BRIEF, so the whole deck is two calls: this, then submit_deck. Without an account it also returns a guest_token to pass on later calls and deck_url, the one link to give the user.
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['brief'], 'properties': {'brand': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': "The brand's name as it should appear."}, 'text': {'type': 'string', 'pattern': '^#[0-9a-fA-F]{6}$', 'description': 'The main text colour, only if known.'}, 'fonts': {'type': 'object', 'properties': {'body': {'type': 'string', 'maxLength': 60, 'description': 'Body font family name, only if known.'}, 'headline': {'type': 'string', 'maxLength': 60, 'description': 'Headline font family name, only if known.'}}}, 'voice': {'type': 'string', 'maxLength': 300, 'description': 'How the brand speaks, in a sentence or two.'}, 'accent': {'type': 'string', 'pattern': '^#[0-9a-fA-F]{6}$', 'description': "The lead brand colour. ONLY if you know it (from their site's stylesheet or the user's material); never guess."}, 'website': {'type': 'string', 'maxLength': 200, 'description': "Their website, e.g. yourcompany.com â\x80\x94 used for the wordmark's source, not read."}, 'logo_url': {'type': 'string', 'format': 'uri', 'maxLength': 500, 'description': 'A public https image of the logo (SVG or PNG), only if you have a real one.'}, 'background': {'type': 'string', 'pattern': '^#[0-9a-fA-F]{6}$', 'description': 'The page background colour, only if known.'}}, 'description': 'The brand as YOU know it: name, and only the colours, fonts and logo you actually have. Never guess a colour; leave it out.'}, 'brief': {'type': 'string', 'maxLength': 6000, 'minLength': 20, 'description': 'What the deck is for, who it is for, what it should argue and ask. Real facts only; the truth check refuses invented figures.'}, 'pages': {'type': 'integer', 'maximum': 16, 'minimum': 1, 'description': 'How many pages you intend to write (default 5). Ignored when `outline` is given.'}, 'outline': {'type': 'object', 'required': ['pages'], 'properties': {'tone': {'type': 'string', 'maxLength': 300, 'description': "The register, e.g. 'confident, technical, CTO-to-CTO'."}, 'pages': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'description', 'visual_concept', 'content'], 'properties': {'label': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': "Short page title, 2-6 words (e.g. 'The Tracker Tax')."}, 'content': {'type': 'object', 'required': ['headline'], 'properties': {'cta': {'type': 'object', 'required': ['primary'], 'properties': {'primary': {'type': 'string', 'maxLength': 60}, 'secondary': {'type': 'string', 'maxLength': 80}}}, 'lede': {'type': 'string', 'maxLength': 400, 'description': 'Supporting sentence or two.'}, 'meta': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'value'], 'properties': {'label': {'type': 'string', 'maxLength': 60}, 'value': {'type': 'string', 'maxLength': 60}}}, 'maxItems': 6, 'description': 'Stat tiles as label/value pairs â\x80\x94 ONLY figures the user gave you.'}, 'bullets': {'type': 'array', 'items': {'type': 'string', 'maxLength': 160}, 'maxItems': 6, 'description': 'Up to 6 short points; no walls.'}, 'caption': {'type': 'string', 'maxLength': 200, 'description': 'Small mono caption, e.g. a source line.'}, 'eyebrow': {'type': 'string', 'maxLength': 60, 'description': "Tiny label above the headline, e.g. 'THE PROBLEM'."}, 'headline': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'The one strong display line.'}}, 'description': "The approved copy. Every numeral here must come from the user's material â\x80\x94 the deck's truth check enforces it."}, 'description': {'type': 'string', 'maxLength': 600, 'minLength': 1, 'description': 'What this page must accomplish in the argument, one or two sentences. Not shown on the page.'}, 'visual_concept': {'type': 'string', 'maxLength': 1200, 'minLength': 1, 'description': "The composition and the one graphic device that expresses the page's argument: layout, the diagram/chart/mock, where the headline sits, colours by role. Concrete enough to draw from."}}}, 'maxItems': 16, 'minItems': 1}}, 'description': 'Your page-by-page outline (one entry per page: label, description, visual_concept, content with a headline). Send it here and the reply carries the WRITING BRIEF â\x80\x94 one call instead of create_deck + write_outline.'}, 'brand_url': {'type': 'string', 'maxLength': 300, 'description': 'Key holders only: a website Renderball reads for colours, fonts and logo when no brand is declared.'}}}
deck_status
Check an import
Whether a submitted deck is still importing, ready (with the editor link), or failed (with the reason).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['deck_id'], 'properties': {'deck_id': {'type': 'string', 'maxLength': 40, 'minLength': 10}, 'guest_token': {'type': 'string', 'maxLength': 80, 'description': 'Only for a deck created WITHOUT an account: the guest_token create_deck returned.'}}}
get_brief
Get the writing brief
The writing brief for a deck whose outline is already saved.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['deck_id'], 'properties': {'deck_id': {'type': 'string', 'maxLength': 40, 'minLength': 10}, 'guest_token': {'type': 'string', 'maxLength': 80, 'description': 'Only for a deck created WITHOUT an account: the guest_token create_deck returned.'}}}
list_decks
List my decks
The user's Renderball documents, newest first, with editor links. Needs an account (a key).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
see_deck
See the rendered pages
The deck's rendered pages as images, page 1 first — look at them for overlapping or clipped text, odd spacing or an element off its page, then fix the file and submit_deck again. Available once the deck has been submitted.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['deck_id'], 'properties': {'deck_id': {'type': 'string', 'maxLength': 40, 'minLength': 10}, 'guest_token': {'type': 'string', 'maxLength': 80, 'description': 'Only for a deck created WITHOUT an account: the guest_token create_deck returned.'}}}
share_deck
Share a deck
Turn on the public link for a deck and return it.
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['deck_id'], 'properties': {'deck_id': {'type': 'string', 'maxLength': 40, 'minLength': 10}, 'guest_token': {'type': 'string', 'maxLength': 80, 'description': 'Only for a deck created WITHOUT an account: the guest_token create_deck returned.'}}}
submit_deck
Submit the deck file
Send the complete deck file you wrote. Renderball checks it against the brief, repairs small slips, renders every page and opens it in the editor. Returns 'ready' with the editor_url, or 'importing' — then poll deck_status.
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['deck_id', 'source'], 'properties': {'label': {'type': 'string', 'maxLength': 40, 'description': "Who wrote it, e.g. 'claude-code'. Shown in the deck's trace."}, 'source': {'type': 'string', 'maxLength': 600000, 'minLength': 1500, 'description': 'The complete deck file, exactly as the writing brief specifies. Raw file or a ```tsx fenced block.'}, 'deck_id': {'type': 'string', 'maxLength': 40, 'minLength': 10}, 'guest_token': {'type': 'string', 'maxLength': 80, 'description': 'Only for a deck created WITHOUT an account: the guest_token create_deck returned.'}, 'wait_seconds': {'type': 'integer', 'maximum': 60, 'minimum': 0, 'description': 'How long to wait for the import before returning (default 25). Use deck_status to keep checking.'}}}
write_outline
Write the outline
Save the page-by-page outline you wrote for a deck. Returns the WRITING BRIEF: the exact instructions for writing the deck file (format, brand facts, truth rules). Follow it, then call submit_deck.
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['deck_id', 'pages'], 'properties': {'tone': {'type': 'string', 'maxLength': 300, 'description': "The register, e.g. 'confident, technical, CTO-to-CTO'."}, 'pages': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'description', 'visual_concept', 'content'], 'properties': {'label': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': "Short page title, 2-6 words (e.g. 'The Tracker Tax')."}, 'content': {'type': 'object', 'required': ['headline'], 'properties': {'cta': {'type': 'object', 'required': ['primary'], 'properties': {'primary': {'type': 'string', 'maxLength': 60}, 'secondary': {'type': 'string', 'maxLength': 80}}}, 'lede': {'type': 'string', 'maxLength': 400, 'description': 'Supporting sentence or two.'}, 'meta': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'value'], 'properties': {'label': {'type': 'string', 'maxLength': 60}, 'value': {'type': 'string', 'maxLength': 60}}}, 'maxItems': 6, 'description': 'Stat tiles as label/value pairs â\x80\x94 ONLY figures the user gave you.'}, 'bullets': {'type': 'array', 'items': {'type': 'string', 'maxLength': 160}, 'maxItems': 6, 'description': 'Up to 6 short points; no walls.'}, 'caption': {'type': 'string', 'maxLength': 200, 'description': 'Small mono caption, e.g. a source line.'}, 'eyebrow': {'type': 'string', 'maxLength': 60, 'description': "Tiny label above the headline, e.g. 'THE PROBLEM'."}, 'headline': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'The one strong display line.'}}, 'description': "The approved copy. Every numeral here must come from the user's material â\x80\x94 the deck's truth check enforces it."}, 'description': {'type': 'string', 'maxLength': 600, 'minLength': 1, 'description': 'What this page must accomplish in the argument, one or two sentences. Not shown on the page.'}, 'visual_concept': {'type': 'string', 'maxLength': 1200, 'minLength': 1, 'description': "The composition and the one graphic device that expresses the page's argument: layout, the diagram/chart/mock, where the headline sits, colours by role. Concrete enough to draw from."}}}, 'maxItems': 16, 'minItems': 1}, 'deck_id': {'type': 'string', 'maxLength': 40, 'minLength': 10}, 'guest_token': {'type': 'string', 'maxLength': 80, 'description': 'Only for a deck created WITHOUT an account: the guest_token create_deck returned.'}}}
Hinzugefügt
share_deck
17. September 2026 12:37
Hinzugefügt
deck_status
17. September 2026 12:37
Hinzugefügt
submit_deck
17. September 2026 12:37
Hinzugefügt
see_deck
17. September 2026 12:37
Hinzugefügt
get_brief
17. September 2026 12:37
Hinzugefügt
write_outline
17. September 2026 12:37
Hinzugefügt
create_deck
17. September 2026 12:37
Hinzugefügt
list_decks
17. September 2026 12:37