Tools (9)
Render — Both transports
| Tool | Description | Transport |
|---|---|---|
render_template |
Named template + Nunjucks vars (+ optional markdown body) → PNG or PDF. Output format driven by the template registry. | stdio http |
render_html_to_png |
Raw HTML string → PNG screenshot. Brand fonts and tokens auto-injected. | stdio http |
render_html_to_pdf |
Raw HTML → PDF. Playwright auto-paginates. Supports A4/A3/Letter/Legal or custom pixel dimensions. | stdio http |
render_slides |
N pages → toggleable { viewer (HTML), pdf, pngs }. Markdown mode (=== separators) or pages mode (explicit HTML/template per slide). | stdio http |
Publish — HTTP transport only
| Tool | Description | Transport |
|---|---|---|
publish_artifact |
Promote a bundle from the ephemeral store (1 h TTL) to the persistent published store. Returns a stable public URL. | http |
unpublish_artifact |
Remove a published item by ID. Idempotent. | http |
list_published |
List published items, optionally filtered by type: deck, document, image, carousel, html-pdf, html-png. | http |
Introspect — Both transports
| Tool | Description | Transport |
|---|---|---|
list_templates |
Full template registry (output format, dims, required vars, tags). Optional tag filter. | stdio http |
get_tokens |
Parsed tokens.json — colors, typography, spacing. | stdio http |
Template Catalog (17)
Auto-generated from templates.meta.ts + a scan of each template's .html. Pass the key to render_template. Visual previews live on Documents, Graphics, and Presentations.
| Template key | Out | Size / Format | Parameters | Tags |
|---|---|---|---|---|
carousel/cta
Carousel CTA / closing slide (1080×1350). |
PNG | 1080×1350 |
BUTTON
string
undocumented
CTA
string
unused
EYEBROW
string
undocumented
HEADLINE
string
undocumented
HEIGHT
string
undocumented
SUBTITLE
string
URL
string
undocumented
WIDTH
string
undocumented
|
carousel-slidelinkedin |
carousel/numbered-item
Carousel numbered list item (1080×1350). Used inside multi-slide carousels. |
PNG | 1080×1350 |
BODY
markdown (auto)
HEIGHT
string
undocumented
NUMBER
string
undocumented
PILL
string
undocumented
PROGRESS
string
TITLE
string
WIDTH
string
undocumented
|
carousel-slidelinkedin |
carousel/title
Carousel title slide (LinkedIn portrait 1080×1350). Eyebrow + big number + body. |
PNG | 1080×1350 |
BIGNUMBER
string
BODY
markdown (auto)
EYEBROW
string
HEADLINE
string
undocumented
HEIGHT
string
undocumented
TITLE
string
unused
WIDTH
string
undocumented
|
carousel-slidelinkedin |
invoice
Branded invoice PDF. Line items in the body; recipient + UID (or private) and service_date required. Invoice number (ref), dates and bank details are rendered structurally — never put them in the body. |
A4 |
markdown
markdown
required
recipient
object
required
date
string
required
ref
string
required
subject
string
eyebrow
string
confidential
boolean
lang
'de' | 'en'
attachPath
path
|
document | |
letter
Branded business letter (single or multi-page). Markdown body, optional recipient block. |
A4 |
markdown
markdown
required
recipient
object
date
string
ref
string
subject
string
eyebrow
string
confidential
boolean
lang
'de' | 'en'
attachPath
path
|
document | |
offer
Branded offer / proposal PDF. Markdown body, recipient + date required for canonical filename. |
A4 |
markdown
markdown
required
recipient
object
required
date
string
required
ref
string
subject
string
eyebrow
string
confidential
boolean
lang
'de' | 'en'
attachPath
path
|
document | |
print/business-card
Business card, 85×55mm + bleed, front + back in one CMYK PDF/X-1a (FOGRA51/52). Render via render_print_pdf. Front: Escape Velocity wordmark + glow; back: name, role, contacts, QR. |
EMAIL
string
required
NAME
string
required
PHONE
string
required
TITLE
string
required
WEBSITE
string
required
GRADIENT_URI
string
undocumented
PAGE_H_PT
string
undocumented
PAGE_W_PT
string
undocumented
QR_SVG
string
TAGLINE
string
TRIM_H_MM
string
undocumented
TRIM_W_MM
string
undocumented
|
printbusiness-cardcmykvisitenkarte | ||
report
Branded multi-page report. Markdown body, optional cover image. |
A4 |
markdown
markdown
required
recipient
object
date
string
ref
string
subject
string
eyebrow
string
coverPath
path
confidential
boolean
lang
'de' | 'en'
attachPath
path
|
document | |
social/announcement
Announcement post (1200×630). Bold title + body copy. |
PNG | 1200×630 |
BODY
markdown (auto)
CTA
string
undocumented
EYEBROW
string
HEADLINE
string
undocumented
TITLE
string
unused
|
social |
social/linkedin-banner
LinkedIn profile banner (1584×396). |
PNG | 1584×396 |
CTA_LABEL
string
undocumented
SUBTITLE
string
unused
TAGLINE
string
undocumented
TITLE
string
unused
URL
string
undocumented
|
sociallinkedin |
social/linkedin-post-portrait
LinkedIn portrait feed post (1080×1350, 4:5). Content-flexible: eyebrow + headline + body + CTA. The generalist "LinkedIn shareable image" — use when nothing more specific (quote-card, stats-card) fits. |
PNG | 1080×1350 |
BODY
markdown (auto)
CTA
string
EYEBROW
string
HEADLINE
string
|
sociallinkedinfeed-post |
social/og
Open Graph image (1200×630). For website / blog post sharing. SUBTITLE accepts inline markup — wrap a phrase in <span class="accent">…</span> to color just that part terracotta. |
PNG | 1200×630 |
SUBTITLE
string
TITLE
string
|
socialog |
social/process-flow
Process / step diagram for the LinkedIn feed (default 1080×1350 portrait; pass width=1080 height=1080 for square). STEPS is a JSON array of {label, accent?, tag?, desc?} — steps are auto-numbered with badges and joined by arrowhead connectors. ORIENTATION "vertical" (default, stacks top→down — best for portrait/mobile) or "horizontal" (row — best for square / ≤4 short steps). Mark the pivotal step (e.g. the AI-augmented one) with accent:true for a terracotta border + tint fill. |
PNG | 1080×1350 |
COMPONENTS_CSS
string
undocumented
CTA
string
EYEBROW
string
HEADLINE
string
ORIENTATION
string
unused
STEPS
string
unused
|
sociallinkedindiagram |
social/quote-card
Square quote card (1200×1200). Quote + attribution. |
PNG | 1200×1200 |
AUTHOR
string
COMPONENTS_CSS
string
undocumented
QUOTE
string
ROLE
string
|
social |
social/stats-card
Square stats card (1200×1200). Big number + label + context. |
PNG | 1200×1200 |
COMPONENTS_CSS
string
undocumented
CONTEXT
string
LABEL
string
STAT
string
UNIT
string
|
social |
social/twitter-banner
Twitter/X profile banner (1500×500). |
PNG | 1500×500 |
CTA_LABEL
string
undocumented
SUBTITLE
string
unused
TAGLINE
string
undocumented
TITLE
string
unused
URL
string
undocumented
|
socialtwitter |
social/youtube-banner
YouTube channel banner (2560×1440, safe area ~1546×423). |
PNG | 2560×1440 |
BRAND
string
undocumented
SUBTITLE
string
unused
TAGLINE
string
undocumented
TITLE
string
unused
URL
string
undocumented
|
socialyoutube |
tos
Terms of service / legal document. Markdown body, optional headings. |
A4 |
markdown
markdown
required
recipient
object
date
string
ref
string
subject
string
eyebrow
string
confidential
boolean
lang
'de' | 'en'
attachPath
path
|
document |
REST API
Base URL: https://mcp.escapevelocity.consulting
| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /mcp |
Bearer JWT | Streamable HTTP transport (stateful, per-session) |
| GET | /mcp |
Bearer JWT | SSE stream for an existing session |
| DELETE | /mcp |
Bearer JWT | Terminate a session |
| GET | /artifacts/<token> |
Signed URL | Download ephemeral rendered artifact (1 h TTL) |
| GET | /published/<id>/<file> |
none | Download a published file |
| GET | /api/published |
none | JSON list of published items (optional ?type= filter). CORS *. |
| GET | /api/published/<id> |
none | JSON metadata for one published item |
| GET | /health |
none | Liveness probe — { status: 'ok' } |
| GET | /.well-known/oauth-protected-resource |
none | RFC 9728 — points clients at the authorization server |
| GET | /.well-known/oauth-authorization-server |
none | RFC 8414 — authorization server metadata |
| GET | /authorize |
none | OAuth 2.1 code-flow entrypoint → redirects to Google login |
| GET | /oauth/google/callback |
none | Google OAuth callback — issues our own auth code |
| POST | /token |
PKCE | Exchange auth-code or refresh-token for JWT access token |
| POST | /register |
none | RFC 7591 Dynamic Client Registration |
Reference
- BRAND_SPEC.md — Canonical brand specification (source of truth)
- docs/mcp-server.md — Full MCP server reference (routes, auth, env vars, architecture)
- docs/ — Operational documentation (architecture, rules, MCP, publishing, templates, troubleshooting, glossary)
- templates.meta.ts — Template registry source (descriptions, dims, required vars)
- docs/publishing.md — Publish / unpublish flow and bundle abstraction
- BRAND_SKILL.md — Agent cheatsheet for brand system (token table + CSS vars + layout patterns)
- tokens.ts — Token source of truth (colors, fonts, spacing)
- tokens.css — Generated CSS custom properties
- skill/SKILL.md — Deployed skill source (template catalog + routing map)