{
  "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": "Mailchimp Marketing API scores 60.2 (C) on agent readiness against Dreamlit's 57 (C), and leads in 5 of 7 scored categories. Dreamlit leads on security \u0026 auth and maintenance \u0026 community.",
    "b": {
      "slug": "mailchimp-marketing",
      "name": "Mailchimp Marketing API",
      "vendor": "Intuit Mailchimp",
      "vendorUrl": "https://mailchimp.com",
      "kind": "http-api",
      "category": "lifecycle-marketing",
      "summary": "Intuit Mailchimp's Marketing API manages audiences, contacts, tags, segments, events, campaigns, automations and reports for a Mailchimp account. It is a REST API at `https://api.mailchimp.com/3.0/` that takes an API key or an OAuth 2 token.",
      "url": "https://www.anchorterminal.com/tools/mailchimp-marketing",
      "markdownUrl": "https://www.anchorterminal.com/tools/mailchimp-marketing.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/mailchimp-marketing.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/mailchimp-marketing.json",
      "dns": "mailchimp-marketing.grade.anchorterminal.com",
      "repo": "https://github.com/mailchimp/mailchimp-marketing-typescript-sdk",
      "license": "Proprietary service under Mailchimp's Standard Terms of Use and API Use Policy. The generated client libraries declare Apache-2.0 in their package metadata",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.mailchimp.com/3.0",
      "packages": [
        {
          "registry": "npm",
          "name": "@mailchimp/mailchimp_marketing"
        },
        {
          "registry": "pypi",
          "name": "mailchimp-marketing"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve API key, or an OAuth 2 token for another user's account. A user with Manager permissions or above creates a key under Profile, Extras, API keys, and it is shown once. A key has full account access, bounded only by its creator's user level, with no read-only or per-endpoint option. Keys created from 22 June 2026 expire after one year, per the help centre. OAuth uses the authorisation code grant with no scopes, no refresh token and tokens that do not expire. Registering an OAuth app is done in the account, and a Marketplace listing needs OAuth. Both credentials go in HTTP Basic or `Authorization: Bearer`.",
      "pricing": "freemium",
      "pricingNotes": "The Free plan has 250 contacts and 500 sends a month (250 a day), one audience and one seat, with no time limit. Paid plans start at $13 a month for Essentials, $20 for Standard and $350 for Premium with USD selected, and rise with the contact count. API calls are not metered. The 14-day trial of a paid plan needs payment details. An agent's owner can start on the Free plan without a contract (https://mailchimp.com/pricing/marketing/, https://mailchimp.com/help/about-mailchimp-pricing-plans/).",
      "priceSummary": "$13 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the OpenAPI file or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 278434,
        "pypiWeekly": 111433,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://mailchimp.com/developer/marketing/",
      "llmsTxt": "https://mailchimp.com/developer/marketing/llms.txt",
      "openapi": "https://api.mailchimp.com/schema/openapi/OpenAPI.json?expand",
      "capabilities": [
        "marketing.profiles",
        "marketing.events",
        "marketing.segments",
        "marketing.campaigns",
        "marketing.journeys",
        "email.templates"
      ],
      "tags": [
        "official",
        "hosted",
        "closed-source",
        "api-key",
        "oauth",
        "openapi",
        "llms-txt",
        "free-tier",
        "webhooks",
        "cli",
        "typescript",
        "python",
        "go",
        "java",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-10-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.2,
        "grade": "C",
        "agentReady": false,
        "rank": 660,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 8,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 73,
          "maintenance": 68,
          "payments": 25,
          "reliability": 72,
          "schema": 76,
          "security": 46,
          "transparency": 74
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-04"
        },
        "negative": -2,
        "negativeNotes": [
          "8 October 2026. The quick start tells users to run `npm install @mailchimp/mailchimp-marketing`, and the npm registry answered 404 for that name. On 4 November the quick start still gave the same command, and the registry couldn't be reached from our shell to re-check. So 2 for a published install step the listing couldn't meet for its TypeScript library (https://mailchimp.com/developer/marketing/build/start-developing/send-your-first-api-request.md, https://registry.npmjs.org/@mailchimp%2fmailchimp-marketing)."
        ],
        "verdict": "A public OpenAPI 3.1 file covers all 297 operations, every docs page has a Markdown copy, and responses can be trimmed with `fields`. An API key carries full account access with no read-only option. The quick start's TypeScript package was not on npm on 8 October 2026, and the changelog's newest entry is 19 August 2025.",
        "bestFor": "Small businesses already on Mailchimp that want an agent to sync contacts, tag and segment them, record events, draft and schedule campaigns and read reports.",
        "strengths": [
          "OpenAPI 3.1 file for all 297 operations at `https://api.mailchimp.com/schema/openapi/OpenAPI.json`, with an error response on every operation",
          "`fields` and `exclude_fields` trim responses on 130 operations, and `count` pages up to 1,000 records",
          "Every docs page has a Markdown copy at the URL plus `.md`, with llms.txt indexes and four published agent skills",
          "Errors are `application/problem+json` with `title`, `status`, `detail` and `instance`, and an `X-Trigger-Error` header lets a client test its handling",
          "Free plan with 250 contacts and 500 sends a month, and a status page with an API component for each of 21 data centres"
        ],
        "weaknesses": [
          "An API key has full account access. The docs say there is no read-only key and no way to limit a key to chosen endpoints",
          "OAuth 2 tokens carry no scopes and never expire, and no approval step before `actions/send` was found",
          "The quick start's `npm install @mailchimp/mailchimp-marketing` answered 404 on npm on 8 October, and the quick start still gives it",
          "The only stated limit is 10 simultaneous connections per user. No `Retry-After` header, idempotency key or SLA was found",
          "The developer changelog's newest entry is 19 August 2025, and the docs say keys never expire while the help centre says new keys expire after one year",
          "Click tracking was lost for about 25 hours on 3 and 4 August 2026 and cannot be backfilled, per the status page"
        ],
        "agentNotes": [
          "Send the key or OAuth token as `Authorization: Bearer` to `https://api.mailchimp.com/3.0/`. Treat it as full account access and keep it server-side",
          "Address a contact by the MD5 hash of the lowercase email address, and use PUT on `/lists/{list_id}/members/{subscriber_hash}` so a retry does not create a duplicate",
          "Ask a person before POST `/campaigns/{campaign_id}/actions/send`. Read `/campaigns/{campaign_id}/send-checklist` and use `actions/test` first",
          "Keep to 10 concurrent requests per user, and send large jobs to `/batches`. A 429 names no wait time, so back off and retry",
          "Add `fields=` to every list call and set `count` (default 10, maximum 1,000) with `offset`",
          "Set `is_syncing` to true when loading historical events so they do not trigger automations"
        ],
        "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": 60.2
          }
        ],
        "editorialScores": {
          "ergonomics": 73,
          "maintenance": 68,
          "payments": 25,
          "reliability": 72,
          "schema": 76,
          "security": 46,
          "transparency": 55
        },
        "provenanceScore": 93,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-04",
            "maintenance": "2026-11-04",
            "payments": "2026-11-04",
            "reliability": "2026-11-04",
            "schema": "2026-11-04",
            "security": "2026-11-04",
            "transparency": "2026-11-04"
          },
          "last": "2026-11-04",
          "lastMoved": "2026-11-04",
          "oldest": "2026-11-04",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -sS \\\n  \"https://api.mailchimp.com/3.0/ping\" \\\n  --user \"anystring:${apikey}\"",
        "claudeCode": "claude mcp add --transport http fern_mcp_mailchimp-docs \\\n  https://mailchimp.com/developer/_mcp/server",
        "config": {
          "mcpServers": {
            "mailchimp-docs": {
              "type": "http",
              "url": "https://mailchimp.com/developer/_mcp/server"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/marketing.profiles",
        "tool": "https://letme.dev/mailchimp-marketing"
      },
      "sameCompany": [
        "mandrill"
      ],
      "area": "communication",
      "unitPrices": [
        {
          "item": "Essentials plan, up to 500 contacts",
          "unit": "month",
          "usd": 13,
          "note": "starting price with USD selected, rises with contacts"
        },
        {
          "item": "Standard plan, up to 500 contacts",
          "unit": "month",
          "usd": 20,
          "note": "starting price with USD selected, rises with contacts"
        },
        {
          "item": "Premium plan, starting price",
          "unit": "month",
          "usd": 350,
          "note": "starting price with USD selected, rises with contacts"
        }
      ],
      "provenance": {
        "legalEntity": "The Rocket Science Group LLC d/b/a Mailchimp",
        "domain": "mailchimp.com",
        "domainRegistered": "2001-06-29",
        "endpointOnVendorDomain": true,
        "terms": "https://mailchimp.com/legal/terms/",
        "privacy": "https://www.intuit.com/privacy/statement/",
        "statusPage": "https://status.mailchimp.com",
        "changelog": "https://mailchimp.com/developer/release-notes/",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The Standard Terms of Use, updated and effective 10 October 2025, name The Rocket Science Group LLC d/b/a Mailchimp, 405 N Angier Ave. NE, Atlanta, Georgia. API use is also governed by the API Use Policy at https://mailchimp.com/legal/api_use/, updated 1 August 2023, which the terms incorporate.",
          "The privacy field points at the Intuit Global Privacy Statement, last updated 9 March 2026. mailchimp.com/legal/privacy redirects to it, the terms name it as the privacy document for the service, and it names The Rocket Science Group LLC d/b/a Mailchimp. Mailchimp publishes no separate privacy policy.",
          "The API answers at api.mailchimp.com. An unauthenticated request to `/3.0/ping` returned 401 as `application/problem+json` on 8 October 2026.",
          "mailchimp.com/.well-known/security.txt holds one Contact line that points at the responsible disclosure section of the security page, with no Expires field. The value follows the reading on the Mailchimp Transactional listing.",
          "The changelog covers the Marketing and Transactional APIs together. Its newest entry is dated 19 August 2025, and its newest Marketing entry 7 August 2025.",
          "RDAP for mailchimp.com gives a registration date of 2001-06-29 (Verisign)."
        ],
        "score": 93
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/mailchimp-marketing.json",
      "live": {
        "slug": "mailchimp-marketing",
        "probe": {
          "target": "https://api.mailchimp.com/3.0",
          "method": "get",
          "lastAt": "2026-11-07T18:20:36.669372858Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 351,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 99.96,
          "p50ms24h": 327,
          "p95ms24h": 574,
          "samples24h": 239,
          "samples30d": 7289,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 169,
              "ok": 168
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "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": 252
            },
            {
              "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": 184
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.mailchimp.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-07T04:48:01.419069576Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "mailchimp/mailchimp-marketing-typescript-sdk",
            "version": "1.0.03",
            "released": "2026-10-13",
            "seenAt": "2026-11-06T23:41:45.729509572Z"
          },
          {
            "registry": "npm",
            "name": "@mailchimp/mailchimp_marketing",
            "version": "3.0.80",
            "seenAt": "2026-11-06T23:41:45.3139476Z"
          },
          {
            "registry": "pypi",
            "name": "mailchimp-marketing",
            "version": "3.0.80",
            "released": "2022-11-02",
            "seenAt": "2026-11-06T23:41:45.530035552Z"
          }
        ],
        "githubStars": 0,
        "npmWeekly": 301365,
        "pypiWeekly": 132999,
        "securityTxt": {
          "url": "https://mailchimp.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-11-07T15:59:41.954623744Z"
        },
        "llmsTxt": {
          "url": "https://mailchimp.com/developer/marketing/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:56.071091893Z"
        },
        "domain": {
          "domain": "mailchimp.com",
          "registered": "2001-06-29",
          "source": "https://rdap.verisign.com/com/v1/domain/mailchimp.com",
          "checkedAt": "2026-11-01T14:09:51.942989092Z"
        },
        "pages": [
          {
            "url": "https://mailchimp.com/developer/release-notes/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:39.881243603Z",
            "changedAt": "2026-10-28T04:38:15.917860338Z",
            "fingerprint": "eabe4136d3fd"
          },
          {
            "url": "https://mailchimp.com/help/about-mailchimp-pricing-plans/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:42.858283668Z",
            "changedAt": "2026-11-05T12:36:58.984421063Z",
            "fingerprint": "174dbb82057e"
          },
          {
            "url": "https://mailchimp.com/pricing/marketing/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:46.116551259Z",
            "changedAt": "2026-11-07T14:13:46.116551259Z",
            "fingerprint": "981e7e834f1c"
          },
          {
            "url": "https://www.intuit.com/privacy/statement/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:30:20.272991469Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "bdf88eaea616"
          },
          {
            "url": "https://mailchimp.com/legal/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:44.070635532Z",
            "changedAt": "2026-10-30T05:43:29.265979329Z",
            "fingerprint": "24853a4c12ab"
          }
        ],
        "mcpTools": {
          "url": "https://mailchimp.com/developer/_mcp/server",
          "checkedAt": "2026-11-07T01:46:04.506267404Z",
          "status": "error",
          "note": "initialize: HTTP 404",
          "changedAt": "2026-11-07T01:46:04.506267404Z"
        },
        "github": {
          "repo": "mailchimp/mailchimp-marketing-typescript-sdk",
          "checkedAt": "2026-11-02T09:02:20.928892212Z",
          "stars": 0,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-13T15:15:39Z",
          "openIssues": 1,
          "openPRs": 0,
          "issuesOpened90d": 1,
          "issuesClosed90d": 0,
          "prsMerged90d": 4,
          "ci": {
            "branch": "main",
            "runs": 7,
            "success": 7,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-10-13T15:16:30Z"
          },
          "replies": {
            "sampled": 1,
            "unanswered": 1
          }
        },
        "updatedAt": "2026-11-07T18:20:36.669372858Z"
      }
    },
    "edges": [
      {
        "by": 28,
        "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": "API keys are named, several to an account, revocable, and bounded by the creating user's level. A key has full account access, and the docs say there is no read-only key and no per-endpoint limit. Keys made from 22 June 2026 expire after one year per the help centre. OAuth 2 uses the authorisation code grant with no scopes, and its tokens never expire. Credentials travel in a header, not the URL (20). No read-only mode. `send-checklist`, `actions/test`, `actions/unschedule` and `actions/cancel-send` exist, with no approval step before a send or a permanent contact delete (6). The API returns contact fields, conversation messages and survey answers, which are untrusted text, and no guidance on prompt injection was found (2). `/authorized-apps` lists the OAuth apps on an account and each response carries a request id. No API call log or audit log was found in the docs we read (4). A responsible disclosure programme with no rewards, a security.txt with a contact and no Expires field, SOC 2 reports, ISO 27001, regular penetration tests and optional two-factor sign-in. No public advisory feed found (14)."
        },
        "scores": {
          "a": 74,
          "b": 46
        }
      },
      {
        "by": 21,
        "category": "reliability",
        "leads": "mailchimp-marketing",
        "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 hosted REST API with the hosted lines. status.mailchimp.com lists an API component for each of 21 data centres and keeps event history by month, re-read on 4 November (20). In the 90 days from 6 August 2026 the marketing events are campaign links returning 500 errors on 13 August, delayed audience updates on 11 September, cropped images disappearing in campaigns from 9 October, and access issues on some app pages \"for some Mailchimp users\" on 27 to 29 October. Each hit one function or some users, none names the API component, and November has none, so minor only (20). The loss of click tracking from 3 to 4 August ended before the window. The three Transactional delays belong to the Mailchimp Transactional listing. The docs give 10 simultaneous connections per user, a 120-second timeout and 500 pending batches, with no per-minute figure (12 of 15, partly met). 429 is documented with its cause. The official Python library's README says it retries 408, 409, 429 and 5xx with exponential backoff, two retries by default. No `Retry-After` header, idempotency key or safe-retry guidance for writes was found in the docs, so backoff alone (10). No SLA found (0). Version 3.0 is generally available, and the Audiences endpoints are beta (10). 20 + 20 + 12 + 10 + 0 + 10 = 72."
        },
        "scores": {
          "a": 51,
          "b": 72
        }
      },
      {
        "by": 17,
        "category": "schema",
        "leads": "mailchimp-marketing",
        "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": "An OpenAPI 3.1.1 file with all 297 operations is public on the API host, and the docs site serves a 1.2 MB copy (25). llms.txt at each level of the docs and a Markdown copy of every page at the URL plus `.md` (10). Every operation has a description, averaging about 60 characters. They say what a call does and seldom when not to use it, and four agent skills cover consent, OAuth, webhooks and bulk jobs (10). The smaller file carries 498 enums and required fields on request bodies. Merge fields and event properties are free-form objects (12). The API's own file has examples throughout and a `default` error response on every operation, and the docs have an error glossary. The docs-site copy lists only 200 and 204 responses (12). The version is in the path and has been 3.0 since 2016. The public changelog's newest entry is 19 August 2025, so key expiry from 22 June 2026, webhook signing and the new client libraries are not in it, and the specification's version label is 0.1.0-dev (7)."
        },
        "scores": {
          "a": 59,
          "b": 76
        }
      },
      {
        "by": 15,
        "category": "payments",
        "leads": "mailchimp-marketing",
        "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). Plan prices are public without a login, from $13 a month for Essentials, $20 for Standard and $350 for Premium with USD selected, rising with contacts through a selector. Nothing is priced per API call (10). The Free plan has 250 contacts and 500 sends a month with no time limit. We could not confirm that signup asks for no card, and the 14-day trial of a paid plan needs payment details, so 15 of 20. A person signs up in a browser and creates a key or approves OAuth (0)."
        },
        "scores": {
          "a": 10,
          "b": 25
        }
      },
      {
        "by": 15,
        "category": "transparency",
        "leads": "mailchimp-marketing",
        "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 with published terms, an API Use Policy and a named contracting entity. The client libraries declare Apache-2.0 in package metadata (15). A data processing addendum effective 26 September 2024 covers deletion or return on termination without a stated period, and the Intuit Global Privacy Statement of 9 March 2026 is the privacy document. The terms let Mailchimp use inputs and outputs of its AI functions, customer data included, for machine learning, with a preference in account settings. No retention periods for marketing data were found (18). No deprecation policy was found. The API Use Policy says the APIs can change by a posting or an email. Dated notices exist, such as key expiry from 22 June 2026 in the help centre (8). A sub-processor list with locations is public and was last updated on 29 February 2024, and the security page places Mailchimp's own servers in United States data centres (14)."
        },
        "scores": {
          "a": 59,
          "b": 74
        }
      },
      {
        "by": 12,
        "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": "Release 1.0.3 of the TypeScript, Python and Go client libraries, the first tag in each, is dated 5 October 2026, 30 days before this check (30). The TypeScript library's 1.0.03 of 13 October changes only version strings and the lockfile, so it counts half and doesn't set recency. Dated releases in the 90 days from 6 August include the CLI's 0.0.212 and 0.0.213 and Swift 1.0.0 on 18 September, Java 1.0.0 and C# 1.0.0 and 1.0.1 on 21 September, and 1.0.3 across the libraries on 5 October (20). The API changelog has no entry in that time. A public changelog whose newest entry is 19 August 2025, an API help address, and a help centre article saying support is not trained for in-depth API questions. We saw no public issue replies (5 of 15). Nine official client libraries generated from the current specification, with the TypeScript package absent from npm on 8 October (8 of 15, partly met). Each repository has a workflow that compiles and tests, whose results we could not see, and release 1.0.3 removed the `LICENSE` and `NOTICE` files added on 18 September (5 of 10, partly met). 30 + 20 + 5 + 8 + 5 = 68."
        },
        "scores": {
          "a": 80,
          "b": 68
        }
      }
    ],
    "facts": [
      {
        "a": "MCP server",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Notika AI",
        "b": "Intuit Mailchimp",
        "name": "Vendor"
      },
      {
        "a": "https://mcp.dreamlit.ai/mcp",
        "b": "https://api.mailchimp.com/3.0",
        "name": "Hosted endpoint"
      },
      {
        "a": "Streamable HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "Proprietary service under Mailchimp's Standard Terms of Use and API Use Policy. The generated client libraries declare Apache-2.0 in their package metadata",
        "name": "Licence"
      },
      {
        "a": "16",
        "b": "none",
        "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-05",
        "name": "Last release"
      },
      {
        "a": "2026-01-29",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-01-29",
        "b": "2026-03-09",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "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": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "278k npm/wk, 111k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Mailchimp Marketing API scores 60.2 (C) on agent readiness against Dreamlit's 57 (C), and leads in 5 of 7 scored categories. Dreamlit leads on security \u0026 auth and maintenance \u0026 community.",
        "question": "Which is better for AI agents, Dreamlit or Mailchimp Marketing API?"
      },
      {
        "answer": "Dreamlit uses an OAuth sign-in. Mailchimp Marketing API takes an API key or an OAuth sign-in.",
        "question": "Do Dreamlit and Mailchimp Marketing API need an API key?"
      },
      {
        "answer": "Yes. Dreamlit has a hosted endpoint at https://mcp.dreamlit.ai/mcp and Mailchimp Marketing API at https://api.mailchimp.com/3.0.",
        "question": "Can an agent call Dreamlit and Mailchimp Marketing API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 74 against 46",
          "Maintenance \u0026 community, 80 against 68"
        ],
        "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, 72 against 51",
          "Schema \u0026 documentation, 76 against 59",
          "Agent ergonomics, 73 against 67",
          "Payments \u0026 pricing, 25 against 10",
          "Transparency \u0026 trust, 74 against 59"
        ],
        "also": null,
        "goodFor": "Small businesses already on Mailchimp that want an agent to sync contacts, tag and segment them, record events, draft and schedule campaigns and read reports.",
        "slug": "mailchimp-marketing",
        "watchFor": "An API key has full account access. The docs say there is no read-only key and no way to limit a key to chosen endpoints"
      }
    ],
    "history": {
      "dreamlit": null,
      "mailchimp-marketing": [
        {
          "causes": [
            "correction",
            "time"
          ],
          "date": "2026-11-04",
          "delta": 2.8,
          "from": 57.4,
          "fromGrade": "C",
          "to": 60.2,
          "toGrade": "C"
        }
      ]
    },
    "job": {
      "capability": "marketing.journeys",
      "name": "Marketing journeys"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/activecampaign-vs-mailchimp-marketing.json",
        "title": "ActiveCampaign vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/activecampaign-vs-mailchimp-marketing"
      },
      {
        "json": "https://www.anchorterminal.com/compare/braze-vs-mailchimp-marketing.json",
        "title": "Braze vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/braze-vs-mailchimp-marketing"
      },
      {
        "json": "https://www.anchorterminal.com/compare/clevertap-vs-mailchimp-marketing.json",
        "title": "CleverTap vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/clevertap-vs-mailchimp-marketing"
      },
      {
        "json": "https://www.anchorterminal.com/compare/customer-io-vs-mailchimp-marketing.json",
        "title": "Customer.io vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/customer-io-vs-mailchimp-marketing"
      },
      {
        "json": "https://www.anchorterminal.com/compare/iterable-vs-mailchimp-marketing.json",
        "title": "Iterable vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/iterable-vs-mailchimp-marketing"
      },
      {
        "json": "https://www.anchorterminal.com/compare/klaviyo-vs-mailchimp-marketing.json",
        "title": "Klaviyo API + MCP vs Mailchimp Marketing API",
        "url": "https://www.anchorterminal.com/compare/klaviyo-vs-mailchimp-marketing"
      },
      {
        "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/mailchimp-marketing-vs-nitrosend.json",
        "title": "Mailchimp Marketing API vs Nitrosend",
        "url": "https://www.anchorterminal.com/compare/mailchimp-marketing-vs-nitrosend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailchimp-marketing-vs-omnisend.json",
        "title": "Mailchimp Marketing API vs Omnisend",
        "url": "https://www.anchorterminal.com/compare/mailchimp-marketing-vs-omnisend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailchimp-marketing-vs-sequenzy.json",
        "title": "Mailchimp Marketing API vs Sequenzy",
        "url": "https://www.anchorterminal.com/compare/mailchimp-marketing-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-moengage.json",
        "title": "Dreamlit vs MoEngage",
        "url": "https://www.anchorterminal.com/compare/dreamlit-vs-moengage"
      },
      {
        "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": 21,
        "dreamlit": 51,
        "edge": "mailchimp-marketing",
        "key": "reliability",
        "mailchimp-marketing": 72,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 17,
        "dreamlit": 59,
        "edge": "mailchimp-marketing",
        "key": "schema",
        "mailchimp-marketing": 76,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 6,
        "dreamlit": 67,
        "edge": "mailchimp-marketing",
        "key": "ergonomics",
        "mailchimp-marketing": 73,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 28,
        "dreamlit": 74,
        "edge": "dreamlit",
        "key": "security",
        "mailchimp-marketing": 46,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 15,
        "dreamlit": 10,
        "edge": "mailchimp-marketing",
        "key": "payments",
        "mailchimp-marketing": 25,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 12,
        "dreamlit": 80,
        "edge": "dreamlit",
        "key": "maintenance",
        "mailchimp-marketing": 68,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 15,
        "dreamlit": 59,
        "edge": "mailchimp-marketing",
        "key": "transparency",
        "mailchimp-marketing": 74,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Mailchimp Marketing API scores 60.2 (C) on agent readiness against Dreamlit's 57 (C), and leads in 5 of 7 scored categories. Dreamlit leads on security \u0026 auth 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.",
      "mailchimp-marketing": "A public OpenAPI 3.1 file covers all 297 operations, every docs page has a Markdown copy, and responses can be trimmed with `fields`. An API key carries full account access with no read-only option. The quick start's TypeScript package was not on npm on 8 October 2026, and the changelog's newest entry is 19 August 2025."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing",
    "json": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.min.md"
  },
  "markdown": "Mailchimp Marketing API scores 60.2 (C) on agent readiness against Dreamlit's 57 (C), and leads in 5 of 7 scored categories. Dreamlit leads on security \u0026 auth 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- Mailchimp Marketing API: grade C, 60.2/100, rank #660 of 1486. Markdown https://www.anchorterminal.com/tools/mailchimp-marketing.md · JSON https://www.anchorterminal.com/api/v1/tools/mailchimp-marketing.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 46\n- Maintenance \u0026 community, 80 against 68\n\nWatch for: No REST API, SDK or OpenAPI; the MCP server is the only programmatic route\n\n### Mailchimp Marketing API (C)\n\nGood for: Small businesses already on Mailchimp that want an agent to sync contacts, tag and segment them, record events, draft and schedule campaigns and read reports.\n\nAhead on:\n- Reliability, 72 against 51\n- Schema \u0026 documentation, 76 against 59\n- Agent ergonomics, 73 against 67\n- Payments \u0026 pricing, 25 against 10\n- Transparency \u0026 trust, 74 against 59\n\nWatch for: An API key has full account access. The docs say there is no read-only key and no way to limit a key to chosen endpoints\n\n\n## Why the edge\n\n### Security \u0026 auth: Dreamlit +28\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- Mailchimp Marketing API (46): API keys are named, several to an account, revocable, and bounded by the creating user's level. A key has full account access, and the docs say there is no read-only key and no per-endpoint limit. Keys made from 22 June 2026 expire after one year per the help centre. OAuth 2 uses the authorisation code grant with no scopes, and its tokens never expire. Credentials travel in a header, not the URL (20). No read-only mode. `send-checklist`, `actions/test`, `actions/unschedule` and `actions/cancel-send` exist, with no approval step before a send or a permanent contact delete (6). The API returns contact fields, conversation messages and survey answers, which are untrusted text, and no guidance on prompt injection was found (2). `/authorized-apps` lists the OAuth apps on an account and each response carries a request id. No API call log or audit log was found in the docs we read (4). A responsible disclosure programme with no rewards, a security.txt with a contact and no Expires field, SOC 2 reports, ISO 27001, regular penetration tests and optional two-factor sign-in. No public advisory feed found (14).\n\n### Reliability: Mailchimp Marketing API +21\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- Mailchimp Marketing API (72): Graded on the hosted REST API with the hosted lines. status.mailchimp.com lists an API component for each of 21 data centres and keeps event history by month, re-read on 4 November (20). In the 90 days from 6 August 2026 the marketing events are campaign links returning 500 errors on 13 August, delayed audience updates on 11 September, cropped images disappearing in campaigns from 9 October, and access issues on some app pages \"for some Mailchimp users\" on 27 to 29 October. Each hit one function or some users, none names the API component, and November has none, so minor only (20). The loss of click tracking from 3 to 4 August ended before the window. The three Transactional delays belong to the Mailchimp Transactional listing. The docs give 10 simultaneous connections per user, a 120-second timeout and 500 pending batches, with no per-minute figure (12 of 15, partly met). 429 is documented with its cause. The official Python library's README says it retries 408, 409, 429 and 5xx with exponential backoff, two retries by default. No `Retry-After` header, idempotency key or safe-retry guidance for writes was found in the docs, so backoff alone (10). No SLA found (0). Version 3.0 is generally available, and the Audiences endpoints are beta (10). 20 + 20 + 12 + 10 + 0 + 10 = 72.\n\n### Schema \u0026 documentation: Mailchimp Marketing API +17\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- Mailchimp Marketing API (76): An OpenAPI 3.1.1 file with all 297 operations is public on the API host, and the docs site serves a 1.2 MB copy (25). llms.txt at each level of the docs and a Markdown copy of every page at the URL plus `.md` (10). Every operation has a description, averaging about 60 characters. They say what a call does and seldom when not to use it, and four agent skills cover consent, OAuth, webhooks and bulk jobs (10). The smaller file carries 498 enums and required fields on request bodies. Merge fields and event properties are free-form objects (12). The API's own file has examples throughout and a `default` error response on every operation, and the docs have an error glossary. The docs-site copy lists only 200 and 204 responses (12). The version is in the path and has been 3.0 since 2016. The public changelog's newest entry is 19 August 2025, so key expiry from 22 June 2026, webhook signing and the new client libraries are not in it, and the specification's version label is 0.1.0-dev (7).\n\n### Payments \u0026 pricing: Mailchimp Marketing API +15\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- Mailchimp Marketing API (25): No x402, MPP or L402 (0). Plan prices are public without a login, from $13 a month for Essentials, $20 for Standard and $350 for Premium with USD selected, rising with contacts through a selector. Nothing is priced per API call (10). The Free plan has 250 contacts and 500 sends a month with no time limit. We could not confirm that signup asks for no card, and the 14-day trial of a paid plan needs payment details, so 15 of 20. A person signs up in a browser and creates a key or approves OAuth (0).\n\n### Transparency \u0026 trust: Mailchimp Marketing API +15\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- Mailchimp Marketing API (74): Closed service with published terms, an API Use Policy and a named contracting entity. The client libraries declare Apache-2.0 in package metadata (15). A data processing addendum effective 26 September 2024 covers deletion or return on termination without a stated period, and the Intuit Global Privacy Statement of 9 March 2026 is the privacy document. The terms let Mailchimp use inputs and outputs of its AI functions, customer data included, for machine learning, with a preference in account settings. No retention periods for marketing data were found (18). No deprecation policy was found. The API Use Policy says the APIs can change by a posting or an email. Dated notices exist, such as key expiry from 22 June 2026 in the help centre (8). A sub-processor list with locations is public and was last updated on 29 February 2024, and the security page places Mailchimp's own servers in United States data centres (14).\n\n### Maintenance \u0026 community: Dreamlit +12\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- Mailchimp Marketing API (68): Release 1.0.3 of the TypeScript, Python and Go client libraries, the first tag in each, is dated 5 October 2026, 30 days before this check (30). The TypeScript library's 1.0.03 of 13 October changes only version strings and the lockfile, so it counts half and doesn't set recency. Dated releases in the 90 days from 6 August include the CLI's 0.0.212 and 0.0.213 and Swift 1.0.0 on 18 September, Java 1.0.0 and C# 1.0.0 and 1.0.1 on 21 September, and 1.0.3 across the libraries on 5 October (20). The API changelog has no entry in that time. A public changelog whose newest entry is 19 August 2025, an API help address, and a help centre article saying support is not trained for in-depth API questions. We saw no public issue replies (5 of 15). Nine official client libraries generated from the current specification, with the TypeScript package absent from npm on 8 October (8 of 15, partly met). Each repository has a workflow that compiles and tests, whose results we could not see, and release 1.0.3 removed the `LICENSE` and `NOTICE` files added on 18 September (5 of 10, partly met). 30 + 20 + 5 + 8 + 5 = 68.\n\n## Score by category\n\n| Category | Weight | Dreamlit | Mailchimp Marketing API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 51 | 72 | Mailchimp Marketing API +21 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 59 | 76 | Mailchimp Marketing API +17 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 73 | Mailchimp Marketing API +6 |\n| Security \u0026 auth | 14% (17.5 this run) | 74 | 46 | Dreamlit +28 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 10 | 25 | Mailchimp Marketing API +15 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 80 | 68 | Dreamlit +12 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 59 | 74 | Mailchimp Marketing API +15 |\n| Negative events | ≤15 | 0 | -2 | |\n| **Total** | | **57 · C** | **60.2 · C** | |\n\n## Facts side by side\n\n| Fact | Dreamlit | Mailchimp Marketing API |\n| --- | --- | --- |\n| Kind | MCP server | HTTP API |\n| Vendor | Notika AI | Intuit Mailchimp |\n| Hosted endpoint | `https://mcp.dreamlit.ai/mcp` | `https://api.mailchimp.com/3.0` |\n| Transports | Streamable HTTP | HTTP |\n| Auth | OAuth | OAuth or key |\n| Pricing | Paid | Freemium |\n| x402 | no | no |\n| Licence | none | Proprietary service under Mailchimp's Standard Terms of Use and API Use Policy. The generated client libraries declare Apache-2.0 in their package metadata |\n| Tools exposed | 16 | none |\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-05 |\n| Terms last updated | 2026-01-29 | no date given |\n| Privacy policy last updated | 2026-01-29 | 2026-03-09 |\n| Customer content may train models | not found in the text | yes |\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 | yes |\n| Arbitration or class-action waiver | yes | yes |\n| Popularity | none | 278k npm/wk, 111k PyPI/wk |\n\n## How the scores have moved\n\n### Dreamlit\n\nNo score change since it was listed.\n\n### Mailchimp Marketing API\n\n- +2.8 on 4 November 2026: correction, time\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**Mailchimp Marketing API.** A public OpenAPI 3.1 file covers all 297 operations, every docs page has a Markdown copy, and responses can be trimmed with `fields`. An API key carries full account access with no read-only option. The quick start's TypeScript package was not on npm on 8 October 2026, and the changelog's newest entry is 19 August 2025.\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### Mailchimp Marketing API\n\n1. Send the key or OAuth token as `Authorization: Bearer` to `https://api.mailchimp.com/3.0/`. Treat it as full account access and keep it server-side\n2. Address a contact by the MD5 hash of the lowercase email address, and use PUT on `/lists/{list_id}/members/{subscriber_hash}` so a retry does not create a duplicate\n3. Ask a person before POST `/campaigns/{campaign_id}/actions/send`. Read `/campaigns/{campaign_id}/send-checklist` and use `actions/test` first\n4. Keep to 10 concurrent requests per user, and send large jobs to `/batches`. A 429 names no wait time, so back off and retry\n5. Add `fields=` to every list call and set `count` (default 10, maximum 1,000) with `offset`\n6. Set `is_syncing` to true when loading historical events so they do not trigger automations\n\n## Questions\n\n### Which is better for AI agents, Dreamlit or Mailchimp Marketing API?\n\nMailchimp Marketing API scores 60.2 (C) on agent readiness against Dreamlit's 57 (C), and leads in 5 of 7 scored categories. Dreamlit leads on security \u0026 auth and maintenance \u0026 community.\n\n### Do Dreamlit and Mailchimp Marketing API need an API key?\n\nDreamlit uses an OAuth sign-in. Mailchimp Marketing API takes an API key or an OAuth sign-in.\n\n### Can an agent call Dreamlit and Mailchimp Marketing API without installing anything?\n\nYes. Dreamlit has a hosted endpoint at https://mcp.dreamlit.ai/mcp and Mailchimp Marketing API at https://api.mailchimp.com/3.0.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.json, and with the fewest tokens: https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"dreamlit\", \"b\": \"mailchimp-marketing\"}`. From a terminal: `anchor compare dreamlit mailchimp-marketing`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/dreamlit.json and https://www.anchorterminal.com/api/v1/tools/mailchimp-marketing.json\n\n## Other comparisons with Dreamlit or Mailchimp Marketing API\n\n- [ActiveCampaign vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/activecampaign-vs-mailchimp-marketing.md)\n- [Braze vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/braze-vs-mailchimp-marketing.md)\n- [CleverTap vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/clevertap-vs-mailchimp-marketing.md)\n- [Customer.io vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/customer-io-vs-mailchimp-marketing.md)\n- [Iterable vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/iterable-vs-mailchimp-marketing.md)\n- [Klaviyo API + MCP vs Mailchimp Marketing API](https://www.anchorterminal.com/compare/klaviyo-vs-mailchimp-marketing.md)\n- [Mailchimp Marketing API vs MoEngage](https://www.anchorterminal.com/compare/mailchimp-marketing-vs-moengage.md)\n- [Mailchimp Marketing API vs Nitrosend](https://www.anchorterminal.com/compare/mailchimp-marketing-vs-nitrosend.md)\n- [Mailchimp Marketing API vs Omnisend](https://www.anchorterminal.com/compare/mailchimp-marketing-vs-omnisend.md)\n- [Mailchimp Marketing API vs Sequenzy](https://www.anchorterminal.com/compare/mailchimp-marketing-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 MoEngage](https://www.anchorterminal.com/compare/dreamlit-vs-moengage.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 Mailchimp Marketing API",
        "url": ""
      }
    ],
    "description": "Mailchimp Marketing scores 60.2 (C) to Dreamlit's 57 (C) for marketing journeys. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Dreamlit C 57",
      "Mailchimp Marketing API C 60.2",
      "scores"
    ],
    "h1": "Dreamlit vs Mailchimp Marketing API",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/dreamlit-vs-mailchimp-marketing",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Dreamlit vs Mailchimp Marketing for AI agents (2026) | Anchor Terminal",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/dreamlit-vs-mailchimp-marketing"
  },
  "tokens": {
    "markdown": 5000,
    "slim": 3180
  },
  "version": 1
}
