{
  "data": {
    "a": {
      "slug": "dreamlit",
      "name": "Dreamlit",
      "vendor": "Notika AI",
      "vendorUrl": "https://dreamlit.ai",
      "kind": "mcp",
      "category": "lifecycle-marketing",
      "summary": "Dreamlit is a lifecycle email service that runs notification workflows from a connected Supabase or Postgres database. AI agents build, test and publish those workflows and read their analytics through a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/dreamlit",
      "markdownUrl": "https://www.anchorterminal.com/tools/dreamlit.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/dreamlit.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dreamlit.json",
      "dns": "dreamlit.grade.anchorterminal.com",
      "repo": "https://github.com/dreamlit-ai/dreamlit-mcp",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.dreamlit.ai/mcp",
      "packages": [],
      "auth": "oauth",
      "authNotes": "OAuth from the MCP client to one Dreamlit workspace, with scopes `workflows:read`, `workflows:write`, `workflows:publish` and `analytics:read`. Clients that can't do OAuth use a project-scoped personal access token (`dlpt_`) with chosen scopes, shown once, sent as a Bearer header. Accounts and database connections are set up in the web app first.",
      "pricing": "paid",
      "pricingNotes": "Pro $20 a month ($16 billed yearly) with 30,000 emails and 250 agent credits; Scale $99 ($79 yearly) with 100,000 emails; Enterprise custom. No free plan for new accounts. MCP calls carry no extra charge. Autopilot, a done-for-you service, is priced separately.",
      "priceSummary": "$20 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in llms.txt, pricing.md or the MCP docs (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 16,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://dreamlit.ai/docs/resources/mcp-server",
      "llmsTxt": "https://dreamlit.ai/llms.txt",
      "registryName": "ai.dreamlit/mcp",
      "capabilities": [
        "marketing.journeys",
        "marketing.campaigns",
        "marketing.events",
        "email.send",
        "email.templates",
        "email.analytics"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "mcp",
        "remote-mcp",
        "mcp-registry",
        "oauth",
        "llms-txt",
        "approvals",
        "status-page",
        "supabase",
        "postgres"
      ],
      "lastRelease": "2026-10-12",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57,
        "grade": "C",
        "agentReady": false,
        "rank": 809,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 9,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 80,
          "payments": 10,
          "reliability": 51,
          "schema": 59,
          "security": 74,
          "transparency": 59
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Scoped OAuth and a two-step prepare-then-confirm publish let an agent draft and test lifecycle workflows without sending anything live by mistake. There is no REST API or published rate limit, tool schemas aren't public outside a session, there's no free plan, and its security page and privacy policy disagree on retention.",
        "bestFor": "Small product teams on Supabase or Postgres who want their coding agent to build lifecycle and transactional email workflows.",
        "strengths": [
          "Separate OAuth scopes for reading, drafting, publishing and analytics, and project-scoped tokens",
          "Nothing goes live without `prepare_publish` followed by an approved `confirm_publish`",
          "`send_workflow_test` sends a draft to the user or a chosen address without publishing",
          "Better Stack status page with 90 days of history for the web app and workflow engine",
          "Dated changelog with eight entries between 10 August and 12 October 2026"
        ],
        "weaknesses": [
          "No REST API, SDK or OpenAPI; the MCP server is the only programmatic route",
          "No rate limits, 429 guidance or idempotency documented for MCP calls",
          "No free plan for new accounts; Pro starts at $20 a month",
          "The status page has no component for the MCP server",
          "The security page says no copy of data is kept, while the privacy policy keeps workflow history and delivery events for up to a year"
        ],
        "agentNotes": [
          "Call `get_status` first to see the workspace, project setup state and prompting guidance",
          "Use `send_workflow_test` to the user before `prepare_publish`, and call `confirm_publish` only after the user approves the returned payload",
          "Request `workflows:read` and `analytics:read` only when the task is reporting, so the grant can't publish",
          "Expect a browser hand-off link when setup or an unsupported edit needs the web app, and pass it to the user"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 80,
          "payments": 10,
          "reliability": 51,
          "schema": 59,
          "security": 74,
          "transparency": 42
        },
        "provenanceScore": 75,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "claudeCode": "claude mcp add --transport http dreamlit https://mcp.dreamlit.ai/mcp",
        "config": {
          "mcpServers": {
            "dreamlit": {
              "url": "https://mcp.dreamlit.ai/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/marketing.journeys",
        "tool": "https://letme.dev/dreamlit"
      },
      "area": "communication",
      "unitPrices": [
        {
          "item": "Pro",
          "unit": "month",
          "usd": 20,
          "note": "30,000 emails a month, 250 agent credits; $16 billed yearly"
        },
        {
          "item": "Scale",
          "unit": "month",
          "usd": 99,
          "note": "100,000 emails a month, 500 agent credits; $79 billed yearly"
        }
      ],
      "provenance": {
        "legalEntity": "Notika AI (d/b/a Dreamlit AI)",
        "domain": "dreamlit.ai",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://dreamlit.ai/terms-of-service",
        "privacy": "https://dreamlit.ai/privacy-policy",
        "statusPage": "https://status.dreamlit.ai",
        "changelog": "https://dreamlit.ai/changelog",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "The terms and privacy policy, both last updated 29 January 2026, name Notika AI (d/b/a Dreamlit AI).",
          "dreamlit.ai/robots.txt allows all paths with Content-Signal ai-input=yes. The terms contain no clause on automated access to the website that we found.",
          "RDAP for dreamlit.ai returned a transfer event (8 June 2025) but no registration date.",
          "/.well-known/security.txt returns 404. The security page claims penetration testing and a bug bounty programme without a link; the MCP repository's SECURITY.md routes reports to the support address.",
          "The privacy policy says subprocessors are listed and SCCs are offered in a DPA at dreamlit.ai/dpa."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/dreamlit.json",
      "live": {
        "slug": "dreamlit",
        "probe": {
          "target": "https://mcp.dreamlit.ai/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-11-07T18:20:21.651954632Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 209,
          "lastNote": "initialize answered",
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 155,
          "p95ms24h": 303,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.dreamlit.ai",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-07T04:47:40.393037973Z"
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "ai.dreamlit/mcp",
            "version": "0.1.0",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          }
        ],
        "githubStars": 0,
        "securityTxt": {
          "url": "https://dreamlit.ai/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T15:59:27.690762051Z"
        },
        "llmsTxt": {
          "url": "https://dreamlit.ai/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:19.99369807Z"
        },
        "pages": [
          {
            "url": "https://dreamlit.ai/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:08:59.883908631Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d5efd0517602"
          },
          {
            "url": "https://dreamlit.ai/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:09:02.82685007Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "5cea1328f21d"
          },
          {
            "url": "https://dreamlit.ai/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:09:04.008676629Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "9fbc316c2506"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.dreamlit.ai/mcp",
          "checkedAt": "2026-11-07T01:43:51.385315264Z",
          "status": "ok",
          "protocol": "2025-11-25",
          "tools": [
            {
              "name": "get_status",
              "title": "Get status",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "projectId": {
                    "description": "Optional project id. Include it to return project setup, schema hints, and authoring context.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "workflowId": {
                    "description": "Optional workflow id. Include it to return concise workflow state and preview URL.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get status"
              }
            },
            {
              "name": "create_or_update_workflow",
              "title": "Create or update workflow",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "name": {
                    "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.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "Target project id for creating a new workflow draft.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "prompt": {
                    "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.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "startNewChat": {
                    "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.",
                    "type": "boolean"
                  },
                  "userCurrentTimeIso": {
                    "description": "User's current time as an ISO timestamp with offset, useful for relative schedule requests.",
                    "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": "string"
                  },
                  "userCurrentTimeZoneId": {
                    "description": "IANA timezone id for the user, useful for repeating workflows and scheduled broadcasts.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "userEmailStepComments": {
                    "description": "Optional inline comments for revising email step content.",
                    "items": {
                      "properties": {
                        "comment": {
                          "description": "User's requested change.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "onCodeLineText": {
                          "description": "Nearby email editor text for anchoring the comment.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "userHighlightedText": {
                          "description": "Specific text selected by the user.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "workflowStepId": {
                          "description": "Workflow step id that the user commented on.",
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "workflowStepId",
                        "comment",
                        "onCodeLineText",
                        "userHighlightedText"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "workflowId": {
                    "description": "Existing workflow id to continue editing. Use get_workflow_and_preview_url first when changing an existing workflow.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "prompt"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create or update workflow"
              }
            },
            {
              "name": "edit_workflow_steps",
              "title": "Edit workflow steps",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "edits": {
                    "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.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "description": {
                          "description": "Step description for email, query, or Slack steps. Empty string clears it.",
                          "type": "string"
                        },
                        "emailFromAddress": {
                          "description": "Sender address on one of the project's sending domains.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "emailFromName": {
                          "description": "Sender name. Empty string clears it.",
                          "type": "string"
                        },
                        "emailHtml": {
                          "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 }}.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "emailPreviewText": {
                          "description": "Email preview text. Liquid allowed. Empty string clears it.",
                          "type": "string"
                        },
                        "emailReplyTo": {
                          "description": "Reply-to address. Empty string clears it.",
                          "type": "string"
                        },
                        "emailSubject": {
                          "description": "Email subject. Liquid allowed.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "emailTo": {
                          "description": "Recipient address or Liquid, such as {{ email }}.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "queryText": {
                          "description": "Full replacement SQL for a query step. Must stay read-only and keep returning the fields later steps use.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "slackTemplate": {
                          "description": "Full replacement Slack message. Liquid allowed.",
                          "minLength": 1,
                          "type": "string"
                        },
                        "stepId": {
                          "description": "Existing step id from get_workflow_and_preview_url.",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                        },
                        "wait": {
                          "description": "Replaces the whole wait rule: a fixed duration, or until the date and time in a row field.",
                          "oneOf": [
                            {
                              "properties": {
                                "amount": {
                                  "description": "How long to wait, up to 365 days in total.",
                                  "exclusiveMinimum": 0,
                                  "maximum": 9007199254740991,
                                  "type": "integer"
                                },
                                "kind": {
                                  "const": "duration",
                                  "type": "string"
                                },
                                "unit": {
                                  "enum": [
                                    "minutes",
                                    "hours",
                                    "days"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "kind",
                                "amount",
                                "unit"
                              ],
                              "type": "object"
                            },
                            {
                              "properties": {
                                "field": {
                                  "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.",
                                  "minLength": 1,
                                  "type": "string"
                                },
                                "kind": {
                                  "const": "until_row_field",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "kind",
                                "field"
                              ],
                              "type": "object"
                            }
                          ]
                        }
                      },
                      "required": [
                        "stepId"
                      ],
                      "type": "object"
                    },
                    "maxItems": 5,
                    "minItems": 1,
                    "type": "array"
                  },
                  "workflowId": {
                    "description": "Workflow whose draft to edit.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId",
                  "edits"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Edit workflow steps"
              }
            },
            {
              "name": "rename_workflow",
              "title": "Rename workflow",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "name": {
                    "description": "New workflow name. Leading and trailing spaces are removed; it can't be blank.",
                    "type": "string"
                  },
                  "workflowId": {
                    "description": "Workflow id to rename.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId",
                  "name"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Rename workflow"
              }
            },
            {
              "name": "move_workflow_to_folder",
              "title": "Move workflow to folder",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "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": {
                    "description": "Workflow id to move.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId",
                  "folder"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Move workflow to folder"
              }
            },
            {
              "name": "list_projects",
              "title": "List projects",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "limit": {
                    "default": 25,
                    "description": "Maximum number of projects to return.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "search": {
                    "description": "Optional project name search string.",
                    "maxLength": 200,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List projects"
              }
            },
            {
              "name": "list_workflows",
              "title": "List workflows",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "limit": {
                    "default": 80,
                    "description": "Maximum number of workflows to return for this page.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "offset": {
                    "default": 0,
                    "description": "Zero-based workflow offset for pagination. Use nextOffset from the previous response to fetch the next page.",
                    "maximum": 9007199254740991,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "Project id to list workflows from. Required when access is ambiguous.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "search": {
                    "description": "Optional workflow name or description search string.",
                    "maxLength": 200,
                    "type": "string"
                  },
                  "triggerFilters": {
                    "description": "Optional trigger type filters. Use broadcast only for one-time audience emails.",
                    "items": {
                      "enum": [
                        "auth_email",
                        "database",
                        "broadcast",
                        "repeating",
                        "none"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List workflows"
              }
            },
            {
              "name": "list_brand_styles",
              "title": "List brand styles",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "limit": {
                    "default": 50,
                    "description": "Maximum number of brand styles to return for this page.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "offset": {
                    "default": 0,
                    "description": "Zero-based brand style offset for pagination. Use nextOffset from the previous response to fetch the next page.",
                    "maximum": 9007199254740991,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "Project id to list brand styles from. Required when access is ambiguous.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List brand styles"
              }
            },
            {
              "name": "get_workflow_and_preview_url",
              "title": "Get workflow and preview URL",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "includeEmailHtml": {
                    "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": "boolean"
                  },
                  "workflowId": {
                    "description": "Workflow id to inspect before editing, verifying, or publishing.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get workflow and preview URL"
              }
            },
            {
              "name": "get_analytics",
              "title": "Get analytics",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "channel": {
                    "description": "Notification channel for overview and notification analytics. Defaults to email. Recipient analytics are email-only.",
                    "enum": [
                      "email",
                      "slack"
                    ],
                    "type": "string"
                  },
                  "cursor": {
                    "description": "Opaque pagination cursor from a previous get_analytics response.",
                    "maxLength": 2048,
                    "minLength": 1,
                    "type": "string"
                  },
                  "filters": {
                    "description": "Optional analytics filters. Unsupported combinations return a clear error.",
                    "properties": {
                      "engagement": {
                        "description": "Email engagement filter.",
                        "enum": [
                          "undelivered",
                          "bounced",
                          "complained",
                          "clicked",
                          "opened"
                        ],
                        "type": "string"
                      },
                      "notificationStatuses": {
                        "description": "Email notification lifecycle statuses to include.",
                        "items": {
                          "enum": [
                            "sent",
                            "pending",
                            "releasable",
                            "failed",
                            "canceled",
                            "suppressed",
                            "opted_out"
                          ],
                          "type": "string"
                        },
                        "maxItems": 7,
                        "type": "array"
                      },
                      "recipient": {
                        "description": "Email recipient search string.",
                        "maxLength": 320,
                        "type": "string"
                      },
                      "runStatuses": {
                        "description": "Workflow run statuses to include. Only applies to workflow_runs.",
                        "items": {
                          "enum": [
                            "RUNNING",
                            "PAUSED",
                            "COMPLETED",
                            "FAILED",
                            "SKIPPED",
                            "CANCELLED"
                          ],
                          "type": "string"
                        },
                        "maxItems": 6,
                        "type": "array"
                      },
                      "slackWebhookIds": {
                        "description": "Slack webhook ids to include for Slack notification analytics.",
                        "items": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "startedAt": {
                        "description": "Workflow run started timestamp range. Only applies to workflow_runs.",
                        "properties": {
                          "from": {
                            "description": "Inclusive ISO timestamp lower bound.",
                            "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": "string"
                          },
                          "to": {
                            "description": "Inclusive ISO timestamp upper bound.",
                            "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": "string"
                          }
                        },
                        "type": "object"
                      },
                      "topicIds": {
                        "description": "Email unsubscribe topic ids to include.",
                        "items": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "workflowIds": {
                        "description": "Workflow ids to include.",
                        "items": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "workflowRunId": {
                        "description": "Workflow run id to include for notification analytics.",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                      },
                      "workflowStepRunId": {
                        "description": "Workflow step run id to include for notification analytics.",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                      }
                    },
                    "type": "object"
                  },
                  "include": {
                    "description": "Optional response sections to include. Defaults depend on the requested view.",
                    "items": {
                      "enum": [
                        "summary",
                        "series",
                        "rows",
                        "recentEvents",
                        "segments"
                      ],
                      "type": "string"
                    },
                    "maxItems": 5,
                    "type": "array"
                  },
                  "limit": {
                    "description": "Maximum rows to return. Defaults to 25 and is capped at 100.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "Project id to query analytics from. Required when access is ambiguous.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "range": {
                    "description": "Optional explicit timestamp range. Overrides window and is applied to the view's primary timestamp.",
                    "properties": {
                      "from": {
                        "description": "Inclusive ISO timestamp lower bound.",
                        "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": "string"
                      },
                      "to": {
                        "description": "Inclusive ISO timestamp upper bound.",
                        "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": "string"
                      }
                    },
                    "type": "object"
                  },
                  "sort": {
                    "description": "Optional row sort. Overview ignores sorting.",
                    "properties": {
                      "dir": {
                        "description": "Sort direction. Defaults to desc.",
                        "enum": [
                          "asc",
                          "desc"
                        ],
                        "type": "string"
                      },
                      "field": {
                        "description": "Sort field. Valid fields depend on the requested view.",
                        "enum": [
                          "timestamp",
                          "sentTo",
                          "subject",
                          "workflow",
                          "engagement",
                          "recipient",
                          "lastSentAt",
                          "sent",
                          "opened",
                          "clicked",
                          "bounced",
                          "complained"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "field"
                    ],
                    "type": "object"
                  },
                  "timeZone": {
                    "description": "IANA timezone for daily series bucketing. Defaults to UTC.",
                    "maxLength": 64,
                    "minLength": 1,
                    "type": "string"
                  },
                  "view": {
                    "description": "Analytics surface to query: overview cards, notification rows, recipient rows, or workflow run rows.",
                    "enum": [
                      "overview",
                      "notifications",
                      "recipients",
                      "workflow_runs"
                    ],
                    "type": "string"
                  },
                  "window": {
                    "description": "Relative analytics window. Defaults to 30d. Ignored when range is provided.",
                    "enum": [
                      "1h",
                      "24h",
                      "7d",
                      "14d",
                      "30d",
                      "90d",
                      "all"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "view"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get analytics"
              }
            },
            {
              "name": "get_lifecycle_report",
              "title": "Get lifecycle report",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "projectId": {
                    "description": "Project id. Optional when a personal token pins the project or exactly one project is available in the approved workspace.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "refresh": {
                    "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.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Get lifecycle report"
              }
            },
            {
              "name": "get_recommendations",
              "title": "Get recommendations",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "projectId": {
                    "description": "Project id. Optional when a personal token pins the project or exactly one project is available in the approved workspace.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "refresh": {
                    "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.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Get recommendations"
              }
            },
            {
              "name": "send_workflow_test",
              "title": "Send workflow test",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "confirmSend": {
                    "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.",
                    "type": "boolean"
                  },
                  "messageType": {
                    "description": "Optional message type filter when selecting a draft message to test.",
                    "enum": [
                      "email",
                      "slack"
                    ],
                    "type": "string"
                  },
                  "rowData": {
                    "additionalProperties": {},
                    "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"
                    },
                    "type": "object"
                  },
                  "testRecipientEmail": {
                    "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                    "type": "string"
                  },
                  "testTargetId": {
                    "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  },
                  "workflowId": {
                    "description": "Workflow id whose editable draft message should be tested.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Send workflow test"
              }
            },
            {
              "name": "prepare_publish",
              "title": "Prepare publish",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "workflowId": {
                    "description": "Workflow id to validate and prepare for explicit publish approval.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Prepare publish"
              }
            },
            {
              "name": "confirm_publish",
              "title": "Confirm publish",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "expectedEditableVersionId": {
                    "anyOf": [
                      {
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Editable version id returned by prepare_publish, used as a safety check."
                  },
                  "expectedPublishedVersionId": {
                    "anyOf": [
                      {
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Published version id returned by prepare_publish, used as a safety check."
                  },
                  "expectedUpdatedAtIso": {
                    "anyOf": [
                      {
                        "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": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                  },
                  "isSandboxed": {
                    "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                    "type": "boolean"
                  },
                  "workflowId": {
                    "description": "Workflow id to publish.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Confirm publish"
              }
            },
            {
              "name": "unpublish_workflow",
              "title": "Unpublish workflow",
              "description": "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.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "inProgressRuns": {
                    "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.",
                    "enum": [
                      "stop",
                      "let_finish"
                    ],
                    "type": "string"
                  },
                  "workflowId": {
                    "description": "Workflow id to unpublish and disable live triggers or schedules.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                  }
                },
                "required": [
                  "workflowId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "result": {
                    "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.",
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": {},
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "status": {
                            "const": "success",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "data"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "auth": {
                            "additionalProperties": false,
                            "properties": {
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "reason"
                            ],
                            "type": "object"
                          },
                          "message": {
                            "type": "string"
                          },
                          "status": {
                            "const": "auth_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clarification": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "workflows"
                                    ],
                                    "type": "object"
                                  },
                                  "assistantMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "chatSessionId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "userMessageId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "chatSessionId",
                                  "userMessageId",
                                  "assistantMessageId",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "test_message_selection",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "testableMessages": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "description": {
                                          "type": "string"
                                        },
                                        "destination": {
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "messageType": {
                                          "enum": [
                                            "email",
                                            "slack"
                                          ],
                                          "type": "string"
                                        },
                                        "requiresRecipient": {
                                          "type": "boolean"
                                        },
                                        "testTargetId": {
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                        }
                                      },
                                      "required": [
                                        "testTargetId",
                                        "messageType",
                                        "label",
                                        "requiresRecipient"
                                      ],
                                      "type": "object"
                                    },
                                    "minItems": 2,
                                    "type": "array"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "testableMessages",
                                  "appUrls"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "inProgressRunCount": {
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991,
                                    "type": "integer"
                                  },
                                  "kind": {
                                    "const": "unpublish_in_progress_runs",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "options": {
                                    "items": {
                                      "additionalProperties": false,
                                      "properties": {
                                        "inProgressRuns": {
                                          "enum": [
                                            "stop",
                                            "let_finish"
                                          ],
                                          "type": "string"
                                        },
                                        "label": {
                                          "type": "string"
                                        },
                                        "recommended": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "inProgressRuns",
                                        "label",
                                        "recommended"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "orgId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "projectId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  },
                                  "workflowId": {
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "message",
                                  "workflowId",
                                  "projectId",
                                  "orgId",
                                  "inProgressRunCount",
                                  "options",
                                  "appUrls"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "clarification_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "clarification"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "confirmation": {
                            "anyOf": [
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "confirm_publish",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "expectedEditableVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Editable version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedPublishedVersionId": {
                                        "anyOf": [
                                          {
                                            "format": "uuid",
                                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Published version id returned by prepare_publish, used as a safety check."
                                      },
                                      "expectedUpdatedAtIso": {
                                        "anyOf": [
                                          {
                                            "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": "string"
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Workflow updatedAt timestamp returned by prepare_publish, used as a safety check."
                                      },
                                      "isSandboxed": {
                                        "description": "Whether to publish in sandbox mode so notifications are held for inspection.",
                                        "type": "boolean"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id to publish.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "publish",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              },
                              {
                                "additionalProperties": false,
                                "properties": {
                                  "action": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "appUrls": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "preview": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflow": {
                                        "format": "uri",
                                        "type": "string"
                                      },
                                      "workflows": {
                                        "format": "uri",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "workflow",
                                      "preview"
                                    ],
                                    "type": "object"
                                  },
                                  "input": {
                                    "additionalProperties": false,
                                    "properties": {
                                      "confirmSend": {
                                        "const": true,
                                        "type": "boolean"
                                      },
                                      "messageType": {
                                        "description": "Optional message type filter when selecting a draft message to test.",
                                        "enum": [
                                          "email",
                                          "slack"
                                        ],
                                        "type": "string"
                                      },
                                      "rowData": {
                                        "additionalProperties": {},
                                        "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"
                                        },
                                        "type": "object"
                                      },
                                      "testRecipientEmail": {
                                        "description": "Optional recipient for email tests. If omitted, Dreamlit sends to the authenticated user's email address.",
                                        "format": "email",
                                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                                        "type": "string"
                                      },
                                      "testTargetId": {
                                        "description": "Structured test target id from testableMessages. Do not show this id to users; ask them to choose by message label.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      },
                                      "workflowId": {
                                        "description": "Workflow id whose editable draft message should be tested.",
                                        "format": "uuid",
                                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-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": "string"
                                      }
                                    },
                                    "required": [
                                      "workflowId",
                                      "confirmSend"
                                    ],
                                    "type": "object"
                                  },
                                  "kind": {
                                    "const": "send_workflow_test",
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  },
                                  "previewUrl": {
                                    "format": "uri",
                                    "type": "string"
                                  },
                                  "summary": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "warnings": {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "kind",
                                  "action",
                                  "input",
                                  "message",
                                  "previewUrl",
                                  "appUrls",
                                  "summary",
                                  "warnings"
                                ],
                                "type": "object"
                              }
                            ]
                          },
                          "status": {
                            "const": "confirmation_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "confirmation"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "handoff": {
                            "additionalProperties": false,
                            "properties": {
                              "blocker": {
                                "additionalProperties": false,
                                "description": "Why Dreamlit stopped before finishing the draft. Changes counted in appliedActionCount are already saved.",
                                "properties": {
                                  "appliedActionCount": {
                                    "maximum": 9007199254740991,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "code": {
                                    "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.",
                                    "enum": [
                                      "step_needs_detail",
                                      "step_not_editable",
                                      "step_not_built",
                                      "request_unclear"
                                    ],
                                    "type": "string"
                                  },
                                  "detail": {
                                    "description": "The specific missing detail or blocking rule, in plain language.",
                                    "type": "string"
                                  },
                                  "stepTitle": {
                                    "type": "string"
                                  },
                                  "stepType": {
                                    "enum": [
                                      "database_trigger",
                                      "broadcast_trigger",
                                      "repeating_trigger",
                                      "query",
                                      "wait",
                                      "email",
                                      "slack"
                                    ],
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "code",
                                  "detail",
                                  "appliedActionCount"
                                ],
                                "type": "object"
                              },
                              "instructions": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "kind": {
                                "const": "browser",
                                "type": "string"
                              },
                              "message": {
                                "type": "string"
                              },
                              "reason": {
                                "type": "string"
                              },
                              "url": {
                                "format": "uri",
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "reason",
                              "message",
                              "url",
                              "instructions"
                            ],
                            "type": "object"
                          },
                          "status": {
                            "const": "handoff_required",
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "handoff"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "billingUrl": {
                            "description": "quota_exceeded or plan_upgrade_required: page where a workspace admin can buy AI credits or upgrade the plan.",
                            "format": "uri",
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          },
                          "helpUrl": {
                            "description": "Guide or support contact for resolving the problem in the message.",
                            "format": "uri",
                            "type": "string"
                          },
                          "message": {
                            "type": "string"
                          },
                          "resetAt": {
                            "description": "quota_exceeded: when this month's AI usage resets (ISO 8601).",
                            "type": "string"
                          },
                          "retryAfterSeconds": {
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991,
                            "type": "integer"
                          },
                          "status": {
                            "const": "error",
                            "type": "string"
                          },
                          "stepEdits": {
                            "description": "edit_workflow_steps: what happened to each edit when none could be applied.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "changedFields": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "error": {
                                  "additionalProperties": false,
                                  "properties": {
                                    "code": {
                                      "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.",
                                      "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"
                                    },
                                    "fields": {
                                      "description": "query_drops_used_fields: fields later steps still use that the new query no longer returns.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "code",
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                "index": {
                                  "description": "Position of the edit in the request.",
                                  "maximum": 9007199254740991,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "enum": [
                                    "applied",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "stepId": {
                                  "type": "string"
                                },
                                "stepTitle": {
                                  "type": "string"
                                },
                                "stepType": {
                                  "enum": [
                                    "query",
                                    "wait",
                                    "email",
                                    "slack"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "index",
                                "stepId",
                                "status",
                                "changedFields"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "unreadableTables": {
                            "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.",
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "fixSql": {
                                  "type": "string"
                                },
                                "schema": {
                                  "type": "string"
                                },
                                "table": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "schema",
                                "table",
                                "fixSql"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "status",
                          "message"
                        ],
                        "type": "object"
                      }
                    ]
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Unpublish workflow"
              }
            }
          ],
          "schemaTokens": 69715,
          "changedAt": "2026-11-07T01:43:51.385315264Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 69715,
            "counts": {
              "error": 0,
              "note": 0,
              "warn": 18
            },
            "findings": [
              {
                "rule": "TC18",
                "severity": "warn",
                "tool": "prepare_publish",
                "message": "readOnlyHint is true but the name says \"publish\"",
                "fix": "If it changes anything, readOnlyHint must be false."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "confirm_publish",
                "message": "the definition is about 4,360 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "create_or_update_workflow",
                "message": "the definition is about 4,866 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "edit_workflow_steps",
                "message": "the definition is about 4,839 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get_analytics",
                "message": "the definition is about 5,580 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get_lifecycle_report",
                "message": "the definition is about 4,217 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get_recommendations",
                "message": "the definition is about 4,188 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get_status",
                "message": "the definition is about 4,209 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get_workflow_and_preview_url",
                "message": "the definition is about 4,164 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "list_brand_styles",
                "message": "the definition is about 4,071 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "list_projects",
                "message": "the definition is about 3,956 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "list_workflows",
                "message": "the definition is about 4,289 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "move_workflow_to_folder",
                "message": "the definition is about 4,148 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "prepare_publish",
                "message": "the definition is about 3,999 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "rename_workflow",
                "message": "the definition is about 4,022 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "send_workflow_test",
                "message": "the definition is about 4,420 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "unpublish_workflow",
                "message": "the definition is about 4,231 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC23",
                "severity": "warn",
                "message": "16 tools, about 69,559 tokens of definitions",
                "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
              }
            ]
          }
        },
        "updatedAt": "2026-11-07T18:20:21.651954632Z"
      }
    },
    "answer": "MoEngage scores 65.7 (B) on agent readiness against Dreamlit's 57 (C), and leads in 4 of 7 scored categories. Dreamlit leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community.",
    "b": {
      "slug": "moengage",
      "name": "MoEngage",
      "vendor": "MoEngage, Inc.",
      "vendorUrl": "https://www.moengage.com",
      "kind": "http-api",
      "category": "lifecycle-marketing",
      "summary": "MoEngage is a hosted customer engagement platform that stores user profiles and events, builds segments and sends campaigns and flows by push, email, SMS and WhatsApp. Agents reach it through REST APIs and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/moengage",
      "markdownUrl": "https://www.anchorterminal.com/tools/moengage.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/moengage.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/moengage.json",
      "dns": "moengage.grade.anchorterminal.com",
      "license": "Proprietary service under MoEngage's Terms of Use and a customer agreement",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.moengage.com",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Access needs a MoEngage customer workspace, which is sold through sales. A dashboard user creates API keys under Settings, Account, APIs. The default is HTTP Basic with the Workspace ID as username and the API key as password, with separate keys for Data, Push, Inform, Campaigns and Personalise. An API key dashboard, in early access and enabled on request, adds named keys scoped to chosen API groups, OAuth 2.0 client credentials (access tokens of 5 to 60 minutes, refresh tokens of 30 days, issued at `https://oauth2-{dc}.moengage.com`) and AWS STS role ARNs. Segmentation and Inform accept Basic only. The MCP server uses OAuth with the user's own MoEngage login and role, a second factor, and a 30-day session with a 7-day idle timeout. No app review or partner approval was found.",
      "pricing": "paid",
      "pricingNotes": "No public prices. https://www.moengage.com/plans-and-pricing/ lists Growth and Enterprise plans, counted in monthly tracked users, with a sales contact and a one-year minimum commitment. No free tier, trial or self-serve signup was found. Each workspace has Live and Test environments and Inform has a sandbox host, but both sit inside a customer account, so an agent can't start without a contract. API and MCP calls aren't priced per call in any page read (checked 2026-10-09).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API documentation, the OpenAPI files, the pricing page or the legal pages (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": 52,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://www.moengage.com/docs/api/introduction",
      "llmsTxt": "https://www.moengage.com/docs/llms.txt",
      "openapi": "https://www.moengage.com/docs/api/data/data.yaml",
      "capabilities": [
        "marketing.profiles",
        "marketing.events",
        "marketing.segments",
        "marketing.campaigns",
        "marketing.journeys",
        "email.templates",
        "notify.push"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "oauth",
        "api-key",
        "openapi",
        "llms-txt",
        "closed-source",
        "sales-led",
        "enterprise",
        "eu-region",
        "status-page",
        "soc2",
        "sla"
      ],
      "lastRelease": "2026-10-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 65.7,
        "grade": "B",
        "agentReady": false,
        "rank": 403,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 5,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 68,
          "maintenance": 75,
          "payments": 0,
          "reliability": 76,
          "schema": 87,
          "security": 69,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-02"
        },
        "negative": 0,
        "verdict": "MoEngage publishes 37 OpenAPI files, a per-endpoint rate limit table, Markdown docs and a hosted MCP server that builds drafts and leaves publishing to a person. No price, trial or self-serve signup is published, and on 27 October 2026 the Push API was down across its data centres for about 11 hours.",
        "bestFor": "A team already on MoEngage that wants an agent to update profiles, track events, build filter segments, draft Push and Email campaigns and read campaign, flow and analytics results.",
        "strengths": [
          "37 public OpenAPI files linked from the docs index; the 36 read on 9 October held 140 operations, each with a summary and description",
          "A rate limit table with numbers for every endpoint group, plus `x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset` response headers",
          "The hosted MCP server at mcp.moengage.com uses OAuth tied to the user's role, masks PII attributes and cannot publish a campaign",
          "API keys can be scoped to chosen API groups, use OAuth 2.0 tokens of 5 to 60 minutes or AWS STS roles, and be limited by IP address",
          "A published SLA of 99.9 per cent monthly availability, a public DPA and a sub-processor list with locations dated 1 September 2026"
        ],
        "weaknesses": [
          "No public price, free tier or trial. The pricing page lists Growth and Enterprise plans with a one-year minimum and a sales contact only",
          "On 27 October 2026 the Push API was down across data centres for about 11 hours, and on 17 August the DC-03 Inform API returned HTTP 200 for 16 hours without sending some messages",
          "Scoped keys, OAuth 2.0 and AWS STS keys sit in an API key dashboard that is in early access and enabled on request",
          "Segmentation and Inform accept Basic authentication only, and new Push API keys can't be created",
          "No API deprecation policy was found, and no official server-side API client library was found in the documentation"
        ],
        "agentNotes": [
          "Take the data centre number from the dashboard URL and call `https://api-{dc}.moengage.com`. Data can't be moved between data centres",
          "Send an `Idempotency-Key` header (UUID v4) on V5 campaign writes and test sends, and a `transaction_id` on Inform alerts, which deduplicates for 5 minutes",
          "Use internal event and attribute names in segment filters, and run `deep_validate_segment_filters` first. A wrong event name is accepted and the count later fails with no reason",
          "Use `in` with a list for text equality in segment filters. `equals` returns a 400 that names no field",
          "Reuse an OAuth access token until it nears expiry. The token endpoint allows 5 requests a minute and 30 per 10 minutes for each key"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 65.7
          }
        ],
        "editorialScores": {
          "ergonomics": 68,
          "maintenance": 75,
          "payments": 0,
          "reliability": 76,
          "schema": 87,
          "security": 69,
          "transparency": 60
        },
        "provenanceScore": 91,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-02",
            "maintenance": "2026-11-02",
            "payments": "2026-11-02",
            "reliability": "2026-11-02",
            "schema": "2026-11-02",
            "security": "2026-11-02",
            "transparency": "2026-11-02"
          },
          "last": "2026-11-02",
          "lastMoved": "2026-11-02",
          "oldest": "2026-11-02",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl --request POST \\\n  --url https://api-{dc}.moengage.com/v1/customer/YOUR_WORKSPACE_ID \\\n  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n  --header 'Content-Type: application/json' \\\n  --data '{ \"type\": \"customer\", \"customer_id\": \"user_12345\" }'",
        "config": {
          "mcpServers": {
            "moengage": {
              "url": "https://mcp.moengage.com"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/marketing.profiles",
        "tool": "https://letme.dev/moengage"
      },
      "area": "communication",
      "provenance": {
        "legalEntity": "MoEngage, Inc.",
        "domain": "moengage.com",
        "domainRegistered": "2014-04-19",
        "endpointOnVendorDomain": true,
        "terms": "https://www.moengage.com/terms-of-use/",
        "privacy": "https://www.moengage.com/privacy-policy/",
        "statusPage": "https://status.moengage.com",
        "changelog": "https://www.moengage.com/docs/release-notes/product/2026/september-2026",
        "securityTxt": "none",
        "checked": "2026-11-02",
        "notes": [
          "The Terms of Use name MoEngage, Inc., a Delaware corporation, and say they govern the website and related software and services. They carry no date. The DPA and sub-processor list name MoEngage Global Inc.",
          "The acceptable use policy (last updated 14 May 2026) refers to a Master Service Agreement between MoEngage and its customers. That agreement isn't published.",
          "The privacy policy was last updated on 26 August 2026 and covers MoEngage as processor for its customers' end users.",
          "The API answers at api-{dc}.moengage.com and the MCP server at mcp.moengage.com, both on the vendor's domain.",
          "https://www.moengage.com/.well-known/security.txt returns 404 (re-read 2 November 2026). Reports go to the address in the responsible disclosure policy.",
          "Release notes are one page a month under /docs/release-notes/product/, with separate dated changelogs for each SDK.",
          "RDAP for moengage.com gives a registration date of 2014-04-19."
        ],
        "score": 91
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/moengage.json",
      "live": {
        "slug": "moengage",
        "probe": {
          "target": "https://mcp.moengage.com",
          "method": "get",
          "lastAt": "2026-11-07T18:20:40.383372405Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 71,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 99.99,
          "p50ms24h": 35,
          "p95ms24h": 127,
          "samples24h": 239,
          "samples30d": 7205,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 246
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.moengage.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T18:21:31.113682035Z"
        },
        "securityTxt": {
          "url": "https://moengage.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:17.164091584Z"
        },
        "llmsTxt": {
          "url": "https://www.moengage.com/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:33:13.621481424Z"
        },
        "domain": {
          "domain": "moengage.com",
          "registered": "2014-04-19",
          "source": "https://rdap.verisign.com/com/v1/domain/moengage.com",
          "checkedAt": "2026-11-01T14:21:21.091325535Z"
        },
        "pages": [
          {
            "url": "https://www.moengage.com/docs/release-notes/product/2026/september-2026",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:31:44.906126765Z",
            "changedAt": "2026-11-06T13:52:21.289294153Z",
            "fingerprint": "e0a462c3a13f"
          },
          {
            "url": "https://www.moengage.com/plans-and-pricing/",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-11-07T14:31:47.25902456Z",
            "changedAt": "2026-10-31T06:29:58.721060509Z",
            "fingerprint": "e799bed9be85"
          },
          {
            "url": "https://www.moengage.com/privacy-policy/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-11-07T14:31:50.470962503Z",
            "changedAt": "2026-11-04T08:42:47.835112355Z",
            "fingerprint": "4de27c3abe59"
          },
          {
            "url": "https://www.moengage.com/terms-of-use/",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-11-07T14:31:51.428269323Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3a3cf18334cc"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.moengage.com",
          "checkedAt": "2026-11-07T01:46:16.238795444Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:46:16.238795444Z"
        },
        "updatedAt": "2026-11-07T18:21:31.113682035Z"
      }
    },
    "edges": [
      {
        "by": 28,
        "category": "schema",
        "leads": "moengage",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "The registry entry and the dreamlit-ai/dreamlit-mcp repository carry metadata only, so tool JSON Schemas are readable only inside a session; the docs give each tool's purpose and required scope (5 of 25). llms.txt, pricing.md and Markdown copies of docs pages (10). Tool descriptions say when to use each, such as `edit_workflow_steps` for exact edits without AI, and the publish pair's order (16 of 20). Parameter types aren't published beyond names such as `includeEmailHtml` and `startNewChat` (5 of 15). Example prompts and a troubleshooting section for each documented error state (10 of 15). A dated changelog; server version 0.1.0 in the registry (13 of 15). Total 59.",
          "b": "37 OpenAPI 3 files are linked from the docs index on 2 November 2026 (36 on 9 October), with 140 operations on 119 paths and 535 schemas in the 36 read on 9 October; the files weren't recounted (25). The docs publish llms.txt, llms-full.txt, a Markdown twin of every page, a skill.md file and a docs MCP server (10). All 140 operations have a summary and a description, and the MCP page states what each tool can't do, but few descriptions say when not to use an endpoint (16). The files carry 503 enums and required lists, while 121 of 1,132 object schemas have no declared properties (12). There are 1,725 example entries, 400 or 401 on every operation and 429 on 103 (14). Versions are mixed (v1, v2, v2.1, v5 and a dated 2025-11-20 campaigns file). Monthly product release notes list new APIs and SDK changelogs are dated, but no API changelog was found (10). Total 87."
        },
        "scores": {
          "a": 59,
          "b": 87
        }
      },
      {
        "by": 25,
        "category": "reliability",
        "leads": "moengage",
        "name": "Reliability",
        "reasons": {
          "a": "Graded with the hosted lines. A Better Stack status page at status.dreamlit.ai with 90 days of history for the Web App and the Workflow Engine, but no component for the MCP server (16 of 20). The record shows 100% for the web app and 99.992% for the workflow engine over 90 days, about ten minutes, with no written incidents (25 of 30). No rate limits found in the MCP or pricing docs (0). No 429, retry or idempotency guidance found (0). Scale includes dedicated support with an SLA and Enterprise has custom SLAs, but no published availability commitment (0). The MCP server, introduced on 5 May 2026, carries no beta label (10). Total 51.",
          "b": "Graded on the REST API, with the hosted lines. Statuspage site at status.moengage.com with components for each data centre, among them Data APIs, Push APIs, Custom Segment API and Inform (20). In the 90 days from 4 August 2026 the history feed holds two incidents touching the APIs. On 27 October the Push API had \"downtime across our data centers\" from 02:20 UTC, restored for single-user sends at 12:39 and for all-user and segment sends at 13:23, and the Campaigns v1 API failed campaign creation from 03:13 to 14:14 UTC. That is about 11 hours of a core API down in every data centre, read as a major as nylas-email's all-region webhooks outage was. On 17 August the Inform API in DC-03 returned HTTP 200 for about 16 hours while a subset of messages was never sent, which is one region and a subset of requests, so partial and minor. The 20 October docs outage, the 24 September and 28 October dashboard incidents and two maintenance windows didn't touch the APIs. One major outage (10 of 30; the 9 October 8 isn't a checklist value, and its July incidents have left the window). Numeric limits are published for every endpoint group (15). 429 responses carry `x-ratelimit` headers, the OAuth and some V5 endpoints add `Retry-After`, and V5 campaigns and flow status changes take an `Idempotency-Key`. The Data APIs have no idempotency key (12). The published SLA commits to 99.9 per cent monthly availability with service credits (10). The REST API is generally available, with the Flows endpoints and the API key dashboard in early access (9). 20 + 10 + 15 + 12 + 10 + 9 = 76."
        },
        "scores": {
          "a": 51,
          "b": 76
        }
      },
      {
        "by": 17,
        "category": "transparency",
        "leads": "moengage",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "A closed service under terms that name Notika AI (d/b/a Dreamlit AI) (15 of 30). The privacy policy keeps workflow execution history and delivery events for up to a year, while the security docs say Dreamlit retains no copy of customer data and cleans up after processing, which don't agree (15 of 30). No deprecation policy or dated notices found (0). The privacy policy points to a current subprocessor list and SCCs in a DPA, and names the United States and other countries as locations (12 of 20). Total 42.",
          "b": "Closed service. The published Terms of Use are short and undated, and the Master Service Agreement that the acceptable use policy refers to isn't public (13). A public DPA, a privacy policy dated 26 August 2026 that covers MoEngage as processor, an SLA that states backups every 12 hours kept for 3 months, and an AI policy that commits to no training of third-party models on customer data. Retention periods sit in a help centre article that wasn't read (22). No API deprecation policy was found. The docs say legacy API keys will be deprecated, with no date, and that the early access Flows endpoints won't receive breaking changes (5). The sub-processor list, last modified 1 September 2026, gives each processor's service and location, and the docs name the region of each data centre (20). Total 60."
        },
        "scores": {
          "a": 59,
          "b": 76
        }
      },
      {
        "by": 10,
        "category": "payments",
        "leads": "dreamlit",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No x402, MPP or L402 (0). Plan prices with included emails are public in pricing.md, no per-email overage price (10 of 20). No free plan for new accounts (0). Signup, database connection and payment happen in the web app (0). Total 10.",
          "b": "No x402, MPP or L402 (0). No prices are published. The pricing page lists Growth and Enterprise plans with a sales contact (0). No free tier or trial was found (0). A person has to buy through sales and create keys in the dashboard (0). Total 0."
        },
        "scores": {
          "a": 10,
          "b": 0
        }
      },
      {
        "by": 5,
        "category": "security",
        "leads": "dreamlit",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "OAuth to one workspace with four scopes, and project-scoped personal access tokens with chosen scopes, shown once (30). A read-only grant is possible, publishing needs its own scope, `confirm_publish` runs only after the user approves the prepared payload, and a dedicated least-privilege database user reads the customer's data (20). The docs warn that AI clients can be tricked by untrusted prompts and tell users to review edit, publish and unpublish calls (8 of 15). The security page lists access logs for database operations and for the platform, and analytics expose run rows; no customer-facing log of MCP calls was described (8 of 15). The security page claims penetration testing and a bug bounty programme without a link, SOC 2 is coming soon, no security.txt (404), and the MCP repository's SECURITY.md routes reports to support (8 of 20). Total 74.",
          "b": "Keys can be scoped to chosen API groups and individual APIs, regenerated and archived, and can use OAuth 2.0 client credentials with tokens of 5 to 60 minutes or AWS STS role ARNs. This dashboard is in early access, and Segmentation and Inform accept Basic authentication only (26). One endpoint, `GET /installInfo`, takes an attribution key in the query string, so 3 of the 10 points for that line come off (23). Keys limited to selected APIs, an API firewall that restricts categories by IP address, an MCP server bound to the user's role that builds drafts and can't publish, and a campaign approval workflow sold as an add-on. The legacy campaigns API can still publish (16). The MCP server masks PII attributes, email and mobile number, and the AI policy describes schema validation and allowlisted tool calls for MoEngage's own agents. No guidance for outside agents reading customer content was found (7). Audit logs are listed as a plan item on the pricing page. Whether they record API calls wasn't established (7). Responsible disclosure policy with safe harbour, a 24-hour acknowledgement and a PGP key, no bug bounty, no security.txt, and SOC 2 Type 2, ISO 27001, ISO 27701, ISO 22301, CSA STAR Level 1 and HIPAA on the security page (16). Total 69."
        },
        "scores": {
          "a": 74,
          "b": 69
        }
      },
      {
        "by": 5,
        "category": "maintenance",
        "leads": "dreamlit",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "The latest changelog entry is 12 October 2026, custom repeating schedules (30). Eight dated entries between 10 August and 12 October (20). Priority support on Pro, dedicated support on Scale and a public changelog (10 of 15). ai.dreamlit/mcp is in the official MCP registry under its domain namespace (15). The metadata repository has validate and publish workflows; there's no package to check (5 of 10). Total 80.",
          "b": "The iOS SDK changelog has an entry dated 14 October 2026, the Android one 9 October and the Web one 8 October (30). Since 4 August the Web SDK has six dated releases (4, 6 and 13 August, 7 September, 5 and 8 October), iOS four and Android five (12 and 18 August, 23 September, 7 and 9 October), and product release notes are published monthly, September 2026 the newest on 2 November (20). Public release notes with an RSS feed, support through a ticket portal and a docs feedback tool. No public issue tracker or community forum was read (10). Client SDKs are current. The MCP server isn't in the official MCP registry, and no API client library was found (10). The SDK repositories and their CI weren't read (5). Total 75."
        },
        "scores": {
          "a": 80,
          "b": 75
        }
      }
    ],
    "facts": [
      {
        "a": "MCP server",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Notika AI",
        "b": "MoEngage, Inc.",
        "name": "Vendor"
      },
      {
        "a": "https://mcp.dreamlit.ai/mcp",
        "b": "https://mcp.moengage.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "Proprietary service under MoEngage's Terms of Use and a customer agreement",
        "name": "Licence"
      },
      {
        "a": "16",
        "b": "52",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "ai.dreamlit/mcp",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-12",
        "b": "2026-10-14",
        "name": "Last release"
      },
      {
        "a": "2026-01-29",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-01-29",
        "b": "2026-08-26",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "2.5/5 (4)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "MoEngage scores 65.7 (B) on agent readiness against Dreamlit's 57 (C), and leads in 4 of 7 scored categories. Dreamlit leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community.",
        "question": "Which is better for AI agents, Dreamlit or MoEngage?"
      },
      {
        "answer": "Dreamlit uses an OAuth sign-in. MoEngage takes an API key or an OAuth sign-in.",
        "question": "Do Dreamlit and MoEngage need an API key?"
      },
      {
        "answer": "Yes. Dreamlit has a hosted endpoint at https://mcp.dreamlit.ai/mcp and MoEngage at https://mcp.moengage.com.",
        "question": "Can an agent call Dreamlit and MoEngage without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 74 against 69",
          "Payments \u0026 pricing, 10 against 0",
          "Maintenance \u0026 community, 80 against 75"
        ],
        "also": null,
        "goodFor": "Small product teams on Supabase or Postgres who want their coding agent to build lifecycle and transactional email workflows.",
        "slug": "dreamlit",
        "watchFor": "No REST API, SDK or OpenAPI; the MCP server is the only programmatic route"
      },
      {
        "aheadOn": [
          "Reliability, 76 against 51",
          "Schema \u0026 documentation, 87 against 59",
          "Transparency \u0026 trust, 76 against 59"
        ],
        "also": null,
        "goodFor": "A team already on MoEngage that wants an agent to update profiles, track events, build filter segments, draft Push and Email campaigns and read campaign, flow and analytics results.",
        "slug": "moengage",
        "watchFor": "No public price, free tier or trial. The pricing page lists Growth and Enterprise plans with a one-year minimum and a sales contact only"
      }
    ],
    "history": {
      "dreamlit": null,
      "moengage": [
        {
          "causes": [
            "reliability"
          ],
          "date": "2026-11-02",
          "delta": 0.4,
          "from": 65.3,
          "fromGrade": "B",
          "to": 65.7,
          "toGrade": "B"
        },
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 65.2,
          "fromGrade": "B",
          "to": 65.3,
          "toGrade": "B"
        }
      ]
    },
    "job": {
      "capability": "marketing.journeys",
      "name": "Marketing journeys"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/activecampaign-vs-moengage.json",
        "title": "ActiveCampaign vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/activecampaign-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/braze-vs-moengage.json",
        "title": "Braze vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/braze-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clevertap-vs-moengage.json",
        "title": "CleverTap vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/clevertap-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/customer-io-vs-moengage.json",
        "title": "Customer.io vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/customer-io-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/iterable-vs-moengage.json",
        "title": "Iterable vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/iterable-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/klaviyo-vs-moengage.json",
        "title": "Klaviyo API + MCP vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/klaviyo-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailchimp-marketing-vs-moengage.json",
        "title": "Mailchimp Marketing API vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/mailchimp-marketing-vs-moengage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/moengage-vs-nitrosend.json",
        "title": "MoEngage vs Nitrosend",
        "url": "https://www.anchorterminal.com/compare/moengage-vs-nitrosend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/moengage-vs-omnisend.json",
        "title": "MoEngage vs Omnisend",
        "url": "https://www.anchorterminal.com/compare/moengage-vs-omnisend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/moengage-vs-sequenzy.json",
        "title": "MoEngage vs Sequenzy",
        "url": "https://www.anchorterminal.com/compare/moengage-vs-sequenzy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/activecampaign-vs-dreamlit.json",
        "title": "ActiveCampaign vs Dreamlit",
        "url": "https://www.anchorterminal.com/compare/activecampaign-vs-dreamlit"
      },
      {
        "json": "https://www.anchorterminal.com/compare/braze-vs-dreamlit.json",
        "title": "Braze vs Dreamlit",
        "url": "https://www.anchorterminal.com/compare/braze-vs-dreamlit"
      },
      {
        "json": "https://www.anchorterminal.com/compare/customer-io-vs-dreamlit.json",
        "title": "Customer.io vs Dreamlit",
        "url": "https://www.anchorterminal.com/compare/customer-io-vs-dreamlit"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dreamlit-vs-iterable.json",
        "title": "Dreamlit vs Iterable",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-iterable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dreamlit-vs-klaviyo.json",
        "title": "Dreamlit vs Klaviyo API + MCP",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-klaviyo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.json",
        "title": "Dreamlit vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dreamlit-vs-nitrosend.json",
        "title": "Dreamlit vs Nitrosend",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-nitrosend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dreamlit-vs-omnisend.json",
        "title": "Dreamlit vs Omnisend",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-omnisend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dreamlit-vs-sequenzy.json",
        "title": "Dreamlit vs Sequenzy",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-sequenzy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clevertap-vs-dreamlit.json",
        "title": "CleverTap vs Dreamlit",
        "url": "https://www.anchorterminal.com/compare/clevertap-vs-dreamlit"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 25,
        "dreamlit": 51,
        "edge": "moengage",
        "key": "reliability",
        "moengage": 76,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 28,
        "dreamlit": 59,
        "edge": "moengage",
        "key": "schema",
        "moengage": 87,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 1,
        "dreamlit": 67,
        "edge": "moengage",
        "key": "ergonomics",
        "moengage": 68,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 5,
        "dreamlit": 74,
        "edge": "dreamlit",
        "key": "security",
        "moengage": 69,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 10,
        "dreamlit": 10,
        "edge": "dreamlit",
        "key": "payments",
        "moengage": 0,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 5,
        "dreamlit": 80,
        "edge": "dreamlit",
        "key": "maintenance",
        "moengage": 75,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 17,
        "dreamlit": 59,
        "edge": "moengage",
        "key": "transparency",
        "moengage": 76,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "MoEngage scores 65.7 (B) on agent readiness against Dreamlit's 57 (C), and leads in 4 of 7 scored categories. Dreamlit leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community. Both do marketing journeys.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "dreamlit": "Scoped OAuth and a two-step prepare-then-confirm publish let an agent draft and test lifecycle workflows without sending anything live by mistake. There is no REST API or published rate limit, tool schemas aren't public outside a session, there's no free plan, and its security page and privacy policy disagree on retention.",
      "moengage": "MoEngage publishes 37 OpenAPI files, a per-endpoint rate limit table, Markdown docs and a hosted MCP server that builds drafts and leaves publishing to a person. No price, trial or self-serve signup is published, and on 27 October 2026 the Push API was down across its data centres for about 11 hours."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/dreamlit-vs-moengage",
    "json": "https://www.anchorterminal.com/compare/dreamlit-vs-moengage.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/dreamlit-vs-moengage.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/dreamlit-vs-moengage.min.md"
  },
  "markdown": "MoEngage scores 65.7 (B) on agent readiness against Dreamlit's 57 (C), and leads in 4 of 7 scored categories. Dreamlit leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community. Both do marketing journeys.\n\n- Dreamlit: grade C, 57/100, rank #809 of 1486. Markdown https://www.anchorterminal.com/tools/dreamlit.md · JSON https://www.anchorterminal.com/api/v1/tools/dreamlit.json\n- MoEngage: grade B, 65.7/100, rank #403 of 1486. Markdown https://www.anchorterminal.com/tools/moengage.md · JSON https://www.anchorterminal.com/api/v1/tools/moengage.json\n- Best lifecycle marketing and customer engagement platforms for AI agents: https://www.anchorterminal.com/best/lifecycle-marketing/index.md\n- All 66 lifecycle marketing comparisons: https://www.anchorterminal.com/compare/lifecycle-marketing/index.md\n\n## Which one, for what\n\n### Dreamlit (C)\n\nGood for: Small product teams on Supabase or Postgres who want their coding agent to build lifecycle and transactional email workflows.\n\nAhead on:\n- Security \u0026 auth, 74 against 69\n- Payments \u0026 pricing, 10 against 0\n- Maintenance \u0026 community, 80 against 75\n\nWatch for: No REST API, SDK or OpenAPI; the MCP server is the only programmatic route\n\n### MoEngage (B)\n\nGood for: A team already on MoEngage that wants an agent to update profiles, track events, build filter segments, draft Push and Email campaigns and read campaign, flow and analytics results.\n\nAhead on:\n- Reliability, 76 against 51\n- Schema \u0026 documentation, 87 against 59\n- Transparency \u0026 trust, 76 against 59\n\nWatch for: No public price, free tier or trial. The pricing page lists Growth and Enterprise plans with a one-year minimum and a sales contact only\n\n\n## Why the edge\n\n### Schema \u0026 documentation: MoEngage +28\n\n- Dreamlit (59): The registry entry and the dreamlit-ai/dreamlit-mcp repository carry metadata only, so tool JSON Schemas are readable only inside a session; the docs give each tool's purpose and required scope (5 of 25). llms.txt, pricing.md and Markdown copies of docs pages (10). Tool descriptions say when to use each, such as `edit_workflow_steps` for exact edits without AI, and the publish pair's order (16 of 20). Parameter types aren't published beyond names such as `includeEmailHtml` and `startNewChat` (5 of 15). Example prompts and a troubleshooting section for each documented error state (10 of 15). A dated changelog; server version 0.1.0 in the registry (13 of 15). Total 59.\n- MoEngage (87): 37 OpenAPI 3 files are linked from the docs index on 2 November 2026 (36 on 9 October), with 140 operations on 119 paths and 535 schemas in the 36 read on 9 October; the files weren't recounted (25). The docs publish llms.txt, llms-full.txt, a Markdown twin of every page, a skill.md file and a docs MCP server (10). All 140 operations have a summary and a description, and the MCP page states what each tool can't do, but few descriptions say when not to use an endpoint (16). The files carry 503 enums and required lists, while 121 of 1,132 object schemas have no declared properties (12). There are 1,725 example entries, 400 or 401 on every operation and 429 on 103 (14). Versions are mixed (v1, v2, v2.1, v5 and a dated 2025-11-20 campaigns file). Monthly product release notes list new APIs and SDK changelogs are dated, but no API changelog was found (10). Total 87.\n\n### Reliability: MoEngage +25\n\n- Dreamlit (51): Graded with the hosted lines. A Better Stack status page at status.dreamlit.ai with 90 days of history for the Web App and the Workflow Engine, but no component for the MCP server (16 of 20). The record shows 100% for the web app and 99.992% for the workflow engine over 90 days, about ten minutes, with no written incidents (25 of 30). No rate limits found in the MCP or pricing docs (0). No 429, retry or idempotency guidance found (0). Scale includes dedicated support with an SLA and Enterprise has custom SLAs, but no published availability commitment (0). The MCP server, introduced on 5 May 2026, carries no beta label (10). Total 51.\n- MoEngage (76): Graded on the REST API, with the hosted lines. Statuspage site at status.moengage.com with components for each data centre, among them Data APIs, Push APIs, Custom Segment API and Inform (20). In the 90 days from 4 August 2026 the history feed holds two incidents touching the APIs. On 27 October the Push API had \"downtime across our data centers\" from 02:20 UTC, restored for single-user sends at 12:39 and for all-user and segment sends at 13:23, and the Campaigns v1 API failed campaign creation from 03:13 to 14:14 UTC. That is about 11 hours of a core API down in every data centre, read as a major as nylas-email's all-region webhooks outage was. On 17 August the Inform API in DC-03 returned HTTP 200 for about 16 hours while a subset of messages was never sent, which is one region and a subset of requests, so partial and minor. The 20 October docs outage, the 24 September and 28 October dashboard incidents and two maintenance windows didn't touch the APIs. One major outage (10 of 30; the 9 October 8 isn't a checklist value, and its July incidents have left the window). Numeric limits are published for every endpoint group (15). 429 responses carry `x-ratelimit` headers, the OAuth and some V5 endpoints add `Retry-After`, and V5 campaigns and flow status changes take an `Idempotency-Key`. The Data APIs have no idempotency key (12). The published SLA commits to 99.9 per cent monthly availability with service credits (10). The REST API is generally available, with the Flows endpoints and the API key dashboard in early access (9). 20 + 10 + 15 + 12 + 10 + 9 = 76.\n\n### Transparency \u0026 trust: MoEngage +17\n\n- Dreamlit (59): A closed service under terms that name Notika AI (d/b/a Dreamlit AI) (15 of 30). The privacy policy keeps workflow execution history and delivery events for up to a year, while the security docs say Dreamlit retains no copy of customer data and cleans up after processing, which don't agree (15 of 30). No deprecation policy or dated notices found (0). The privacy policy points to a current subprocessor list and SCCs in a DPA, and names the United States and other countries as locations (12 of 20). Total 42.\n- MoEngage (76): Closed service. The published Terms of Use are short and undated, and the Master Service Agreement that the acceptable use policy refers to isn't public (13). A public DPA, a privacy policy dated 26 August 2026 that covers MoEngage as processor, an SLA that states backups every 12 hours kept for 3 months, and an AI policy that commits to no training of third-party models on customer data. Retention periods sit in a help centre article that wasn't read (22). No API deprecation policy was found. The docs say legacy API keys will be deprecated, with no date, and that the early access Flows endpoints won't receive breaking changes (5). The sub-processor list, last modified 1 September 2026, gives each processor's service and location, and the docs name the region of each data centre (20). Total 60.\n\n### Payments \u0026 pricing: Dreamlit +10\n\n- Dreamlit (10): No x402, MPP or L402 (0). Plan prices with included emails are public in pricing.md, no per-email overage price (10 of 20). No free plan for new accounts (0). Signup, database connection and payment happen in the web app (0). Total 10.\n- MoEngage (0): No x402, MPP or L402 (0). No prices are published. The pricing page lists Growth and Enterprise plans with a sales contact (0). No free tier or trial was found (0). A person has to buy through sales and create keys in the dashboard (0). Total 0.\n\n### Security \u0026 auth: Dreamlit +5\n\n- Dreamlit (74): OAuth to one workspace with four scopes, and project-scoped personal access tokens with chosen scopes, shown once (30). A read-only grant is possible, publishing needs its own scope, `confirm_publish` runs only after the user approves the prepared payload, and a dedicated least-privilege database user reads the customer's data (20). The docs warn that AI clients can be tricked by untrusted prompts and tell users to review edit, publish and unpublish calls (8 of 15). The security page lists access logs for database operations and for the platform, and analytics expose run rows; no customer-facing log of MCP calls was described (8 of 15). The security page claims penetration testing and a bug bounty programme without a link, SOC 2 is coming soon, no security.txt (404), and the MCP repository's SECURITY.md routes reports to support (8 of 20). Total 74.\n- MoEngage (69): Keys can be scoped to chosen API groups and individual APIs, regenerated and archived, and can use OAuth 2.0 client credentials with tokens of 5 to 60 minutes or AWS STS role ARNs. This dashboard is in early access, and Segmentation and Inform accept Basic authentication only (26). One endpoint, `GET /installInfo`, takes an attribution key in the query string, so 3 of the 10 points for that line come off (23). Keys limited to selected APIs, an API firewall that restricts categories by IP address, an MCP server bound to the user's role that builds drafts and can't publish, and a campaign approval workflow sold as an add-on. The legacy campaigns API can still publish (16). The MCP server masks PII attributes, email and mobile number, and the AI policy describes schema validation and allowlisted tool calls for MoEngage's own agents. No guidance for outside agents reading customer content was found (7). Audit logs are listed as a plan item on the pricing page. Whether they record API calls wasn't established (7). Responsible disclosure policy with safe harbour, a 24-hour acknowledgement and a PGP key, no bug bounty, no security.txt, and SOC 2 Type 2, ISO 27001, ISO 27701, ISO 22301, CSA STAR Level 1 and HIPAA on the security page (16). Total 69.\n\n### Maintenance \u0026 community: Dreamlit +5\n\n- Dreamlit (80): The latest changelog entry is 12 October 2026, custom repeating schedules (30). Eight dated entries between 10 August and 12 October (20). Priority support on Pro, dedicated support on Scale and a public changelog (10 of 15). ai.dreamlit/mcp is in the official MCP registry under its domain namespace (15). The metadata repository has validate and publish workflows; there's no package to check (5 of 10). Total 80.\n- MoEngage (75): The iOS SDK changelog has an entry dated 14 October 2026, the Android one 9 October and the Web one 8 October (30). Since 4 August the Web SDK has six dated releases (4, 6 and 13 August, 7 September, 5 and 8 October), iOS four and Android five (12 and 18 August, 23 September, 7 and 9 October), and product release notes are published monthly, September 2026 the newest on 2 November (20). Public release notes with an RSS feed, support through a ticket portal and a docs feedback tool. No public issue tracker or community forum was read (10). Client SDKs are current. The MCP server isn't in the official MCP registry, and no API client library was found (10). The SDK repositories and their CI weren't read (5). Total 75.\n\n## Score by category\n\n| Category | Weight | Dreamlit | MoEngage | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 51 | 76 | MoEngage +25 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 59 | 87 | MoEngage +28 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 68 | MoEngage +1 |\n| Security \u0026 auth | 14% (17.5 this run) | 74 | 69 | Dreamlit +5 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 10 | 0 | Dreamlit +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 80 | 75 | Dreamlit +5 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 59 | 76 | MoEngage +17 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **57 · C** | **65.7 · B** | |\n\n## Facts side by side\n\n| Fact | Dreamlit | MoEngage |\n| --- | --- | --- |\n| Kind | MCP server | HTTP API |\n| Vendor | Notika AI | MoEngage, Inc. |\n| Hosted endpoint | `https://mcp.dreamlit.ai/mcp` | `https://mcp.moengage.com` |\n| Transports | Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth | OAuth or key |\n| Pricing | Paid | Paid |\n| x402 | no | no |\n| Licence | none | Proprietary service under MoEngage's Terms of Use and a customer agreement |\n| Tools exposed | 16 | 52 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | `ai.dreamlit/mcp` | not listed |\n| Last release | 2026-10-12 | 2026-10-14 |\n| Terms last updated | 2026-01-29 | no date given |\n| Privacy policy last updated | 2026-01-29 | 2026-08-26 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | yes | not found in the text |\n| Agent reviews | none | 2.5/5 (4) |\n\n## How the scores have moved\n\n### Dreamlit\n\nNo score change since it was listed.\n\n### MoEngage\n\n- +0.4 on 2 November 2026: reliability\n- +0.1 on 27 October 2026: new evidence\n\n## Verdicts\n\n**Dreamlit.** Scoped OAuth and a two-step prepare-then-confirm publish let an agent draft and test lifecycle workflows without sending anything live by mistake. There is no REST API or published rate limit, tool schemas aren't public outside a session, there's no free plan, and its security page and privacy policy disagree on retention.\n\n**MoEngage.** MoEngage publishes 37 OpenAPI files, a per-endpoint rate limit table, Markdown docs and a hosted MCP server that builds drafts and leaves publishing to a person. No price, trial or self-serve signup is published, and on 27 October 2026 the Push API was down across its data centres for about 11 hours.\n\n## Before you call either\n\n### Dreamlit\n\n1. Call `get_status` first to see the workspace, project setup state and prompting guidance\n2. Use `send_workflow_test` to the user before `prepare_publish`, and call `confirm_publish` only after the user approves the returned payload\n3. Request `workflows:read` and `analytics:read` only when the task is reporting, so the grant can't publish\n4. Expect a browser hand-off link when setup or an unsupported edit needs the web app, and pass it to the user\n\n### MoEngage\n\n1. Take the data centre number from the dashboard URL and call `https://api-{dc}.moengage.com`. Data can't be moved between data centres\n2. Send an `Idempotency-Key` header (UUID v4) on V5 campaign writes and test sends, and a `transaction_id` on Inform alerts, which deduplicates for 5 minutes\n3. Use internal event and attribute names in segment filters, and run `deep_validate_segment_filters` first. A wrong event name is accepted and the count later fails with no reason\n4. Use `in` with a list for text equality in segment filters. `equals` returns a 400 that names no field\n5. Reuse an OAuth access token until it nears expiry. The token endpoint allows 5 requests a minute and 30 per 10 minutes for each key\n\n## Questions\n\n### Which is better for AI agents, Dreamlit or MoEngage?\n\nMoEngage scores 65.7 (B) on agent readiness against Dreamlit's 57 (C), and leads in 4 of 7 scored categories. Dreamlit leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community.\n\n### Do Dreamlit and MoEngage need an API key?\n\nDreamlit uses an OAuth sign-in. MoEngage takes an API key or an OAuth sign-in.\n\n### Can an agent call Dreamlit and MoEngage without installing anything?\n\nYes. Dreamlit has a hosted endpoint at https://mcp.dreamlit.ai/mcp and MoEngage at https://mcp.moengage.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/dreamlit-vs-moengage.json, and with the fewest tokens: https://www.anchorterminal.com/compare/dreamlit-vs-moengage.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"dreamlit\", \"b\": \"moengage\"}`. From a terminal: `anchor compare dreamlit moengage`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/dreamlit.json and https://www.anchorterminal.com/api/v1/tools/moengage.json\n\n## Other comparisons with Dreamlit or MoEngage\n\n- [ActiveCampaign vs MoEngage](https://www.anchorterminal.com/compare/activecampaign-vs-moengage.md)\n- [Braze vs MoEngage](https://www.anchorterminal.com/compare/braze-vs-moengage.md)\n- [CleverTap vs MoEngage](https://www.anchorterminal.com/compare/clevertap-vs-moengage.md)\n- [Customer.io vs MoEngage](https://www.anchorterminal.com/compare/customer-io-vs-moengage.md)\n- [Iterable vs MoEngage](https://www.anchorterminal.com/compare/iterable-vs-moengage.md)\n- [Klaviyo API + MCP vs MoEngage](https://www.anchorterminal.com/compare/klaviyo-vs-moengage.md)\n- [Mailchimp Marketing API vs MoEngage](https://www.anchorterminal.com/compare/mailchimp-marketing-vs-moengage.md)\n- [MoEngage vs Nitrosend](https://www.anchorterminal.com/compare/moengage-vs-nitrosend.md)\n- [MoEngage vs Omnisend](https://www.anchorterminal.com/compare/moengage-vs-omnisend.md)\n- [MoEngage vs Sequenzy](https://www.anchorterminal.com/compare/moengage-vs-sequenzy.md)\n- [ActiveCampaign vs Dreamlit](https://www.anchorterminal.com/compare/activecampaign-vs-dreamlit.md)\n- [Braze vs Dreamlit](https://www.anchorterminal.com/compare/braze-vs-dreamlit.md)\n- [Customer.io vs Dreamlit](https://www.anchorterminal.com/compare/customer-io-vs-dreamlit.md)\n- [Dreamlit vs Iterable](https://www.anchorterminal.com/compare/dreamlit-vs-iterable.md)\n- [Dreamlit vs Klaviyo API + MCP](https://www.anchorterminal.com/compare/dreamlit-vs-klaviyo.md)\n- [Dreamlit vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.md)\n- [Dreamlit vs Nitrosend](https://www.anchorterminal.com/compare/dreamlit-vs-nitrosend.md)\n- [Dreamlit vs Omnisend](https://www.anchorterminal.com/compare/dreamlit-vs-omnisend.md)\n- [Dreamlit vs Sequenzy](https://www.anchorterminal.com/compare/dreamlit-vs-sequenzy.md)\n- [CleverTap vs Dreamlit](https://www.anchorterminal.com/compare/clevertap-vs-dreamlit.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Dreamlit vs MoEngage",
        "url": ""
      }
    ],
    "description": "MoEngage scores 65.7 (B) to Dreamlit's 57 (C) for marketing journeys. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Dreamlit C 57",
      "MoEngage B 65.7",
      "scores"
    ],
    "h1": "Dreamlit vs MoEngage",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/dreamlit-vs-moengage",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Dreamlit vs MoEngage for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/dreamlit-vs-moengage"
  },
  "tokens": {
    "markdown": 4700,
    "slim": 2930
  },
  "version": 1
}
