documents_create
Render a document (PDF / HTML / PPTX / DOCX) and save it to the workspace. This tool has two input pipelines — pass exactly one of content_html or content_markdown. Pipeline A — content_html (canonical for decks, proposals, designed pages) You author full HTML+CSS. A baked-in design-system preamb...
This record as markdown: /tools/io-github-saloprj-dialogbrain/documents-create.md
What documents_create does on Dialogbrain
AI agents use documents_create to create or update resources in Dialogbrain, usually the action step of a workflow, after the agent has gathered context. Every call changes real data in your Dialogbrain environment.
| Parameter | Type | Required | Description |
|---|---|---|---|
theme | string | — | Invoice or contract styling for content_markdown. Rejected with content_html (use design_tokens + your own CSS instead). OMIT for default (unthemed) styling. |
title | string | Yes | Short human-readable title for the document. |
language | string | — | BCP-47 language tag (e.g. 'en', 'ru', 'zh', 'ja'). Drives <html lang> and (markdown path) font fallback for non-Latin scripts. |
output_type | string | Yes | Renderer target: 'pdf' | 'pptx' | 'docx' | 'html'. PPTX/DOCX require content_markdown. |
page_preset | string | — | Page geometry for content_html. 'slide_16_9' = 1280x720 deck, 'a4'/'letter' = flowing document, 'none' = LLM declares its own @page. Defaults to 'a4' inside the |
content_html | string | — | Full HTML body (with optional <style> blocks) for the canonical Chromium pipeline. Mutually exclusive with content_markdown. |
design_tokens | object | — | Flat dict of CSS-variable overrides for content_html. Whitelisted keys: brand_primary, accent, surface_dark (hex color), font_display, font_body (Inter|Manrope| |
content_markdown | string | — | Markdown body for the invoice/contract pipeline. Mutually exclusive with content_html. |
Parameters from the server's own tool schema.
Why documents_create is rated Medium
This tool creates new documents in a workspace, which is a reversible Write operation. It does not execute arbitrary code (Execute), delete data (Destructive), or move money (Financial). While it accepts HTML/CSS content, the tool itself does not execute that content as code—it renders and saves it as a document artifact.
From the tool's definition Tool description states it will 'Render a document (PDF / HTML / PPTX / DOCX) and save it to the workspace.' The verbs 'save' and the action of creating new documents indicate data creation/modification.
Attacks that exploit this kind of access
The rule that runs documents_create safely
PolicyLayer is an MCP gateway: it sits between your AI agents and Dialogbrain, and checks every tool call against a rule you set before the call runs. Nothing changes on the server itself. For documents_create, this is the rule to start with:
documents_create stays usable, but capped: an agent stuck in a loop can't make hundreds of changes a minute. Everything else on the server is denied unless you say otherwise.
The button opens the PolicyLayer dashboard: create your workspace, connect Dialogbrain, apply this rule, and every documents_create call is checked against it from then on.
Questions about documents_create
Render a document (PDF / HTML / PPTX / DOCX) and save it to the workspace. This tool has two input pipelines — pass exactly one of content_html or content_markdown. Pipeline A — content_html (canonical for decks, proposals, designed pages) You author full HTML+CSS. A baked-in design-system preamble ships first (<style> with Inter/Manrope as data-URI fonts, CSS-variable palette tokens, 8px spacing scale, and pre-styled layout helpers); your markup and any of your own <style> blocks land after the preamble so you can override anything. Chromium renders the assembled document into a static PDF — JavaScript is disabled and DNS is blackholed, so external font / image / script fetches will fail by configuration. Required when this pipeline is used: - title — human-readable, used for PDF metadata and the saved filename. - content_html — the <body> and any custom <style> blocks. The renderer wraps this in <html>…</html> and injects the preamble + a canonical <meta charset> + <title>. Do NOT emit <script>, <iframe>, <object>, <embed>, <meta>, <link>, <base>, <form>, or event handlers — the sanitizer strips them. - output_type — "pdf" or "html". ("pptx" and "docx" require content_markdown since they need structured markdown intermediates.) Optional: - page_preset — "slide_16_9" (default for any deck), "a4" (default for flowing documents — used if omitted), "letter", or "none" (you declare your own @page rule). For a web-styled page (dark background, full-bleed sections) use "none" and declare @page { margin: 0 }, set the background on html as well as body, and add print-color-adjust: exact — the a4/letter presets keep 24mm paper margins, which paint as a white frame around dark designs. - design_tokens — flat dict overriding the preamble's CSS variables. Whitelisted keys: brand_primary, accent, surface_dark (hex color), font_display, font_body (font name from ['Inter', 'Manrope', 'monospace', 'sans-serif', 'serif', 'system-ui', 'ui-monospace', 'ui-sans-serif', 'ui-serif']). - language — BCP-47 tag (default "en"). Drives <html lang>. Slide structure (page_preset="slide_16_9") Each slide is <section class="slide …">…</section>. The base .slide class is what sizes it to the viewport and forces the page break — do not drop it. Composable variants (apply alongside .slide): - .slide-cover — gradient hero, big display title. - .slide-split — two equal columns, image + narrative. - .slide-stats — three-up KPI cards (use <div class="stat"> with .stat-value + .stat-label inside). - .slide-quote — centered pull quote + <cite> attribution. Layout helpers (work in any preset): .grid-2, .grid-3, .split, .stack, .cluster, .callout, .muted, .kbd. Speaker notes <aside class="notes">…text…</aside> inside a <section class="slide">. The sanitizer strips them from the rendered PDF and returns them as slide_notes[] (parallel to slide order). Orphan notes outside any slide are dropped with a warning. Images Only these src schemes resolve: - file:NNN — workspace file_id. - data:image/...;base64,... — inline. - https://<host> where <host> ∈ DOCUMENTS_MEDIA_URL_ALLOWLIST. Other URLs are dropped and replaced with an HTML comment placeholder. Pipeline B — content_markdown (invoice / contract only) Required: - title, content_markdown, output_type. Optional: - theme — "invoice" or "contract". Triggers the corresponding exemplar styling and (for invoices) the arithmetic validator that fail-closes on missing or mismatched totals. - language — BCP-47 (default "en"). Delivery contract (CRITICAL) After this tool returns file_id, deliver the file with messages.send(attachments=[file_id], text="<short caption>"). Embedding the file_id in a markdown link, sandbox: URL, or /api/files/<id>/download text will render as plain text on the recipient's channel — the attachments parameter is the only way the file actually attaches. Exemplars INVOICE (English): Invoice INV-{YYYYMMDD-HHMMSS} From: {Issuer Legal Name}, {Address}, {Tax ID} To: {Customer Name}, {Customer Address}, {Customer Tax ID} Issue date: {YYYY-MM-DD} Due date: {YYYY-MM-DD} | Description | Qty | Unit price | Total | |---|---:|---:|---:| | {Service 1} | 1 | 1500.00 | 1500.00 | | {Service 2} | 2 | 500.00 | 1000.00 | Subtotal: USD 2500.00 Tax (20%): USD 500.00 Total: USD 3000.00 Payment: {bank details OR crypto wallet — never both} INVOICE (Russian): Счёт-фактура № INV-{YYYYMMDD-HHMMSS} От: {Юридическое название организации}, {Адрес}, ИНН {Tax ID} Кому: {Название клиента}, {Адрес клиента}, ИНН {Tax ID} Дата: {YYYY-MM-DD} Срок оплаты: {YYYY-MM-DD} | Описание | Кол-во | Цена | Сумма | |---|---:|---:|---:| | {Услуга 1} | 1 | 1500.00 | 1500.00 | | {Услуга 2} | 2 | 500.00 | 1000.00 | Подытог: USD 2500.00 НДС (20%): USD 500.00 Итого: USD 3000.00 Реквизиты: {банковские реквизиты ИЛИ криптокошелёк — не оба сразу} CONTRACT (English): Service Agreement Between: {Provider Legal Name}, {Address} ("Provider") And: {Client Legal Name}, {Address} ("Client") Effective date: {YYYY-MM-DD} 1. Scope of services {Concise description of what Provider agrees to deliver.} 2. Term This Agreement begins on the Effective date and continues until {termination condition or end date}. 3. Compensation Client pays Provider {amount and currency} according to {payment schedule}. 4. Confidentiality Both parties agree to keep proprietary information of the other party confidential during and after the term of this Agreement. 5. Termination Either party may terminate with {N} days' written notice. 6. Governing law {Jurisdiction}. --- Provider: ____________________ Client: ____________________ {Provider signatory name} {Client signatory name} CONTRACT (Russian): Договор оказания услуг Между: {Юридическое название Исполнителя}, {Адрес} ("Исполнитель") И: {Юридическое название Заказчика}, {Адрес} ("Заказчик") Дата вступления в силу: {YYYY-MM-DD} 1. Предмет договора {Краткое описание услуг, которые Исполнитель обязуется оказать.} 2. Срок действия Договор вступает в силу с указанной даты и действует до {условие прекращения или дата окончания}. 3. Стоимость и порядок оплаты Заказчик оплачивает услуги Исполнителя в размере {сумма и валюта} в порядке {график платежей}. 4. Конфиденциальность Стороны обязуются сохранять конфиденциальность сведений, полученных в ходе исполнения настоящего Договора, в течение срока его действия и после его прекращения. 5. Расторжение Любая из сторон вправе расторгнуть Договор, направив письменное уведомление не менее чем за {N} дней. 6. Применимое право {Юрисдикция}. --- Исполнитель: ____________________ Заказчик: ____________________ {ФИО подписанта Исполнителя} {ФИО подписанта Заказчика}. It is categorised as a Write tool in the Dialogbrain MCP Server, which means it can create or modify data. Consider rate limits to prevent runaway writes.
documents_create accepts 8 parameters: theme, title, language, output_type, page_preset, content_html, design_tokens, content_markdown. Required: title, output_type. The full parameter table on this page comes from the server's own tool schema.
Register the Dialogbrain MCP server in PolicyLayer and add a rule for documents_create: allow, deny, rate-limit, or require approval. Point your MCP client at the PolicyLayer proxy URL and the rule is enforced on every call, before it reaches Dialogbrain. Nothing to install.
documents_create is a Write tool with medium risk. Write tools should be rate-limited to prevent accidental bulk modifications.
Yes. Add a rate_limit block to the documents_create rule in your PolicyLayer policy. For example, setting max: 10 and window: 60 limits the tool to 10 calls per minute. Rate limits are tracked per agent session and reset automatically.
Set action: deny in the PolicyLayer policy for documents_create. The AI agent will receive a policy violation error and cannot call the tool. You can also include a reason field to explain why the tool is blocked.
documents_create is provided by the Dialogbrain MCP server (https://api.dialogbrain.com/mcp). PolicyLayer sits as a proxy in front of this server to enforce policies before tool calls reach the server.
More on Dialogbrain, and thousands of servers like it.
This server
Across the catalogue