Dreamlit MCP
An MCP server that allows AI agents to create, test, publish, and manage lifecycle email notification workflows. It connects to data sources like Postgres to analyze funnels, detect drop-offs, and automate personalized email sequences for user engagement and retention.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.dreamlit.ai/mcpWhat its tools do
16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (7)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to dreamlit.ai ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Connect AI agents to Dreamlit for lifecycle email automation
- Analyze user funnels and metrics to identify drop-offs
- Create and preview personalized email workflows
- Publish approved email sequences to engage users
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- Dreamlit MCP 0.3.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 16 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
get_status — Get status
Read-only. Use first when the agent needs Dreamlit product guidance, prompting guidance, approved workspace context, project setup, schema hints, workflow state, or relevant app URLs. Returns a compact context pack with concepts, recommended tool flow, actor/workspace/project data, optional authoring context, optional workflow context, and appUrls. Workflow summaries include liveStatus, and broadcasts include an authoritative broadcast.state. Database tables that Dreamlit can see but not read rows from (row level security with no policy for Dreamlit) carry a warning and fixSql; run fixSql, or ask the user to run it, in the Supabase SQL editor. If Dreamlit couldn't read a connection's tables, that connection has tablesError instead of an empty list meaning no tables. Do not use this to create, update, publish, or unpublish workflows.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional project id. Include it to return project setup, schema hints, and authoring context."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional workflow id. Include it to return concise workflow state and preview URL."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Get status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_or_update_workflow — Create or update workflow
Creates a new Dreamlit workflow draft or updates an existing draft from an outcome-oriented natural-language prompt. Use after get_status; use get_workflow_and_preview_url first when editing an existing workflow, then describe the steps to change by what they do, not by step id. Each call continues the workflow's current chat; pass startNewChat to start fresh. Broadcasts that are scheduled, sent, or cancelled can't be edited; duplicate them in the Dreamlit web app instead. Existing Supabase Auth workflows can be edited except for the immutable trigger step; creating Supabase Auth workflows must happen through Supabase Auth email setup in the Dreamlit web app. Side effect: may create or modify a draft, but does not publish or install live triggers. Returns the workflow/draft result, action-required or handoff details when more input is needed, and relevant app URLs. Do not use for publishing, direct database changes, or low-level graph edits.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"prompt"
],
"properties": {
"name": {
"type": "string",
"description": "Name for a new workflow draft. Use when the user names the workflow; otherwise Dreamlit picks one. Only valid when creating; use rename_workflow to rename an existing workflow."
},
"prompt": {
"type": "string",
"minLength": 1,
"description": "Outcome-oriented workflow authoring request. Describe the event or schedule, audience, recipient, message goal, data needed, timing, business rules, and unsubscribe intent. When editing, refer to existing steps by what they do (for example, the query that finds returning customers, or the email with subject \"Welcome back\"), never by step id. Let Dreamlit choose email styling unless the user gives specific style direction. For broadcasts, request a future send time instead of an immediate send."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Target project id for creating a new workflow draft."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Existing workflow id to continue editing. Use get_workflow_and_preview_url first when changing an existing workflow."
},
"startNewChat": {
"type": "boolean",
"description": "Start a fresh Dreamlit chat for this request instead of continuing the workflow's current chat. The new chat still sees the current draft but not earlier turns. Use when switching to an unrelated change, after long turns with pasted SQL or HTML, or when Dreamlit keeps misreading the request. Ignored when creating a workflow."
},
"userCurrentTimeIso": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "User's current time as an ISO timestamp with offset, useful for relative schedule requests."
},
"userCurrentTimeZoneId": {
"type": "string",
"minLength": 1,
"description": "IANA timezone id for the user, useful for repeating workflows and scheduled broadcasts."
},
"userEmailStepComments": {
"type": "array",
"items": {
"type": "object",
"required": [
"workflowStepId",
"comment",
"onCodeLineText",
"userHighlightedText"
],
"properties": {
"comment": {
"type": "string",
"minLength": 1,
"description": "User's requested change."
},
"onCodeLineText": {
"type": "string",
"minLength": 1,
"description": "Nearby email editor text for anchoring the comment."
},
"workflowStepId": {
"type": "string",
"minLength": 1,
"description": "Workflow step id that the user commented on."
},
"userHighlightedText": {
"type": "string",
"minLength": 1,
"description": "Specific text selected by the user."
}
}
},
"description": "Optional inline comments for revising email step content."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Create or update workflow",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}edit_workflow_steps — Edit workflow steps
Applies up to 5 exact edits to existing steps in a workflow draft, instantly and without AI: email subject, preview text, HTML, sender, reply-to, and recipient; Slack message; query SQL; wait rule; and step description. Use when you know the exact new value; call get_workflow_and_preview_url first for step ids and current values, with includeEmailHtml to edit HTML. Edits are checked against the draft as it will be once they are all saved: templates and waits may only use fields their step gets, and query edits are rejected if later steps still use fields the new query no longer returns. Each edit applies on its own, except that a SQL edit and the edits below it apply together or not at all. The edits show in the workflow's Dreamlit chat. Side effect: changes the draft only; does not publish. Returns each edit's status with an error code and message for failed edits, and app URLs. Do not use to add, remove, or move steps, edit triggers, or make changes that need writing or judgment; use create_or_update_workflow for those.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId",
"edits"
],
"properties": {
"edits": {
"type": "array",
"items": {
"type": "object",
"required": [
"stepId"
],
"properties": {
"wait": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"amount",
"unit"
],
"properties": {
"kind": {
"type": "string",
"const": "duration"
},
"unit": {
"enum": [
"minutes",
"hours",
"days"
],
"type": "string"
},
"amount": {
"type": "integer",
"maximum": 9007199254740991,
"description": "How long to wait, up to 365 days in total.",
"exclusiveMinimum": 0
}
}
},
{
"type": "object",
"required": [
"kind",
"field"
],
"properties": {
"kind": {
"type": "string",
"const": "until_row_field"
},
"field": {
"type": "string",
"minLength": 1,
"description": "Field from the step's input rows that holds a date and time with an offset, such as renewal_reminder_at. The wait ends at that time."
}
}
}
],
"description": "Replaces the whole wait rule: a fixed duration, or until the date and time in a row field."
},
"stepId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Existing step id from get_workflow_and_preview_url."
},
"emailTo": {
"type": "string",
"minLength": 1,
"description": "Recipient address or Liquid, such as {{ email }}."
},
"emailHtml": {
"type": "string",
"minLength": 1,
"description": "Full replacement email HTML body. Liquid allowed. Read the current body with get_workflow_and_preview_url includeEmailHtml first. Emails that allow unsubscribe must keep a link to {{ dreamlit_unsubscribe_url }}."
},
"queryText": {
"type": "string",
"minLength": 1,
"description": "Full replacement SQL for a query step. Must stay read-only and keep returning the fields later steps use."
},
"description": {
"type": "string",
"description": "Step description for email, query, or Slack steps. Empty string clears it."
},
"emailReplyTo": {
"type": "string",
"description": "Reply-to address. Empty string clears it."
},
"emailSubject": {
"type": "string",
"minLength": 1,
"description": "Email subject. Liquid allowed."
},
"emailFromName": {
"type": "string",
"description": "Sender name. Empty string clears it."
},
"slackTemplate": {
"type": "string",
"minLength": 1,
"description": "Full replacement Slack message. Liquid allowed."
},
"emailFromAddress": {
"type": "string",
"minLength": 1,
"description": "Sender address on one of the project's sending domains."
},
"emailPreviewText": {
"type": "string",
"description": "Email preview text. Liquid allowed. Empty string clears it."
}
},
"additionalProperties": false
},
"maxItems": 5,
"minItems": 1,
"description": "Up to 5 edits, each to a different existing step. Fields must match the step type: email* fields for email steps, slackTemplate for Slack, queryText for queries, wait for waits."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow whose draft to edit."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Edit workflow steps",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}rename_workflow — Rename workflow
Use when the user asks to rename an existing Dreamlit workflow. Side effect: changes only the workflow name; the draft, published version, and live triggers are unchanged. Returns the updated name and app URLs. Do not use to edit workflow content or to name a new workflow; pass name to create_or_update_workflow instead.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "New workflow name. Leading and trailing spaces are removed; it can't be blank."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to rename."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Rename workflow",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}move_workflow_to_folder — Move workflow to folder
Use when the user asks to put a workflow or broadcast in a folder, move it to another folder, or take it out of a folder. Folders are per list: the Published and Drafts lists on the Workflows page and the Sent and Drafts lists on the Broadcasts page each have their own folders, and this moves the workflow within the list it shows in now. Folders are flat; a "/" is just part of the name. A draft's folder does not carry over when it is published. Side effect: may create the folder; never deletes folders and does not change the draft, published version, or live triggers. Returns the folder, the list, and app URLs. Do not use to rename or delete folders.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId",
"folder"
],
"properties": {
"folder": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Folder name, up to 64 characters. Matching ignores case and leading or trailing spaces; Dreamlit creates the folder if it doesn't exist yet. Pass null to take the workflow out of its folder."
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to move."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Move workflow to folder",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_projects — List projects
Read-only. Use when the target project is unknown or the user names a project instead of providing an id. Returns accessible Dreamlit projects in the approved workspace with project and workflow-list URLs. Do not use to inspect workflow structure or author changes.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of projects to return."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Optional project name search string."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "List projects",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_workflows — List workflows
Read-only. Use to find workflows in a project by name, description, or trigger type before inspection or editing. Trigger filters include database, auth email, repeating, broadcast, and no-trigger workflows. Returns paginated workflow summaries, published/sandbox state, liveStatus, trigger type, folder (the folder name in the list the workflow shows in, or null), workflow URLs, totalCount, hasMore, and nextOffset. Broadcasts also include a broadcast object with state (draft, scheduled, sending, sent, cancelled, or failed), scheduledFor, and cancelledAt or completedAt; for broadcasts, broadcast.state and liveStatus are authoritative over published, because a cancelled broadcast stays published but will not send. Do not use as the final source of truth before editing; call get_workflow_and_preview_url for full structure.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 80,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of workflows to return for this page."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based workflow offset for pagination. Use nextOffset from the previous response to fetch the next page."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Optional workflow name or description search string."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id to list workflows from. Required when access is ambiguous."
},
"triggerFilters": {
"type": "array",
"items": {
"enum": [
"auth_email",
"database",
"broadcast",
"repeating",
"none"
],
"type": "string"
},
"description": "Optional trigger type filters. Use broadcast only for one-time audience emails."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "List workflows",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_brand_styles — List brand styles
Read-only. Use when the user wants to inspect saved project brand styles for generated email drafts. Returns paginated project brand style summaries, ids, default status, style metadata, and app URLs. Do not use to create, update, delete, or expose raw style provenance.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of brand styles to return for this page."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based brand style offset for pagination. Use nextOffset from the previous response to fetch the next page."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id to list brand styles from. Required when access is ambiguous."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "List brand styles",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_workflow_and_preview_url — Get workflow and preview URL
Read-only. Use before editing, verifying, or preparing publish for an existing workflow. Returns normalized draft and published workflow structure, liveStatus, the Dreamlit preview/builder URL, and status URLs. Broadcasts also include a broadcast object with state (draft, scheduled, sending, sent, cancelled, or failed), the run's scheduledFor, and cancelledAt or completedAt; this, not published or the trigger's sendAt, says whether the broadcast will send. Email HTML bodies are left out unless includeEmailHtml is true. Pass step ids only to edit_workflow_steps; when asking create_or_update_workflow for changes, describe steps by what they do. Do not use to create, update, publish, or unpublish workflows.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to inspect before editing, verifying, or publishing."
},
"includeEmailHtml": {
"type": "boolean",
"description": "Also return each email step's full HTML body as emailTemplate.html. Off by default because bodies are large; turn on before editing email HTML with edit_workflow_steps."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Get workflow and preview URL",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_analytics — Get analytics
Read-only. Use get_analytics to query raw notification analytics: email and Slack sends and deliveries, email opens, clicks and bounces, overview metrics, per-recipient rows and workflow run rows, with filters, sorting, and cursor pagination. Returns bounded structured analytics data, effective query metadata, pagination details when rows are included, and relevant app URLs. Use get_lifecycle_report or get_recommendations for Dreamlit's prepared analysis. Does not provide Dreamlit's lifecycle judgments or prioritized recommendations. Do not use for CSV exports, bulk dumps, workflow edits, publishing, or low-level database access.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"view"
],
"properties": {
"sort": {
"type": "object",
"required": [
"field"
],
"properties": {
"dir": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction. Defaults to desc."
},
"field": {
"enum": [
"timestamp",
"sentTo",
"subject",
"workflow",
"engagement",
"recipient",
"lastSentAt",
"sent",
"opened",
"clicked",
"bounced",
"complained"
],
"type": "string",
"description": "Sort field. Valid fields depend on the requested view."
}
},
"description": "Optional row sort. Overview ignores sorting."
},
"view": {
"enum": [
"overview",
"notifications",
"recipients",
"workflow_runs"
],
"type": "string",
"description": "Analytics surface to query: overview cards, notification rows, recipient rows, or workflow run rows."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum rows to return. Defaults to 25 and is capped at 100."
},
"range": {
"type": "object",
"properties": {
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp upper bound."
},
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp lower bound."
}
},
"description": "Optional explicit timestamp range. Overrides window and is applied to the view's primary timestamp."
},
"cursor": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Opaque pagination cursor from a previous get_analytics response."
},
"window": {
"enum": [
"1h",
"24h",
"7d",
"14d",
"30d",
"90d",
"all"
],
"type": "string",
"description": "Relative analytics window. Defaults to 30d. Ignored when range is provided."
},
"channel": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Notification channel for overview and notification analytics. Defaults to email. Recipient analytics are email-only."
},
"filters": {
"type": "object",
"properties": {
"topicIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Email unsubscribe topic ids to include."
},
"recipient": {
"type": "string",
"maxLength": 320,
"description": "Email recipient search string."
},
"startedAt": {
"type": "object",
"properties": {
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp upper bound."
},
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Inclusive ISO timestamp lower bound."
}
},
"description": "Workflow run started timestamp range. Only applies to workflow_runs."
},
"engagement": {
"enum": [
"undelivered",
"bounced",
"complained",
"clicked",
"opened"
],
"type": "string",
"description": "Email engagement filter."
},
"runStatuses": {
"type": "array",
"items": {
"enum": [
"RUNNING",
"PAUSED",
"COMPLETED",
"FAILED",
"SKIPPED",
"CANCELLED"
],
"type": "string"
},
"maxItems": 6,
"description": "Workflow run statuses to include. Only applies to workflow_runs."
},
"workflowIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Workflow ids to include."
},
"workflowRunId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow run id to include for notification analytics."
},
"slackWebhookIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Slack webhook ids to include for Slack notification analytics."
},
"workflowStepRunId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow step run id to include for notification analytics."
},
"notificationStatuses": {
"type": "array",
"items": {
"enum": [
"sent",
"pending",
"releasable",
"failed",
"canceled",
"suppressed",
"opted_out"
],
"type": "string"
},
"maxItems": 7,
"description": "Email notification lifecycle statuses to include."
}
},
"description": "Optional analytics filters. Unsupported combinations return a clear error."
},
"include": {
"type": "array",
"items": {
"enum": [
"summary",
"series",
"rows",
"recentEvents",
"segments"
],
"type": "string"
},
"maxItems": 5,
"description": "Optional response sections to include. Defaults depend on the requested view."
},
"timeZone": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "IANA timezone for daily series bucketing. Defaults to UTC."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id to query analytics from. Required when access is ambiguous."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Get analytics",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_lifecycle_report — Get lifecycle report
Side effect: creates a preparation request when no report is ready or refresh is true and the latest report became ready more than 24 hours ago; repeat calls reuse an open request. Pass refresh: true only when the user asks for a new report; when checking on a pending report, call without refresh. Use for Dreamlit's prepared lifecycle analysis: key metrics worth tracking, the signup-to-paid funnel and where users drop off, deliverability health, and which stages (welcome, onboarding, engagement, retention, winback) have no emails yet. Available on Pro and Scale plans only. Reports are prepared by Dreamlit's agents and reviewed by our team. Returns a ready report or a processing state while Dreamlit prepares it; check back later. The requester is also emailed when ready. Does not return raw notification analytics; use get_analytics for that.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"refresh": {
"type": "boolean",
"description": "Pass refresh: true only when the user asks for a new report; when checking on a pending report, call without refresh. Reuses an open request, otherwise returns the latest report if it was ready within the last 24 hours, or requests a new one."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id. Optional when a personal token pins the project or exactly one project is available in the approved workspace."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Get lifecycle report",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_recommendations — Get recommendations
Side effect: creates a preparation request when no report is ready or refresh is true and the latest report became ready more than 24 hours ago; repeat calls reuse an open request. Pass refresh: true only when the user asks for a new report; when checking on a pending report, call without refresh. Use for Dreamlit's prioritized recommendations on which emails or workflows to add and what to fix or change in existing ones. Available on Pro and Scale plans only. Reports are prepared by Dreamlit's agents and reviewed by our team. Returns a ready report or a processing state while Dreamlit prepares it; check back later. The requester is also emailed when ready. Does not return raw notification analytics; use get_analytics for that.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"refresh": {
"type": "boolean",
"description": "Pass refresh: true only when the user asks for a new report; when checking on a pending report, call without refresh. Reuses an open request, otherwise returns the latest report if it was ready within the last 24 hours, or requests a new one."
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Project id. Optional when a personal token pins the project or exactly one project is available in the approved workspace."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Get recommendations",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}send_workflow_test — Send workflow test
Side effect when confirmSend is true: sends one current draft email or Slack message for review, but does not publish, schedule, or edit the workflow. Use after authoring or inspection when the user wants to verify an important message before publishing. Returns sent-test details, app URLs, a confirmation request, or a clarification request with user-facing message choices. If the test has no data because row level security hides a source table's rows from Dreamlit, returns error code table_rows_hidden_by_rls with unreadableTables[].fixSql to run, or ask the user to run, in the Supabase SQL editor. Do not expose test target ids as copy; ask users to choose by message label and confirm before sending.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"description": "Set to true only after the user explicitly confirms sending this selected test message. If omitted or false, Dreamlit returns confirmation_required and does not send."
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Send workflow test",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}prepare_publish — Prepare publish
Read-only validation step before publishing. Use after the user asks to publish and after inspecting the workflow if needed. Returns validation status, publish mode, preview URL, and a confirmation payload with version/timestamp safety checks for confirm_publish. Does not publish or schedule anything by itself.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to validate and prepare for explicit publish approval."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Prepare publish",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}confirm_publish — Confirm publish
Use only after explicit user confirmation and a prior prepare_publish result to publish or schedule a Dreamlit workflow. Side effect: installs live database/repeating/auth triggers, schedules or sends broadcasts, and may enable notification delivery; sandbox mode can hold notifications for inspection. Returns the published workflow status and app URLs. Do not call speculatively or without carrying forward the prepare_publish safety fields.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Confirm publish",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}unpublish_workflow — Unpublish workflow
Use after explicit user intent to unpublish a Dreamlit workflow. Side effect: disables live triggers or schedules so no new runs start. Runs already in progress keep sending unless inProgressRuns is "stop". If the workflow has in-progress runs and inProgressRuns is omitted, returns clarification_required with the count and changes nothing: ask the user whether to stop those runs or let them finish, then call again with their choice. Returns updated workflow status, stopped run counts (allRunsStopped, remainingRunCount), and app URLs. If some runs could not be stopped, ask the user, then call again with inProgressRuns "stop": on an already-unpublished workflow it only stops the runs still in progress. Do not use for deleting drafts, canceling one broadcast run, or editing workflow content.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to unpublish and disable live triggers or schedules."
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string",
"description": "What happens to runs already in progress, including runs waiting at a wait step. \"stop\" stops them so they send nothing more; \"let_finish\" lets them keep going and send. Required when the workflow has in-progress runs: ask the user, then call again with their choice. On an already-unpublished workflow, \"stop\" stops the runs still in progress."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"result"
],
"properties": {
"result": {
"oneOf": [
{
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"status": {
"type": "string",
"const": "success"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"auth": {
"type": "object",
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string"
}
},
"additionalProperties": false
},
"status": {
"type": "string",
"const": "auth_required"
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"clarification"
],
"properties": {
"status": {
"type": "string",
"const": "clarification_required"
},
"clarification": {
"anyOf": [
{
"type": "object",
"required": [
"message",
"workflowId",
"projectId",
"orgId",
"chatSessionId",
"userMessageId",
"assistantMessageId",
"appUrls"
],
"properties": {
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"workflows"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatSessionId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"userMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"assistantMessageId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"testableMessages",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "test_message_selection"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"testableMessages": {
"type": "array",
"items": {
"type": "object",
"required": [
"testTargetId",
"messageType",
"label",
"requiresRecipient"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"destination": {
"type": "string"
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string"
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"requiresRecipient": {
"type": "boolean"
}
},
"additionalProperties": false
},
"minItems": 2
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"message",
"workflowId",
"projectId",
"orgId",
"inProgressRunCount",
"options",
"appUrls"
],
"properties": {
"kind": {
"type": "string",
"const": "unpublish_in_progress_runs"
},
"orgId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"inProgressRuns",
"label",
"recommended"
],
"properties": {
"label": {
"type": "string"
},
"recommended": {
"type": "boolean"
},
"inProgressRuns": {
"enum": [
"stop",
"let_finish"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"inProgressRunCount": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"confirmation"
],
"properties": {
"status": {
"type": "string",
"const": "confirmation_required"
},
"confirmation": {
"anyOf": [
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "publish"
},
"input": {
"type": "object",
"required": [
"workflowId"
],
"properties": {
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id to publish."
},
"isSandboxed": {
"type": "boolean",
"description": "Whether to publish in sandbox mode so notifications are held for inspection."
},
"expectedUpdatedAtIso": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
],
"description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
},
"expectedEditableVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Editable version id returned by prepare_publish, used as a safety check."
},
"expectedPublishedVersionId": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Published version id returned by prepare_publish, used as a safety check."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "confirm_publish"
},
"appUrls": {
"type": "object",
"required": [
"workflow"
],
"properties": {
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"kind",
"action",
"input",
"message",
"previewUrl",
"appUrls",
"summary",
"warnings"
],
"properties": {
"kind": {
"type": "string",
"const": "send_workflow_test"
},
"input": {
"type": "object",
"required": [
"workflowId",
"confirmSend"
],
"properties": {
"rowData": {
"type": "object",
"description": "Optional sample data for rendering draft message variables during the test. If omitted, Dreamlit uses the same default preview data as the web builder when available.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflowId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Workflow id whose editable draft message should be tested."
},
"confirmSend": {
"type": "boolean",
"const": true
},
"messageType": {
"enum": [
"email",
"slack"
],
"type": "string",
"description": "Optional message type filter when selecting a draft message to test."
},
"testTargetId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label."
},
"testRecipientEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address."
}
},
"additionalProperties": false
},
"action": {
"type": "string",
"const": "send_workflow_test"
},
"appUrls": {
"type": "object",
"required": [
"workflow",
"preview"
],
"properties": {
"preview": {
"type": "string",
"format": "uri"
},
"workflow": {
"type": "string",
"format": "uri"
},
"workflows": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"message": {
"type": "string"
},
"summary": {
"type": "array",
"items": {
"type": "string"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"previewUrl": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
}
]
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"handoff"
],
"properties": {
"status": {
"type": "string",
"const": "handoff_required"
},
"handoff": {
"type": "object",
"required": [
"kind",
"reason",
"message",
"url",
"instructions"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"kind": {
"type": "string",
"const": "browser"
},
"reason": {
"type": "string"
},
"blocker": {
"type": "object",
"required": [
"code",
"detail",
"appliedActionCount"
],
"properties": {
"code": {
"enum": [
"step_needs_detail",
"step_not_editable",
"step_not_built",
"request_unclear"
],
"type": "string",
"description": "step_needs_detail: answer `detail` in a follow-up create_or_update_workflow call with the same workflowId. step_not_editable: change a different step instead. step_not_built: retry once, then finish in the browser. request_unclear: describe the change in more detail and retry."
},
"detail": {
"type": "string",
"description": "The specific missing detail or blocking rule, in plain language."
},
"stepType": {
"enum": [
"database_trigger",
"broadcast_trigger",
"repeating_trigger",
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"appliedActionCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
"additionalProperties": false
},
"message": {
"type": "string"
},
"instructions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"code": {
"type": "string"
},
"status": {
"type": "string",
"const": "error"
},
"helpUrl": {
"type": "string",
"format": "uri",
"description": "Guide or support contact for resolving the problem in the message."
},
"message": {
"type": "string"
},
"resetAt": {
"type": "string",
"description": "quota_exceeded: when this month's AI usage resets (ISO 8601)."
},
"stepEdits": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"stepId",
"status",
"changedFields"
],
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"enum": [
"step_not_found",
"step_not_editable",
"field_not_for_step_type",
"duplicate_step",
"invalid_value",
"query_failed",
"query_drops_used_fields",
"related_edit_failed",
"save_failed"
],
"type": "string",
"description": "step_not_found: get fresh step ids from get_workflow_and_preview_url. step_not_editable: triggers can't be edited here; use create_or_update_workflow. field_not_for_step_type: send only fields for that step's type. duplicate_step: combine edits to one step. invalid_value: fix the value as the message says. query_failed: fix the SQL. query_drops_used_fields: keep returning fields, or edit the steps that use them in the same call. related_edit_failed: a related edit in this call (a SQL edit above or below this step) failed; fix it and send both again. save_failed: try again."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "query_drops_used_fields: fields later steps still use that the new query no longer returns."
},
"message": {
"type": "string"
}
},
"additionalProperties": false
},
"index": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Position of the edit in the request."
},
"status": {
"enum": [
"applied",
"failed"
],
"type": "string"
},
"stepId": {
"type": "string"
},
"stepType": {
"enum": [
"query",
"wait",
"email",
"slack"
],
"type": "string"
},
"stepTitle": {
"type": "string"
},
"changedFields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"description": "edit_workflow_steps: what happened to each edit when none could be applied."
},
"billingUrl": {
"type": "string",
"format": "uri",
"description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan."
},
"unreadableTables": {
"type": "array",
"items": {
"type": "object",
"required": [
"schema",
"table",
"fixSql"
],
"properties": {
"table": {
"type": "string"
},
"fixSql": {
"type": "string"
},
"schema": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "table_rows_hidden_by_rls: tables Dreamlit can see but not read rows from, each with fixSql that adds Dreamlit's read policy. Run fixSql, or ask the user to run it, in the Supabase SQL editor, then try again."
},
"retryAfterSeconds": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}
],
"description": "Dreamlit MCP result. success responses contain data and appUrls when relevant; auth_required, clarification_required, confirmation_required, handoff_required, and error responses explain the next action."
}
},
"additionalProperties": false
}{
"title": "Unpublish workflow",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}Prompts
Not advertised
Resources
1 advertised
dreamlit-mcp-guide — Dreamlit MCP Guide
High-level guidance for prompting Dreamlit and using the Dreamlit MCP tools.
dreamlit://mcp/guide90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-06: 1 of 1 checks answered
- 2026-11-07: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1186 ms
- 95th percentile latency
- 1186 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1186 ms · metadata changed · 16 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http dreamlit-mcp https://mcp.dreamlit.ai/mcpCodex
codex mcp add dreamlit-mcp --url https://mcp.dreamlit.ai/mcpCursor
{
"mcpServers": {
"dreamlit-mcp": {
"url": "https://mcp.dreamlit.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"dreamlit-mcp": {
"type": "streamableHttp",
"url": "https://mcp.dreamlit.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"dreamlit-mcp": {
"type": "http",
"url": "https://mcp.dreamlit.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http dreamlit-mcp https://mcp.dreamlit.ai/mcpClaude Desktop
https://mcp.dreamlit.ai/mcpWindsurf
{
"mcpServers": {
"dreamlit-mcp": {
"serverUrl": "https://mcp.dreamlit.ai/mcp"
}
}
}Let your agent find its tools
Find servers like Dreamlit MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other crm, sales, and marketing servers
Do you run Dreamlit MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.