artifacts_create
ActiveTool of io.github.saloprj/dialogbrain
Host a self-contained HTML page at a stable, default-private, shareable URL — the Artifact experience, in-app. Pass **exactly one** of: - `html` — the full page: your `<body>` plus any `<style>`/`<script>`. Unlike documents.create, the page is served **live** (JavaScript runs), so charts, interactivity, and small tools work. - `file_id` — a workspace file whose contents are already the HTML page. - `analytics_card_ids` — ids of saved analytics dashboard cards; the platform re-runs their queries and composes one designed report page (static charts, snapshot at build time). Best way to give someone a shareable analytics report. The page runs in a locked-down sandbox: a dedicated origin + a strict CSP. That means it is **fully self-contained** — it CANNOT call out to the network (`fetch`/XHR/WebSocket are blocked) or load anything from a CDN. Inline all assets: CSS/JS inline, images/fonts as `data:` URIs. Draw charts yourself as inline SVG (no external chart library). `access_level` defaults to `'private'` (viewable only in-app). Set `'shared'` to make the unguessable link itself the capability (anyone-with-link). You can flip this later with artifacts.set_access. Returns `{artifact_id, slug, url, version}`. `url` is the live link when the public origin is configured; until then the artifact is hosted and versioned but `url` is null. Republish with artifacts.update — the URL stays the same.
Parameters schema
{
"type": "object",
"required": [
"title"
],
"properties": {
"html": {
"type": "string",
"description": "Full self-contained HTML page. Mutually exclusive with file_id."
},
"title": {
"type": "string",
"description": "Short human-readable title (page <title> + gallery label)."
},
"favicon": {
"type": "string",
"description": "Optional emoji used as the browser-tab icon (e.g. '📊')."
},
"file_id": {
"type": "integer",
"description": "Workspace file whose contents are the HTML page. Mutually exclusive with html."
},
"template": {
"type": "string",
"description": "Optional data-driven template: HTML with {{placeholder}} tokens. When set, later artifacts.refresh(data={...}) re-renders the page server-side from tiny data payloads (no HTML round-trip) — ideal for a scheduled agent that refreshes live numbers. The initial html you pass should be this template already rendered with today's values."
},
"description": {
"type": "string",
"description": "Optional one-line summary for the gallery card."
},
"access_level": {
"enum": [
"private",
"shared"
],
"type": "string",
"default": "private",
"description": "'private' (default, in-app only) or 'shared' (anyone-with-link)."
},
"analytics_card_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Compose saved analytics dashboard cards into one report page: each card's SQL re-runs through the guarded analytics engine and renders as a static chart. Data is a snapshot at build time. Mutually exclusive with html/file_id."
}
}
}Parent server
io.github.saloprj/dialogbrain
https://github.com/saloprj/dialogbrain-mcp
1/7 registries