[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-azure-azure-connectornamespace-aca-sandbox":3,"mdc-hh1fae-key":35,"related-repo-azure-azure-connectornamespace-aca-sandbox":3151,"related-org-azure-azure-connectornamespace-aca-sandbox":3172},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":30,"sourceUrl":33,"mdContent":34},"azure-connectornamespace-aca-sandbox","manage Azure Connector Namespace connections","Azure Connector Namespace — ACA sandbox edition. Manage connector namespaces,\nconnections, and triggers that wire external services (Office 365, Teams, Forms,\nSharePoint, OneDrive, GitHub, Azure Blob) into ACA sandbox apps via event-driven\ntriggers or direct API calls using connection runtime URLs.\nUse when:\n- Managing connector namespaces and connections for ACA sandboxes\n- Creating trigger configs whose callbacks target sandbox endpoints\n- Wiring event sources to ACA sandbox callbacks via gatewayConnections\n- Building sandbox apps that call connector APIs (send email, post Teams message, etc.)\n- Reacting to events from one service and calling another\nTriggers: \"create trigger\", \"trigger config\", \"webhook trigger\", \"connector namespace\",\n\"connector\", \"connection\", \"email trigger\", \"send email\", \"onedrive\", \"sharepoint\",\n\"teams\", \"teams message\", \"microsoft forms\", \"form response\", \"aca sandbox\",\n\"sandbox group\", \"container apps sandbox\", \"notify\", \"automate\", \"when\", \"on new\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"azure","Azure (Microsoft)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fazure.png","Azure",[13,15,18],{"name":11,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Integrations","integrations",{"name":19,"slug":20,"type":14},"API Development","api-development",20,"https:\u002F\u002Fgithub.com\u002FAzure\u002FConnectors","2026-07-12T08:18:19.008492",null,2,[8,27,28,29],"connector-namespaces","connectors","microsoft",{"repoUrl":22,"stars":21,"forks":25,"topics":31,"description":32},[8,27,28,29],"Connector Namespaces - Connect your AI agents and workloads to the apps you already use.","https:\u002F\u002Fgithub.com\u002FAzure\u002FConnectors\u002Ftree\u002FHEAD\u002Fplugin\u002Fskills\u002Faca-sandboxes","---\nname: azure-connectornamespace-aca-sandbox\ndescription: |\n  Azure Connector Namespace — ACA sandbox edition. Manage connector namespaces,\n  connections, and triggers that wire external services (Office 365, Teams, Forms,\n  SharePoint, OneDrive, GitHub, Azure Blob) into ACA sandbox apps via event-driven\n  triggers or direct API calls using connection runtime URLs.\n  Use when:\n  - Managing connector namespaces and connections for ACA sandboxes\n  - Creating trigger configs whose callbacks target sandbox endpoints\n  - Wiring event sources to ACA sandbox callbacks via gatewayConnections\n  - Building sandbox apps that call connector APIs (send email, post Teams message, etc.)\n  - Reacting to events from one service and calling another\n  Triggers: \"create trigger\", \"trigger config\", \"webhook trigger\", \"connector namespace\",\n  \"connector\", \"connection\", \"email trigger\", \"send email\", \"onedrive\", \"sharepoint\",\n  \"teams\", \"teams message\", \"microsoft forms\", \"form response\", \"aca sandbox\",\n  \"sandbox group\", \"container apps sandbox\", \"notify\", \"automate\", \"when\", \"on new\"\n---\n\n# Azure Connector Namespace — ACA sandbox edition\n\nManage connectors, connections, and triggers — connect external services\nto sandbox apps via direct API calls or event-driven triggers.\n\n## Common scenarios\n\n| User request | Pattern | Connectors involved |\n|---|---|---|\n| \"Send a Teams message when a form is submitted\" | Trigger (Forms) + Direct API (Teams) | `microsoftforms`, `teams` |\n| \"Notify a channel when a file is uploaded\" | Trigger (OneDrive\u002FBlob) + Direct API (Teams) | `onedriveforbusiness`\u002F`azureblob`, `teams` |\n| \"Send an email when a SharePoint list item changes\" | Trigger (SharePoint) + Direct API (Office 365) | `sharepointonline`, `office365` |\n| \"Post to Teams when a new email arrives\" | Trigger (Office 365) + Direct API (Teams) | `office365`, `teams` |\n| \"Save form responses to SharePoint\" | Trigger (Forms) + Direct API (SharePoint) | `microsoftforms`, `sharepointonline` |\n\n## Rules (MUST follow)\n\n| Rule | Details |\n|------|---------|\n| **No hallucination** | Check `references\u002F` for details. Use `az rest --help` for syntax. |\n| **No generated notebooks\u002Fscripts** | Do NOT generate a notebook or standalone script for the user. Walk through interactively. (Reference scripts in `scripts\u002F` and `labs\u002F` exist for learning.) |\n| **No MCP configs** | Sandbox apps call runtime URL directly via HTTP. If you reach `mcp-config create`, STOP. |\n| **No guessing dynamic values** | `x-ms-dynamic-*` → call API, present results, STOP. Never assume a team\u002Fchannel\u002Ffolder\u002Fsite. |\n| **Execute, don't ask** | Gather inputs → execute immediately → report. Never say \"Can I run this?\" |\n| **No az extensions** | Gateway = `az rest`. Sandbox = `aca` CLI. Do NOT use `az connectorgateway\u002Fsandbox\u002Fsandboxgroup`. |\n| **Always `@$tmpFile`** | For `az rest --body` in PowerShell — inline JSON breaks. Bash examples in references\u002F use inline for brevity (shell quoting works in bash). See [gotchas.md](references\u002Fgotchas.md). |\n| **Trigger body schema** | Uses `metadata` + `notificationDetails` (callbackUrl\u002Fbody\u002Fauth). `operationName`+`parameters` at properties root. `callbackTarget` does NOT exist. See Step 5B template. |\n| **Handler deploy** | Write to local file → `aca sandbox fs write`. Never inline Python in PowerShell. |\n| **SSL\u002Fstderr** | `REQUESTS_CA_BUNDLE` preferred. `verify=False` needs `disable_warnings()`. stderr = trigger failure. See [handler-guide.md](references\u002Fhandler-guide.md). |\n| **Parallel execution** | Run independent ops (connections, ACLs, gatewayConnections wiring, dynamic values) as parallel tool calls. |\n| **Sandbox ↔ connection wiring** | Use the declarative **gatewayConnections** pattern (SG-level PATCH + per-sandbox PUT body). See [gateway-connections.md](references\u002Fgateway-connections.md). |\n| **Swagger \u002F operation discovery** | Always fetch the connector Swagger via the connection's runtime metadata URL — see [swagger-discovery.md](references\u002Fswagger-discovery.md) for the full pattern (auth, ACL idempotency, parsing, picking the right operation). |\n| **ACL idempotency** | When creating a **user-ACL** on a connection (for swagger discovery from outside a sandbox), ALWAYS GET the policy first and only PUT if it doesn't exist. Never blindly recreate a user-ACL. (This does not apply to `gateway-acl` \u002F `sandbox-acl` — those are typically PUT directly during setup.) |\n| **Narrate progress** | The user must know what's happening at each step **before** you run the shell. Print a short chat message (NOT inside the shell block) with: (a) what you're doing in one line, (b) the exact URL or resource ID being touched, and (c) why. Never run a shell command silently or with only a collapsed shell block. |\n\n**When to STOP and ask the user:** Any parameter with dynamic values (teams, channels, folders, sites, lists), choosing integration pattern, OAuth consent. **You must NEVER skip this — always fetch the list and present it.**\n\n**When to EXECUTE immediately:** creating gateways\u002Fconnections\u002Ftriggers\u002Fpolicies, wiring gatewayConnections, deploying handlers, installing deps.\n\n### Step 0: Prerequisites & Azure context\n\n1. Check `az account show` and `aca --version`. If missing, see [prerequisites.md](references\u002Fprerequisites.md).\n\n2. **Select subscription** — list available subscriptions, ask the user to pick:\n   ```bash\n   az account list --query \"[].{name:name, id:id, isDefault:isDefault}\" -o table\n   ```\n   Present the list and ask: \"Which subscription do you want to use?\"\n   If the user picks a non-default subscription, set it:\n   ```bash\n   az account set --subscription \"{selected_subscription_id}\"\n   ```\n   Store the subscription ID for all subsequent commands.\n\n3. **Select resource group** — ask: \"Do you have an existing resource group, or should I create one?\"\n   - If **existing**: list and let user pick:\n     ```bash\n     az group list --query \"[].{name:name, location:location}\" -o table\n     ```\n   - If **new**: ask for name + location, then create:\n     ```bash\n     az group create --name {rg} --location {location}\n     ```\n\n**Stop and wait for the user's answers before continuing.**\n\n### Step 1: Understand the scenario\nAsk the user:\n- \"What event do you want to trigger on?\" (new email, SharePoint list item, file upload, etc.)\n- Map the answer to a connector using this table:\n\n| User says | Connector name | Common triggers |\n|-----------|---------------|-----------------|\n| Email, Outlook | `office365` | `OnNewEmailV3`, `OnFlaggedEmail` |\n| SharePoint, list | `sharepointonline` | `OnNewItem`, `OnUpdatedItem` |\n| OneDrive, files | `onedriveforbusiness` | `OnNewFile`, `OnUpdatedFile` |\n| Teams | `teams` | `OnNewChannelMessage` |\n| Forms, survey, quiz | `microsoftforms` | `OnFormResponse`, `OnNewResponse` |\n| Azure Blob | `azureblob` | `OnNewBlob`, `OnUpdatedBlob` |\n\n- Ask if they already know the trigger operation, or want to discover available ones.\n\n**Stop and wait for the user's answer before continuing.**\n\n### Step 2: Gateway setup\n\n> **⚡ Parallel batch:** Once you know the gateway name, run ALL of these in one parallel call:\n> 1. Get gateway info (principalId, tenantId, location)\n> 2. List existing connections (names, statuses, runtime URLs)\n> 3. Get sandbox group identity (if sandbox already exists)\n>\n> This avoids sequential round-trips and saves ~2 minutes.\n\n> **ARM base URL:** `https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways`\n> **API version:** `api-version=2026-05-01-preview`\n> Use the subscription and resource group selected in Step 0.\n\nAsk the user:\n- \"Do you have an existing connector, or should I create a new one?\"\n- If **existing**: ask for the gateway name, then retrieve it (using sub\u002Frg from Step 0):\n  ```bash\n  az rest --method GET \\\n    --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\" \\\n    --query \"{name:name, principalId:identity.principalId, tenantId:identity.tenantId}\"\n  ```\n- If **new**: ask for gateway name + location, then **create it\n  immediately** with a SystemAssigned managed identity (required for trigger callbacks):\n  ```powershell\n  $gwBody = @{ location = \"{location}\"; identity = @{ type = \"SystemAssigned\" } } | ConvertTo-Json -Compress\n  $tmp = New-TemporaryFile; Set-Content $tmp $gwBody\n  az rest --method PUT `\n    --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\" `\n    --body \"@$tmp\" `\n    --query \"{name:name, principalId:identity.principalId, tenantId:identity.tenantId}\"\n  Remove-Item $tmp\n  ```\n- **Always** capture `principalId` and `tenantId` — they are needed later for\n  access policies and InvokePort auth.\n- List existing connections:\n  ```bash\n  az rest --method GET \\\n    --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview\" \\\n    --query \"value[].{name:name, status:properties.statuses[0].status, connector:properties.connectorName}\"\n  ```\n\n**Once you have the gateway info, proceed immediately to Step 3.**\n\n### Step 3: Create connection(s) + authenticate\n\nCreate ALL needed connections in parallel, then consent all at once:\n\n```powershell\n# Create connections (parallel tool calls if multiple):\n$connBody = @{ properties = @{ connectorName = \"office365\" }; location = \"{location}\" } | ConvertTo-Json -Compress\n$tmp = New-TemporaryFile; Set-Content $tmp $connBody\naz rest --method PUT `\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}\u002Fconnections\u002Fo365-conn?api-version=2026-05-01-preview\" `\n  --body \"@$tmp\"\nRemove-Item $tmp\n\n# Repeat for additional connections (onedriveforbusiness, sharepointonline, etc.)\n```\n\nGenerate consent links and open in browser. → **Exact format:** See [consent.md](references\u002Fconsent.md)\n\n> **⚠️ Use `Start-Process` to open links. Body MUST use `parameters` array with\n> `objectId`\u002F`tenantId` from the connection. Do NOT try other formats or print the URL.**\n\nAsk user to authenticate (use `ask_user`), then verify:\n```bash\naz rest --method GET \\\n  --url \"...\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview\" \\\n  --query \"value[].{name:name, status:properties.statuses[0].status}\"\n# All should show: Connected. If not, re-consent.\n```\n\n### Step 4: Choose integration pattern\nAsk the user:\n- **A) Direct API calls** — call connector operations on demand via `dynamicInvoke`\n  (send email, read list, create file). If deploying to sandbox, also wires the connection to the sandbox group + sandbox via `gatewayConnections[]`.\n- **B) Event-driven triggers** — gateway pushes notifications to sandbox when\n  events happen. Handler can then use direct API calls for additional actions.\n\n**Stop and wait for the user's answer.**\n\n- If **A** → **Step 5A**\n- If **B** → **Step 5B**\n\n---\n\n### Step 5A: Direct API calls via dynamicInvoke\n\n→ **Full details:** [direct-api.md](references\u002Fdirect-api.md) | **Swagger discovery:** [swagger-discovery.md](references\u002Fswagger-discovery.md) | **Dynamic values:** [dynamic-values.md](references\u002Fdynamic-values.md)\n\n1. Fetch the connector Swagger and pick an operation — see [swagger-discovery.md](references\u002Fswagger-discovery.md).\n2. Call `dynamicInvoke` on the connection with the resolved `method` + `path`\n3. If parameters have `x-ms-dynamic-*` → resolve via dynamicInvoke, show display names to user, store values\n\n**If deploying to sandbox:** Wire the connection declaratively (sandbox-group `gatewayConnections[]` PATCH + per-sandbox PUT body referencing the same connection) → [gateway-connections.md](references\u002Fgateway-connections.md). The platform proxy injects Bearer auth on every runtime-URL call automatically; the handler makes plain `requests.get(...)` calls with no auth header.\n\n**→ Skip to Final verification checklist.**\n\n---\n\n### Step 5B: Event-driven triggers\n\n→ **Full trigger setup (Steps 5B–9B):** [trigger-setup.md](references\u002Ftrigger-setup.md) | **Swagger discovery:** [swagger-discovery.md](references\u002Fswagger-discovery.md) | **Dynamic values:** [dynamic-values.md](references\u002Fdynamic-values.md)\n\n1. Discover trigger operations — fetch the Swagger and filter paths whose operation has `x-ms-trigger` set. See [swagger-discovery.md](references\u002Fswagger-discovery.md).\n2. If trigger type is `batch` (polling): inform user it polls every ~3 minutes by default. Ask if they want a different interval.\n3. Collect parameters (resolve `x-ms-dynamic-*` via Swagger + dynamicInvoke)\n4. Ask user: sandbox (existing\u002Fnew) + callback type (ShellCommand \u002F ExecuteCommand \u002F InvokePort)\n5. Create trigger + access policy + role assignment (**run in parallel**) — canonical template in [trigger-setup.md](references\u002Ftrigger-setup.md) Step 8B\n6. Verify trigger state is `Enabled`\n\n> **⚠️ Do NOT use `callbackTarget`** — that field does not exist. Correct schema: `metadata` + `notificationDetails`. See [trigger-setup.md](references\u002Ftrigger-setup.md).\n\n| Target | Callback URL | Notes |\n|--------|-------------|-------|\n| ShellCommand | `https:\u002F\u002Fmanagement.{region}.azuredevcompute.io\u002F...\u002FexecuteShellCommand` | Auto-resumes sandbox; needs RBAC `c24cf47c-...` on sandbox group. **Regional host required** (unregional → 404 GlobalSandboxNotFound). |\n| ExecuteCommand | `https:\u002F\u002Fmanagement.{region}.azuredevcompute.io\u002F...\u002FexecuteCommand` | Same as above, no shell interpretation. **Regional host required.** |\n| InvokePort | `https:\u002F\u002F{id}--{port}.proxy.azuredevcompute.io\u002F...` | Sandbox must be running; needs port auth |\n\nAfter trigger creation → deploy handler. See [handler-guide.md](references\u002Fhandler-guide.md).\n\n---\n\n### Final verification checklist\n\n**For Direct API calls (path A):**\n- ✅ Gateway exists, connection `Connected`, `connectionRuntimeUrl` available\n- ✅ Access policies on connection: `gateway-acl` (gateway MI) AND `sandbox-acl` (sandbox-group MI)\n- ✅ Sandbox group has SystemAssigned MI (`aca sandboxgroup identity assign --name {sg} --system-assigned` if `principalId` is null)\n- ✅ Sandbox-group `properties.gatewayConnections[]` includes an entry with this connection's `{resourceId, connectionRuntimeUrl, authentication.type=SystemAssignedManagedIdentity}` (PATCH; merge-don't-clobber)\n- ✅ Each sandbox was created with `gatewayConnections: [{resourceId}]` in its data-plane PUT body (the aca CLI doesn't expose `--gateway-connection`; use `az rest` data-plane PUT)\n- ✅ Test call from sandbox works (no auth header needed — platform proxy injects Bearer)\n\n**For Event-driven triggers (path B):**\n- ✅ Gateway has SystemAssigned identity, connection `Connected`\n- ✅ Trigger state is `Enabled`, `gateway-acl` exists (gateway MI → connection)\n- ✅ RBAC role on sandbox group (ShellCommand) OR port auth (InvokePort)\n- ✅ If handler calls runtime URL: also needs `sandbox-acl` + sandbox-group `gatewayConnections[]` entry + per-sandbox `gatewayConnections[{resourceId}]` (same as path A)\n\nAfter setup → deploy the handler app. See [handler-guide.md](references\u002Fhandler-guide.md).\n\n## Quick reference\n\n```bash\n# ARM base: https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\n# API version: api-version=2026-05-01-preview\n\n# Gateway\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\"\n\n# Connections\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview\"\n\n# Connector Swagger (paths, parameters, x-ms-dynamic-* extensions) — use to list operations or pick a specific one.\n# See references\u002Fswagger-discovery.md for the full fetch pattern (metadata URL + user-ACL + API Hub token):\n#   az rest --method GET --url \"\u003Cmetadata_url>?export=true\" --resource \"https:\u002F\u002Fapihub.azure.com\"\n\n# Dynamic invoke\naz rest --method POST --url \"...\u002FconnectorGateways\u002F{gw}\u002Fconnections\u002F{conn}\u002FdynamicInvoke?api-version=2026-05-01-preview\" --body '{\"request\":{\"method\":\"GET\",\"path\":\"\u002F...\"}}'\n\n# Trigger configs\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}\u002FtriggerConfigs?api-version=2026-05-01-preview\"\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}\u002FtriggerConfigs\u002F{name}?api-version=2026-05-01-preview\" --query \"properties.state\"\n```\n\n## References\n\n- [direct-api.md](references\u002Fdirect-api.md) — Full dynamicInvoke details, parameter resolution, examples\n- [consent.md](references\u002Fconsent.md) — OAuth consent link generation (exact body format)\n- [trigger-setup.md](references\u002Ftrigger-setup.md) — Full trigger creation commands (Steps 5B–9B)\n- [handler-guide.md](references\u002Fhandler-guide.md) — Handler development, event delivery, templates\n- [dynamic-values.md](references\u002Fdynamic-values.md) — Dynamic parameter resolution algorithms\n- [gateway-connections.md](references\u002Fgateway-connections.md) — Sandbox ↔ connection wiring (declarative gatewayConnections[])\n- [runtime-url-examples.md](references\u002Fruntime-url-examples.md) — Curl examples for all connectors\n- [gotchas.md](references\u002Fgotchas.md) — Common issues and solutions\n- [trigger-flow.md](references\u002Ftrigger-flow.md) — Trigger architecture details\n- [prerequisites.md](references\u002Fprerequisites.md) — Setup requirements\n- [quickstart.md](references\u002Fquickstart.md) — Quick start guide\n- [tutorial-welcome-emailer.md](references\u002Ftutorial-welcome-emailer.md) — Pattern A walkthrough: deploy a welcome emailer to a sandbox\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,49,55,62,245,251,735,750,760,767,1054,1062,1068,1073,1086,1298,1306,1314,1320,1357,1390,1394,1684,1692,1698,1703,1783,1801,1841,1854,1937,1943,1947,1985,1993,2027,2031,2037,2079,2129,2160,2168,2171,2177,2213,2293,2329,2442,2452,2455,2461,2469,2585,2593,2656,2666,2672,3015,3021,3145],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"azure-connector-namespace-aca-sandbox-edition",[46],{"type":47,"value":48},"text","Azure Connector Namespace — ACA sandbox edition",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Manage connectors, connections, and triggers — connect external services\nto sandbox apps via direct API calls or event-driven triggers.",{"type":41,"tag":56,"props":57,"children":59},"h2",{"id":58},"common-scenarios",[60],{"type":47,"value":61},"Common scenarios",{"type":41,"tag":63,"props":64,"children":65},"table",{},[66,90],{"type":41,"tag":67,"props":68,"children":69},"thead",{},[70],{"type":41,"tag":71,"props":72,"children":73},"tr",{},[74,80,85],{"type":41,"tag":75,"props":76,"children":77},"th",{},[78],{"type":47,"value":79},"User request",{"type":41,"tag":75,"props":81,"children":82},{},[83],{"type":47,"value":84},"Pattern",{"type":41,"tag":75,"props":86,"children":87},{},[88],{"type":47,"value":89},"Connectors involved",{"type":41,"tag":91,"props":92,"children":93},"tbody",{},[94,126,162,191,218],{"type":41,"tag":71,"props":95,"children":96},{},[97,103,108],{"type":41,"tag":98,"props":99,"children":100},"td",{},[101],{"type":47,"value":102},"\"Send a Teams message when a form is submitted\"",{"type":41,"tag":98,"props":104,"children":105},{},[106],{"type":47,"value":107},"Trigger (Forms) + Direct API (Teams)",{"type":41,"tag":98,"props":109,"children":110},{},[111,118,120],{"type":41,"tag":112,"props":113,"children":115},"code",{"className":114},[],[116],{"type":47,"value":117},"microsoftforms",{"type":47,"value":119},", ",{"type":41,"tag":112,"props":121,"children":123},{"className":122},[],[124],{"type":47,"value":125},"teams",{"type":41,"tag":71,"props":127,"children":128},{},[129,134,139],{"type":41,"tag":98,"props":130,"children":131},{},[132],{"type":47,"value":133},"\"Notify a channel when a file is uploaded\"",{"type":41,"tag":98,"props":135,"children":136},{},[137],{"type":47,"value":138},"Trigger (OneDrive\u002FBlob) + Direct API (Teams)",{"type":41,"tag":98,"props":140,"children":141},{},[142,148,150,156,157],{"type":41,"tag":112,"props":143,"children":145},{"className":144},[],[146],{"type":47,"value":147},"onedriveforbusiness",{"type":47,"value":149},"\u002F",{"type":41,"tag":112,"props":151,"children":153},{"className":152},[],[154],{"type":47,"value":155},"azureblob",{"type":47,"value":119},{"type":41,"tag":112,"props":158,"children":160},{"className":159},[],[161],{"type":47,"value":125},{"type":41,"tag":71,"props":163,"children":164},{},[165,170,175],{"type":41,"tag":98,"props":166,"children":167},{},[168],{"type":47,"value":169},"\"Send an email when a SharePoint list item changes\"",{"type":41,"tag":98,"props":171,"children":172},{},[173],{"type":47,"value":174},"Trigger (SharePoint) + Direct API (Office 365)",{"type":41,"tag":98,"props":176,"children":177},{},[178,184,185],{"type":41,"tag":112,"props":179,"children":181},{"className":180},[],[182],{"type":47,"value":183},"sharepointonline",{"type":47,"value":119},{"type":41,"tag":112,"props":186,"children":188},{"className":187},[],[189],{"type":47,"value":190},"office365",{"type":41,"tag":71,"props":192,"children":193},{},[194,199,204],{"type":41,"tag":98,"props":195,"children":196},{},[197],{"type":47,"value":198},"\"Post to Teams when a new email arrives\"",{"type":41,"tag":98,"props":200,"children":201},{},[202],{"type":47,"value":203},"Trigger (Office 365) + Direct API (Teams)",{"type":41,"tag":98,"props":205,"children":206},{},[207,212,213],{"type":41,"tag":112,"props":208,"children":210},{"className":209},[],[211],{"type":47,"value":190},{"type":47,"value":119},{"type":41,"tag":112,"props":214,"children":216},{"className":215},[],[217],{"type":47,"value":125},{"type":41,"tag":71,"props":219,"children":220},{},[221,226,231],{"type":41,"tag":98,"props":222,"children":223},{},[224],{"type":47,"value":225},"\"Save form responses to SharePoint\"",{"type":41,"tag":98,"props":227,"children":228},{},[229],{"type":47,"value":230},"Trigger (Forms) + Direct API (SharePoint)",{"type":41,"tag":98,"props":232,"children":233},{},[234,239,240],{"type":41,"tag":112,"props":235,"children":237},{"className":236},[],[238],{"type":47,"value":117},{"type":47,"value":119},{"type":41,"tag":112,"props":241,"children":243},{"className":242},[],[244],{"type":47,"value":183},{"type":41,"tag":56,"props":246,"children":248},{"id":247},"rules-must-follow",[249],{"type":47,"value":250},"Rules (MUST follow)",{"type":41,"tag":63,"props":252,"children":253},{},[254,270],{"type":41,"tag":67,"props":255,"children":256},{},[257],{"type":41,"tag":71,"props":258,"children":259},{},[260,265],{"type":41,"tag":75,"props":261,"children":262},{},[263],{"type":47,"value":264},"Rule",{"type":41,"tag":75,"props":266,"children":267},{},[268],{"type":47,"value":269},"Details",{"type":41,"tag":91,"props":271,"children":272},{},[273,306,338,362,384,400,440,478,534,558,603,619,649,673,712],{"type":41,"tag":71,"props":274,"children":275},{},[276,285],{"type":41,"tag":98,"props":277,"children":278},{},[279],{"type":41,"tag":280,"props":281,"children":282},"strong",{},[283],{"type":47,"value":284},"No hallucination",{"type":41,"tag":98,"props":286,"children":287},{},[288,290,296,298,304],{"type":47,"value":289},"Check ",{"type":41,"tag":112,"props":291,"children":293},{"className":292},[],[294],{"type":47,"value":295},"references\u002F",{"type":47,"value":297}," for details. Use ",{"type":41,"tag":112,"props":299,"children":301},{"className":300},[],[302],{"type":47,"value":303},"az rest --help",{"type":47,"value":305}," for syntax.",{"type":41,"tag":71,"props":307,"children":308},{},[309,317],{"type":41,"tag":98,"props":310,"children":311},{},[312],{"type":41,"tag":280,"props":313,"children":314},{},[315],{"type":47,"value":316},"No generated notebooks\u002Fscripts",{"type":41,"tag":98,"props":318,"children":319},{},[320,322,328,330,336],{"type":47,"value":321},"Do NOT generate a notebook or standalone script for the user. Walk through interactively. (Reference scripts in ",{"type":41,"tag":112,"props":323,"children":325},{"className":324},[],[326],{"type":47,"value":327},"scripts\u002F",{"type":47,"value":329}," and ",{"type":41,"tag":112,"props":331,"children":333},{"className":332},[],[334],{"type":47,"value":335},"labs\u002F",{"type":47,"value":337}," exist for learning.)",{"type":41,"tag":71,"props":339,"children":340},{},[341,349],{"type":41,"tag":98,"props":342,"children":343},{},[344],{"type":41,"tag":280,"props":345,"children":346},{},[347],{"type":47,"value":348},"No MCP configs",{"type":41,"tag":98,"props":350,"children":351},{},[352,354,360],{"type":47,"value":353},"Sandbox apps call runtime URL directly via HTTP. If you reach ",{"type":41,"tag":112,"props":355,"children":357},{"className":356},[],[358],{"type":47,"value":359},"mcp-config create",{"type":47,"value":361},", STOP.",{"type":41,"tag":71,"props":363,"children":364},{},[365,373],{"type":41,"tag":98,"props":366,"children":367},{},[368],{"type":41,"tag":280,"props":369,"children":370},{},[371],{"type":47,"value":372},"No guessing dynamic values",{"type":41,"tag":98,"props":374,"children":375},{},[376,382],{"type":41,"tag":112,"props":377,"children":379},{"className":378},[],[380],{"type":47,"value":381},"x-ms-dynamic-*",{"type":47,"value":383}," → call API, present results, STOP. Never assume a team\u002Fchannel\u002Ffolder\u002Fsite.",{"type":41,"tag":71,"props":385,"children":386},{},[387,395],{"type":41,"tag":98,"props":388,"children":389},{},[390],{"type":41,"tag":280,"props":391,"children":392},{},[393],{"type":47,"value":394},"Execute, don't ask",{"type":41,"tag":98,"props":396,"children":397},{},[398],{"type":47,"value":399},"Gather inputs → execute immediately → report. Never say \"Can I run this?\"",{"type":41,"tag":71,"props":401,"children":402},{},[403,411],{"type":41,"tag":98,"props":404,"children":405},{},[406],{"type":41,"tag":280,"props":407,"children":408},{},[409],{"type":47,"value":410},"No az extensions",{"type":41,"tag":98,"props":412,"children":413},{},[414,416,422,424,430,432,438],{"type":47,"value":415},"Gateway = ",{"type":41,"tag":112,"props":417,"children":419},{"className":418},[],[420],{"type":47,"value":421},"az rest",{"type":47,"value":423},". Sandbox = ",{"type":41,"tag":112,"props":425,"children":427},{"className":426},[],[428],{"type":47,"value":429},"aca",{"type":47,"value":431}," CLI. Do NOT use ",{"type":41,"tag":112,"props":433,"children":435},{"className":434},[],[436],{"type":47,"value":437},"az connectorgateway\u002Fsandbox\u002Fsandboxgroup",{"type":47,"value":439},".",{"type":41,"tag":71,"props":441,"children":442},{},[443,457],{"type":41,"tag":98,"props":444,"children":445},{},[446],{"type":41,"tag":280,"props":447,"children":448},{},[449,451],{"type":47,"value":450},"Always ",{"type":41,"tag":112,"props":452,"children":454},{"className":453},[],[455],{"type":47,"value":456},"@$tmpFile",{"type":41,"tag":98,"props":458,"children":459},{},[460,462,468,470,477],{"type":47,"value":461},"For ",{"type":41,"tag":112,"props":463,"children":465},{"className":464},[],[466],{"type":47,"value":467},"az rest --body",{"type":47,"value":469}," in PowerShell — inline JSON breaks. Bash examples in references\u002F use inline for brevity (shell quoting works in bash). See ",{"type":41,"tag":471,"props":472,"children":474},"a",{"href":473},"references\u002Fgotchas.md",[475],{"type":47,"value":476},"gotchas.md",{"type":47,"value":439},{"type":41,"tag":71,"props":479,"children":480},{},[481,489],{"type":41,"tag":98,"props":482,"children":483},{},[484],{"type":41,"tag":280,"props":485,"children":486},{},[487],{"type":47,"value":488},"Trigger body schema",{"type":41,"tag":98,"props":490,"children":491},{},[492,494,500,502,508,510,516,518,524,526,532],{"type":47,"value":493},"Uses ",{"type":41,"tag":112,"props":495,"children":497},{"className":496},[],[498],{"type":47,"value":499},"metadata",{"type":47,"value":501}," + ",{"type":41,"tag":112,"props":503,"children":505},{"className":504},[],[506],{"type":47,"value":507},"notificationDetails",{"type":47,"value":509}," (callbackUrl\u002Fbody\u002Fauth). ",{"type":41,"tag":112,"props":511,"children":513},{"className":512},[],[514],{"type":47,"value":515},"operationName",{"type":47,"value":517},"+",{"type":41,"tag":112,"props":519,"children":521},{"className":520},[],[522],{"type":47,"value":523},"parameters",{"type":47,"value":525}," at properties root. ",{"type":41,"tag":112,"props":527,"children":529},{"className":528},[],[530],{"type":47,"value":531},"callbackTarget",{"type":47,"value":533}," does NOT exist. See Step 5B template.",{"type":41,"tag":71,"props":535,"children":536},{},[537,545],{"type":41,"tag":98,"props":538,"children":539},{},[540],{"type":41,"tag":280,"props":541,"children":542},{},[543],{"type":47,"value":544},"Handler deploy",{"type":41,"tag":98,"props":546,"children":547},{},[548,550,556],{"type":47,"value":549},"Write to local file → ",{"type":41,"tag":112,"props":551,"children":553},{"className":552},[],[554],{"type":47,"value":555},"aca sandbox fs write",{"type":47,"value":557},". Never inline Python in PowerShell.",{"type":41,"tag":71,"props":559,"children":560},{},[561,569],{"type":41,"tag":98,"props":562,"children":563},{},[564],{"type":41,"tag":280,"props":565,"children":566},{},[567],{"type":47,"value":568},"SSL\u002Fstderr",{"type":41,"tag":98,"props":570,"children":571},{},[572,578,580,586,588,594,596,602],{"type":41,"tag":112,"props":573,"children":575},{"className":574},[],[576],{"type":47,"value":577},"REQUESTS_CA_BUNDLE",{"type":47,"value":579}," preferred. ",{"type":41,"tag":112,"props":581,"children":583},{"className":582},[],[584],{"type":47,"value":585},"verify=False",{"type":47,"value":587}," needs ",{"type":41,"tag":112,"props":589,"children":591},{"className":590},[],[592],{"type":47,"value":593},"disable_warnings()",{"type":47,"value":595},". stderr = trigger failure. See ",{"type":41,"tag":471,"props":597,"children":599},{"href":598},"references\u002Fhandler-guide.md",[600],{"type":47,"value":601},"handler-guide.md",{"type":47,"value":439},{"type":41,"tag":71,"props":604,"children":605},{},[606,614],{"type":41,"tag":98,"props":607,"children":608},{},[609],{"type":41,"tag":280,"props":610,"children":611},{},[612],{"type":47,"value":613},"Parallel execution",{"type":41,"tag":98,"props":615,"children":616},{},[617],{"type":47,"value":618},"Run independent ops (connections, ACLs, gatewayConnections wiring, dynamic values) as parallel tool calls.",{"type":41,"tag":71,"props":620,"children":621},{},[622,630],{"type":41,"tag":98,"props":623,"children":624},{},[625],{"type":41,"tag":280,"props":626,"children":627},{},[628],{"type":47,"value":629},"Sandbox ↔ connection wiring",{"type":41,"tag":98,"props":631,"children":632},{},[633,635,640,642,648],{"type":47,"value":634},"Use the declarative ",{"type":41,"tag":280,"props":636,"children":637},{},[638],{"type":47,"value":639},"gatewayConnections",{"type":47,"value":641}," pattern (SG-level PATCH + per-sandbox PUT body). See ",{"type":41,"tag":471,"props":643,"children":645},{"href":644},"references\u002Fgateway-connections.md",[646],{"type":47,"value":647},"gateway-connections.md",{"type":47,"value":439},{"type":41,"tag":71,"props":650,"children":651},{},[652,660],{"type":41,"tag":98,"props":653,"children":654},{},[655],{"type":41,"tag":280,"props":656,"children":657},{},[658],{"type":47,"value":659},"Swagger \u002F operation discovery",{"type":41,"tag":98,"props":661,"children":662},{},[663,665,671],{"type":47,"value":664},"Always fetch the connector Swagger via the connection's runtime metadata URL — see ",{"type":41,"tag":471,"props":666,"children":668},{"href":667},"references\u002Fswagger-discovery.md",[669],{"type":47,"value":670},"swagger-discovery.md",{"type":47,"value":672}," for the full pattern (auth, ACL idempotency, parsing, picking the right operation).",{"type":41,"tag":71,"props":674,"children":675},{},[676,684],{"type":41,"tag":98,"props":677,"children":678},{},[679],{"type":41,"tag":280,"props":680,"children":681},{},[682],{"type":47,"value":683},"ACL idempotency",{"type":41,"tag":98,"props":685,"children":686},{},[687,689,694,696,702,704,710],{"type":47,"value":688},"When creating a ",{"type":41,"tag":280,"props":690,"children":691},{},[692],{"type":47,"value":693},"user-ACL",{"type":47,"value":695}," on a connection (for swagger discovery from outside a sandbox), ALWAYS GET the policy first and only PUT if it doesn't exist. Never blindly recreate a user-ACL. (This does not apply to ",{"type":41,"tag":112,"props":697,"children":699},{"className":698},[],[700],{"type":47,"value":701},"gateway-acl",{"type":47,"value":703}," \u002F ",{"type":41,"tag":112,"props":705,"children":707},{"className":706},[],[708],{"type":47,"value":709},"sandbox-acl",{"type":47,"value":711}," — those are typically PUT directly during setup.)",{"type":41,"tag":71,"props":713,"children":714},{},[715,723],{"type":41,"tag":98,"props":716,"children":717},{},[718],{"type":41,"tag":280,"props":719,"children":720},{},[721],{"type":47,"value":722},"Narrate progress",{"type":41,"tag":98,"props":724,"children":725},{},[726,728,733],{"type":47,"value":727},"The user must know what's happening at each step ",{"type":41,"tag":280,"props":729,"children":730},{},[731],{"type":47,"value":732},"before",{"type":47,"value":734}," you run the shell. Print a short chat message (NOT inside the shell block) with: (a) what you're doing in one line, (b) the exact URL or resource ID being touched, and (c) why. Never run a shell command silently or with only a collapsed shell block.",{"type":41,"tag":50,"props":736,"children":737},{},[738,743,745],{"type":41,"tag":280,"props":739,"children":740},{},[741],{"type":47,"value":742},"When to STOP and ask the user:",{"type":47,"value":744}," Any parameter with dynamic values (teams, channels, folders, sites, lists), choosing integration pattern, OAuth consent. ",{"type":41,"tag":280,"props":746,"children":747},{},[748],{"type":47,"value":749},"You must NEVER skip this — always fetch the list and present it.",{"type":41,"tag":50,"props":751,"children":752},{},[753,758],{"type":41,"tag":280,"props":754,"children":755},{},[756],{"type":47,"value":757},"When to EXECUTE immediately:",{"type":47,"value":759}," creating gateways\u002Fconnections\u002Ftriggers\u002Fpolicies, wiring gatewayConnections, deploying handlers, installing deps.",{"type":41,"tag":761,"props":762,"children":764},"h3",{"id":763},"step-0-prerequisites-azure-context",[765],{"type":47,"value":766},"Step 0: Prerequisites & Azure context",{"type":41,"tag":768,"props":769,"children":770},"ol",{},[771,798,926],{"type":41,"tag":772,"props":773,"children":774},"li",{},[775,776,782,783,789,791,797],{"type":47,"value":289},{"type":41,"tag":112,"props":777,"children":779},{"className":778},[],[780],{"type":47,"value":781},"az account show",{"type":47,"value":329},{"type":41,"tag":112,"props":784,"children":786},{"className":785},[],[787],{"type":47,"value":788},"aca --version",{"type":47,"value":790},". If missing, see ",{"type":41,"tag":471,"props":792,"children":794},{"href":793},"references\u002Fprerequisites.md",[795],{"type":47,"value":796},"prerequisites.md",{"type":47,"value":439},{"type":41,"tag":772,"props":799,"children":800},{},[801,806,808,873,877,879,921,924],{"type":41,"tag":280,"props":802,"children":803},{},[804],{"type":47,"value":805},"Select subscription",{"type":47,"value":807}," — list available subscriptions, ask the user to pick:",{"type":41,"tag":809,"props":810,"children":815},"pre",{"className":811,"code":812,"language":813,"meta":814,"style":814},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","az account list --query \"[].{name:name, id:id, isDefault:isDefault}\" -o table\n","bash","",[816],{"type":41,"tag":112,"props":817,"children":818},{"__ignoreMap":814},[819],{"type":41,"tag":820,"props":821,"children":824},"span",{"class":822,"line":823},"line",1,[825,831,837,842,847,853,858,863,868],{"type":41,"tag":820,"props":826,"children":828},{"style":827},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[829],{"type":47,"value":830},"az",{"type":41,"tag":820,"props":832,"children":834},{"style":833},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[835],{"type":47,"value":836}," account",{"type":41,"tag":820,"props":838,"children":839},{"style":833},[840],{"type":47,"value":841}," list",{"type":41,"tag":820,"props":843,"children":844},{"style":833},[845],{"type":47,"value":846}," --query",{"type":41,"tag":820,"props":848,"children":850},{"style":849},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[851],{"type":47,"value":852}," \"",{"type":41,"tag":820,"props":854,"children":855},{"style":833},[856],{"type":47,"value":857},"[].{name:name, id:id, isDefault:isDefault}",{"type":41,"tag":820,"props":859,"children":860},{"style":849},[861],{"type":47,"value":862},"\"",{"type":41,"tag":820,"props":864,"children":865},{"style":833},[866],{"type":47,"value":867}," -o",{"type":41,"tag":820,"props":869,"children":870},{"style":833},[871],{"type":47,"value":872}," table\n",{"type":41,"tag":874,"props":875,"children":876},"br",{},[],{"type":47,"value":878},"Present the list and ask: \"Which subscription do you want to use?\"\nIf the user picks a non-default subscription, set it:",{"type":41,"tag":809,"props":880,"children":882},{"className":811,"code":881,"language":813,"meta":814,"style":814},"az account set --subscription \"{selected_subscription_id}\"\n",[883],{"type":41,"tag":112,"props":884,"children":885},{"__ignoreMap":814},[886],{"type":41,"tag":820,"props":887,"children":888},{"class":822,"line":823},[889,893,897,902,907,911,916],{"type":41,"tag":820,"props":890,"children":891},{"style":827},[892],{"type":47,"value":830},{"type":41,"tag":820,"props":894,"children":895},{"style":833},[896],{"type":47,"value":836},{"type":41,"tag":820,"props":898,"children":899},{"style":833},[900],{"type":47,"value":901}," set",{"type":41,"tag":820,"props":903,"children":904},{"style":833},[905],{"type":47,"value":906}," --subscription",{"type":41,"tag":820,"props":908,"children":909},{"style":849},[910],{"type":47,"value":852},{"type":41,"tag":820,"props":912,"children":913},{"style":833},[914],{"type":47,"value":915},"{selected_subscription_id}",{"type":41,"tag":820,"props":917,"children":918},{"style":849},[919],{"type":47,"value":920},"\"\n",{"type":41,"tag":874,"props":922,"children":923},{},[],{"type":47,"value":925},"Store the subscription ID for all subsequent commands.",{"type":41,"tag":772,"props":927,"children":928},{},[929,934,936],{"type":41,"tag":280,"props":930,"children":931},{},[932],{"type":47,"value":933},"Select resource group",{"type":47,"value":935}," — ask: \"Do you have an existing resource group, or should I create one?\"",{"type":41,"tag":937,"props":938,"children":939},"ul",{},[940,1000],{"type":41,"tag":772,"props":941,"children":942},{},[943,945,950,952],{"type":47,"value":944},"If ",{"type":41,"tag":280,"props":946,"children":947},{},[948],{"type":47,"value":949},"existing",{"type":47,"value":951},": list and let user pick:\n",{"type":41,"tag":809,"props":953,"children":955},{"className":811,"code":954,"language":813,"meta":814,"style":814},"az group list --query \"[].{name:name, location:location}\" -o table\n",[956],{"type":41,"tag":112,"props":957,"children":958},{"__ignoreMap":814},[959],{"type":41,"tag":820,"props":960,"children":961},{"class":822,"line":823},[962,966,971,975,979,983,988,992,996],{"type":41,"tag":820,"props":963,"children":964},{"style":827},[965],{"type":47,"value":830},{"type":41,"tag":820,"props":967,"children":968},{"style":833},[969],{"type":47,"value":970}," group",{"type":41,"tag":820,"props":972,"children":973},{"style":833},[974],{"type":47,"value":841},{"type":41,"tag":820,"props":976,"children":977},{"style":833},[978],{"type":47,"value":846},{"type":41,"tag":820,"props":980,"children":981},{"style":849},[982],{"type":47,"value":852},{"type":41,"tag":820,"props":984,"children":985},{"style":833},[986],{"type":47,"value":987},"[].{name:name, location:location}",{"type":41,"tag":820,"props":989,"children":990},{"style":849},[991],{"type":47,"value":862},{"type":41,"tag":820,"props":993,"children":994},{"style":833},[995],{"type":47,"value":867},{"type":41,"tag":820,"props":997,"children":998},{"style":833},[999],{"type":47,"value":872},{"type":41,"tag":772,"props":1001,"children":1002},{},[1003,1004,1009,1011],{"type":47,"value":944},{"type":41,"tag":280,"props":1005,"children":1006},{},[1007],{"type":47,"value":1008},"new",{"type":47,"value":1010},": ask for name + location, then create:\n",{"type":41,"tag":809,"props":1012,"children":1014},{"className":811,"code":1013,"language":813,"meta":814,"style":814},"az group create --name {rg} --location {location}\n",[1015],{"type":41,"tag":112,"props":1016,"children":1017},{"__ignoreMap":814},[1018],{"type":41,"tag":820,"props":1019,"children":1020},{"class":822,"line":823},[1021,1025,1029,1034,1039,1044,1049],{"type":41,"tag":820,"props":1022,"children":1023},{"style":827},[1024],{"type":47,"value":830},{"type":41,"tag":820,"props":1026,"children":1027},{"style":833},[1028],{"type":47,"value":970},{"type":41,"tag":820,"props":1030,"children":1031},{"style":833},[1032],{"type":47,"value":1033}," create",{"type":41,"tag":820,"props":1035,"children":1036},{"style":833},[1037],{"type":47,"value":1038}," --name",{"type":41,"tag":820,"props":1040,"children":1041},{"style":833},[1042],{"type":47,"value":1043}," {rg}",{"type":41,"tag":820,"props":1045,"children":1046},{"style":833},[1047],{"type":47,"value":1048}," --location",{"type":41,"tag":820,"props":1050,"children":1051},{"style":833},[1052],{"type":47,"value":1053}," {location}\n",{"type":41,"tag":50,"props":1055,"children":1056},{},[1057],{"type":41,"tag":280,"props":1058,"children":1059},{},[1060],{"type":47,"value":1061},"Stop and wait for the user's answers before continuing.",{"type":41,"tag":761,"props":1063,"children":1065},{"id":1064},"step-1-understand-the-scenario",[1066],{"type":47,"value":1067},"Step 1: Understand the scenario",{"type":41,"tag":50,"props":1069,"children":1070},{},[1071],{"type":47,"value":1072},"Ask the user:",{"type":41,"tag":937,"props":1074,"children":1075},{},[1076,1081],{"type":41,"tag":772,"props":1077,"children":1078},{},[1079],{"type":47,"value":1080},"\"What event do you want to trigger on?\" (new email, SharePoint list item, file upload, etc.)",{"type":41,"tag":772,"props":1082,"children":1083},{},[1084],{"type":47,"value":1085},"Map the answer to a connector using this table:",{"type":41,"tag":63,"props":1087,"children":1088},{},[1089,1110],{"type":41,"tag":67,"props":1090,"children":1091},{},[1092],{"type":41,"tag":71,"props":1093,"children":1094},{},[1095,1100,1105],{"type":41,"tag":75,"props":1096,"children":1097},{},[1098],{"type":47,"value":1099},"User says",{"type":41,"tag":75,"props":1101,"children":1102},{},[1103],{"type":47,"value":1104},"Connector name",{"type":41,"tag":75,"props":1106,"children":1107},{},[1108],{"type":47,"value":1109},"Common triggers",{"type":41,"tag":91,"props":1111,"children":1112},{},[1113,1145,1177,1209,1234,1266],{"type":41,"tag":71,"props":1114,"children":1115},{},[1116,1121,1129],{"type":41,"tag":98,"props":1117,"children":1118},{},[1119],{"type":47,"value":1120},"Email, Outlook",{"type":41,"tag":98,"props":1122,"children":1123},{},[1124],{"type":41,"tag":112,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":47,"value":190},{"type":41,"tag":98,"props":1130,"children":1131},{},[1132,1138,1139],{"type":41,"tag":112,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":47,"value":1137},"OnNewEmailV3",{"type":47,"value":119},{"type":41,"tag":112,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":47,"value":1144},"OnFlaggedEmail",{"type":41,"tag":71,"props":1146,"children":1147},{},[1148,1153,1161],{"type":41,"tag":98,"props":1149,"children":1150},{},[1151],{"type":47,"value":1152},"SharePoint, list",{"type":41,"tag":98,"props":1154,"children":1155},{},[1156],{"type":41,"tag":112,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":47,"value":183},{"type":41,"tag":98,"props":1162,"children":1163},{},[1164,1170,1171],{"type":41,"tag":112,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":47,"value":1169},"OnNewItem",{"type":47,"value":119},{"type":41,"tag":112,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":47,"value":1176},"OnUpdatedItem",{"type":41,"tag":71,"props":1178,"children":1179},{},[1180,1185,1193],{"type":41,"tag":98,"props":1181,"children":1182},{},[1183],{"type":47,"value":1184},"OneDrive, files",{"type":41,"tag":98,"props":1186,"children":1187},{},[1188],{"type":41,"tag":112,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":47,"value":147},{"type":41,"tag":98,"props":1194,"children":1195},{},[1196,1202,1203],{"type":41,"tag":112,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":47,"value":1201},"OnNewFile",{"type":47,"value":119},{"type":41,"tag":112,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":47,"value":1208},"OnUpdatedFile",{"type":41,"tag":71,"props":1210,"children":1211},{},[1212,1217,1225],{"type":41,"tag":98,"props":1213,"children":1214},{},[1215],{"type":47,"value":1216},"Teams",{"type":41,"tag":98,"props":1218,"children":1219},{},[1220],{"type":41,"tag":112,"props":1221,"children":1223},{"className":1222},[],[1224],{"type":47,"value":125},{"type":41,"tag":98,"props":1226,"children":1227},{},[1228],{"type":41,"tag":112,"props":1229,"children":1231},{"className":1230},[],[1232],{"type":47,"value":1233},"OnNewChannelMessage",{"type":41,"tag":71,"props":1235,"children":1236},{},[1237,1242,1250],{"type":41,"tag":98,"props":1238,"children":1239},{},[1240],{"type":47,"value":1241},"Forms, survey, quiz",{"type":41,"tag":98,"props":1243,"children":1244},{},[1245],{"type":41,"tag":112,"props":1246,"children":1248},{"className":1247},[],[1249],{"type":47,"value":117},{"type":41,"tag":98,"props":1251,"children":1252},{},[1253,1259,1260],{"type":41,"tag":112,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":47,"value":1258},"OnFormResponse",{"type":47,"value":119},{"type":41,"tag":112,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":47,"value":1265},"OnNewResponse",{"type":41,"tag":71,"props":1267,"children":1268},{},[1269,1274,1282],{"type":41,"tag":98,"props":1270,"children":1271},{},[1272],{"type":47,"value":1273},"Azure Blob",{"type":41,"tag":98,"props":1275,"children":1276},{},[1277],{"type":41,"tag":112,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":47,"value":155},{"type":41,"tag":98,"props":1283,"children":1284},{},[1285,1291,1292],{"type":41,"tag":112,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":47,"value":1290},"OnNewBlob",{"type":47,"value":119},{"type":41,"tag":112,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":47,"value":1297},"OnUpdatedBlob",{"type":41,"tag":937,"props":1299,"children":1300},{},[1301],{"type":41,"tag":772,"props":1302,"children":1303},{},[1304],{"type":47,"value":1305},"Ask if they already know the trigger operation, or want to discover available ones.",{"type":41,"tag":50,"props":1307,"children":1308},{},[1309],{"type":41,"tag":280,"props":1310,"children":1311},{},[1312],{"type":47,"value":1313},"Stop and wait for the user's answer before continuing.",{"type":41,"tag":761,"props":1315,"children":1317},{"id":1316},"step-2-gateway-setup",[1318],{"type":47,"value":1319},"Step 2: Gateway setup",{"type":41,"tag":1321,"props":1322,"children":1323},"blockquote",{},[1324,1334,1352],{"type":41,"tag":50,"props":1325,"children":1326},{},[1327,1332],{"type":41,"tag":280,"props":1328,"children":1329},{},[1330],{"type":47,"value":1331},"⚡ Parallel batch:",{"type":47,"value":1333}," Once you know the gateway name, run ALL of these in one parallel call:",{"type":41,"tag":768,"props":1335,"children":1336},{},[1337,1342,1347],{"type":41,"tag":772,"props":1338,"children":1339},{},[1340],{"type":47,"value":1341},"Get gateway info (principalId, tenantId, location)",{"type":41,"tag":772,"props":1343,"children":1344},{},[1345],{"type":47,"value":1346},"List existing connections (names, statuses, runtime URLs)",{"type":41,"tag":772,"props":1348,"children":1349},{},[1350],{"type":47,"value":1351},"Get sandbox group identity (if sandbox already exists)",{"type":41,"tag":50,"props":1353,"children":1354},{},[1355],{"type":47,"value":1356},"This avoids sequential round-trips and saves ~2 minutes.",{"type":41,"tag":1321,"props":1358,"children":1359},{},[1360],{"type":41,"tag":50,"props":1361,"children":1362},{},[1363,1368,1370,1376,1381,1382,1388],{"type":41,"tag":280,"props":1364,"children":1365},{},[1366],{"type":47,"value":1367},"ARM base URL:",{"type":47,"value":1369}," ",{"type":41,"tag":112,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":47,"value":1375},"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways",{"type":41,"tag":280,"props":1377,"children":1378},{},[1379],{"type":47,"value":1380},"API version:",{"type":47,"value":1369},{"type":41,"tag":112,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":47,"value":1387},"api-version=2026-05-01-preview",{"type":47,"value":1389},"\nUse the subscription and resource group selected in Step 0.",{"type":41,"tag":50,"props":1391,"children":1392},{},[1393],{"type":47,"value":1072},{"type":41,"tag":937,"props":1395,"children":1396},{},[1397,1402,1494,1580,1605],{"type":41,"tag":772,"props":1398,"children":1399},{},[1400],{"type":47,"value":1401},"\"Do you have an existing connector, or should I create a new one?\"",{"type":41,"tag":772,"props":1403,"children":1404},{},[1405,1406,1410,1412],{"type":47,"value":944},{"type":41,"tag":280,"props":1407,"children":1408},{},[1409],{"type":47,"value":949},{"type":47,"value":1411},": ask for the gateway name, then retrieve it (using sub\u002Frg from Step 0):\n",{"type":41,"tag":809,"props":1413,"children":1415},{"className":811,"code":1414,"language":813,"meta":814,"style":814},"az rest --method GET \\\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\" \\\n  --query \"{name:name, principalId:identity.principalId, tenantId:identity.tenantId}\"\n",[1416],{"type":41,"tag":112,"props":1417,"children":1418},{"__ignoreMap":814},[1419,1447,1472],{"type":41,"tag":820,"props":1420,"children":1421},{"class":822,"line":823},[1422,1426,1431,1436,1441],{"type":41,"tag":820,"props":1423,"children":1424},{"style":827},[1425],{"type":47,"value":830},{"type":41,"tag":820,"props":1427,"children":1428},{"style":833},[1429],{"type":47,"value":1430}," rest",{"type":41,"tag":820,"props":1432,"children":1433},{"style":833},[1434],{"type":47,"value":1435}," --method",{"type":41,"tag":820,"props":1437,"children":1438},{"style":833},[1439],{"type":47,"value":1440}," GET",{"type":41,"tag":820,"props":1442,"children":1444},{"style":1443},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1445],{"type":47,"value":1446}," \\\n",{"type":41,"tag":820,"props":1448,"children":1449},{"class":822,"line":25},[1450,1455,1459,1464,1468],{"type":41,"tag":820,"props":1451,"children":1452},{"style":833},[1453],{"type":47,"value":1454},"  --url",{"type":41,"tag":820,"props":1456,"children":1457},{"style":849},[1458],{"type":47,"value":852},{"type":41,"tag":820,"props":1460,"children":1461},{"style":833},[1462],{"type":47,"value":1463},"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":1465,"children":1466},{"style":849},[1467],{"type":47,"value":862},{"type":41,"tag":820,"props":1469,"children":1470},{"style":1443},[1471],{"type":47,"value":1446},{"type":41,"tag":820,"props":1473,"children":1475},{"class":822,"line":1474},3,[1476,1481,1485,1490],{"type":41,"tag":820,"props":1477,"children":1478},{"style":833},[1479],{"type":47,"value":1480},"  --query",{"type":41,"tag":820,"props":1482,"children":1483},{"style":849},[1484],{"type":47,"value":852},{"type":41,"tag":820,"props":1486,"children":1487},{"style":833},[1488],{"type":47,"value":1489},"{name:name, principalId:identity.principalId, tenantId:identity.tenantId}",{"type":41,"tag":820,"props":1491,"children":1492},{"style":849},[1493],{"type":47,"value":920},{"type":41,"tag":772,"props":1495,"children":1496},{},[1497,1498,1502,1504,1509,1511],{"type":47,"value":944},{"type":41,"tag":280,"props":1499,"children":1500},{},[1501],{"type":47,"value":1008},{"type":47,"value":1503},": ask for gateway name + location, then ",{"type":41,"tag":280,"props":1505,"children":1506},{},[1507],{"type":47,"value":1508},"create it\nimmediately",{"type":47,"value":1510}," with a SystemAssigned managed identity (required for trigger callbacks):\n",{"type":41,"tag":809,"props":1512,"children":1516},{"className":1513,"code":1514,"language":1515,"meta":814,"style":814},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$gwBody = @{ location = \"{location}\"; identity = @{ type = \"SystemAssigned\" } } | ConvertTo-Json -Compress\n$tmp = New-TemporaryFile; Set-Content $tmp $gwBody\naz rest --method PUT `\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\" `\n  --body \"@$tmp\" `\n  --query \"{name:name, principalId:identity.principalId, tenantId:identity.tenantId}\"\nRemove-Item $tmp\n","powershell",[1517],{"type":41,"tag":112,"props":1518,"children":1519},{"__ignoreMap":814},[1520,1528,1536,1544,1553,1562,1571],{"type":41,"tag":820,"props":1521,"children":1522},{"class":822,"line":823},[1523],{"type":41,"tag":820,"props":1524,"children":1525},{},[1526],{"type":47,"value":1527},"$gwBody = @{ location = \"{location}\"; identity = @{ type = \"SystemAssigned\" } } | ConvertTo-Json -Compress\n",{"type":41,"tag":820,"props":1529,"children":1530},{"class":822,"line":25},[1531],{"type":41,"tag":820,"props":1532,"children":1533},{},[1534],{"type":47,"value":1535},"$tmp = New-TemporaryFile; Set-Content $tmp $gwBody\n",{"type":41,"tag":820,"props":1537,"children":1538},{"class":822,"line":1474},[1539],{"type":41,"tag":820,"props":1540,"children":1541},{},[1542],{"type":47,"value":1543},"az rest --method PUT `\n",{"type":41,"tag":820,"props":1545,"children":1547},{"class":822,"line":1546},4,[1548],{"type":41,"tag":820,"props":1549,"children":1550},{},[1551],{"type":47,"value":1552},"  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\" `\n",{"type":41,"tag":820,"props":1554,"children":1556},{"class":822,"line":1555},5,[1557],{"type":41,"tag":820,"props":1558,"children":1559},{},[1560],{"type":47,"value":1561},"  --body \"@$tmp\" `\n",{"type":41,"tag":820,"props":1563,"children":1565},{"class":822,"line":1564},6,[1566],{"type":41,"tag":820,"props":1567,"children":1568},{},[1569],{"type":47,"value":1570},"  --query \"{name:name, principalId:identity.principalId, tenantId:identity.tenantId}\"\n",{"type":41,"tag":820,"props":1572,"children":1574},{"class":822,"line":1573},7,[1575],{"type":41,"tag":820,"props":1576,"children":1577},{},[1578],{"type":47,"value":1579},"Remove-Item $tmp\n",{"type":41,"tag":772,"props":1581,"children":1582},{},[1583,1588,1590,1596,1597,1603],{"type":41,"tag":280,"props":1584,"children":1585},{},[1586],{"type":47,"value":1587},"Always",{"type":47,"value":1589}," capture ",{"type":41,"tag":112,"props":1591,"children":1593},{"className":1592},[],[1594],{"type":47,"value":1595},"principalId",{"type":47,"value":329},{"type":41,"tag":112,"props":1598,"children":1600},{"className":1599},[],[1601],{"type":47,"value":1602},"tenantId",{"type":47,"value":1604}," — they are needed later for\naccess policies and InvokePort auth.",{"type":41,"tag":772,"props":1606,"children":1607},{},[1608,1610],{"type":47,"value":1609},"List existing connections:\n",{"type":41,"tag":809,"props":1611,"children":1613},{"className":811,"code":1612,"language":813,"meta":814,"style":814},"az rest --method GET \\\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview\" \\\n  --query \"value[].{name:name, status:properties.statuses[0].status, connector:properties.connectorName}\"\n",[1614],{"type":41,"tag":112,"props":1615,"children":1616},{"__ignoreMap":814},[1617,1640,1664],{"type":41,"tag":820,"props":1618,"children":1619},{"class":822,"line":823},[1620,1624,1628,1632,1636],{"type":41,"tag":820,"props":1621,"children":1622},{"style":827},[1623],{"type":47,"value":830},{"type":41,"tag":820,"props":1625,"children":1626},{"style":833},[1627],{"type":47,"value":1430},{"type":41,"tag":820,"props":1629,"children":1630},{"style":833},[1631],{"type":47,"value":1435},{"type":41,"tag":820,"props":1633,"children":1634},{"style":833},[1635],{"type":47,"value":1440},{"type":41,"tag":820,"props":1637,"children":1638},{"style":1443},[1639],{"type":47,"value":1446},{"type":41,"tag":820,"props":1641,"children":1642},{"class":822,"line":25},[1643,1647,1651,1656,1660],{"type":41,"tag":820,"props":1644,"children":1645},{"style":833},[1646],{"type":47,"value":1454},{"type":41,"tag":820,"props":1648,"children":1649},{"style":849},[1650],{"type":47,"value":852},{"type":41,"tag":820,"props":1652,"children":1653},{"style":833},[1654],{"type":47,"value":1655},"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":1657,"children":1658},{"style":849},[1659],{"type":47,"value":862},{"type":41,"tag":820,"props":1661,"children":1662},{"style":1443},[1663],{"type":47,"value":1446},{"type":41,"tag":820,"props":1665,"children":1666},{"class":822,"line":1474},[1667,1671,1675,1680],{"type":41,"tag":820,"props":1668,"children":1669},{"style":833},[1670],{"type":47,"value":1480},{"type":41,"tag":820,"props":1672,"children":1673},{"style":849},[1674],{"type":47,"value":852},{"type":41,"tag":820,"props":1676,"children":1677},{"style":833},[1678],{"type":47,"value":1679},"value[].{name:name, status:properties.statuses[0].status, connector:properties.connectorName}",{"type":41,"tag":820,"props":1681,"children":1682},{"style":849},[1683],{"type":47,"value":920},{"type":41,"tag":50,"props":1685,"children":1686},{},[1687],{"type":41,"tag":280,"props":1688,"children":1689},{},[1690],{"type":47,"value":1691},"Once you have the gateway info, proceed immediately to Step 3.",{"type":41,"tag":761,"props":1693,"children":1695},{"id":1694},"step-3-create-connections-authenticate",[1696],{"type":47,"value":1697},"Step 3: Create connection(s) + authenticate",{"type":41,"tag":50,"props":1699,"children":1700},{},[1701],{"type":47,"value":1702},"Create ALL needed connections in parallel, then consent all at once:",{"type":41,"tag":809,"props":1704,"children":1706},{"className":1513,"code":1705,"language":1515,"meta":814,"style":814},"# Create connections (parallel tool calls if multiple):\n$connBody = @{ properties = @{ connectorName = \"office365\" }; location = \"{location}\" } | ConvertTo-Json -Compress\n$tmp = New-TemporaryFile; Set-Content $tmp $connBody\naz rest --method PUT `\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}\u002Fconnections\u002Fo365-conn?api-version=2026-05-01-preview\" `\n  --body \"@$tmp\"\nRemove-Item $tmp\n\n# Repeat for additional connections (onedriveforbusiness, sharepointonline, etc.)\n",[1707],{"type":41,"tag":112,"props":1708,"children":1709},{"__ignoreMap":814},[1710,1718,1726,1734,1741,1749,1757,1764,1774],{"type":41,"tag":820,"props":1711,"children":1712},{"class":822,"line":823},[1713],{"type":41,"tag":820,"props":1714,"children":1715},{},[1716],{"type":47,"value":1717},"# Create connections (parallel tool calls if multiple):\n",{"type":41,"tag":820,"props":1719,"children":1720},{"class":822,"line":25},[1721],{"type":41,"tag":820,"props":1722,"children":1723},{},[1724],{"type":47,"value":1725},"$connBody = @{ properties = @{ connectorName = \"office365\" }; location = \"{location}\" } | ConvertTo-Json -Compress\n",{"type":41,"tag":820,"props":1727,"children":1728},{"class":822,"line":1474},[1729],{"type":41,"tag":820,"props":1730,"children":1731},{},[1732],{"type":47,"value":1733},"$tmp = New-TemporaryFile; Set-Content $tmp $connBody\n",{"type":41,"tag":820,"props":1735,"children":1736},{"class":822,"line":1546},[1737],{"type":41,"tag":820,"props":1738,"children":1739},{},[1740],{"type":47,"value":1543},{"type":41,"tag":820,"props":1742,"children":1743},{"class":822,"line":1555},[1744],{"type":41,"tag":820,"props":1745,"children":1746},{},[1747],{"type":47,"value":1748},"  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\u002F{gw}\u002Fconnections\u002Fo365-conn?api-version=2026-05-01-preview\" `\n",{"type":41,"tag":820,"props":1750,"children":1751},{"class":822,"line":1564},[1752],{"type":41,"tag":820,"props":1753,"children":1754},{},[1755],{"type":47,"value":1756},"  --body \"@$tmp\"\n",{"type":41,"tag":820,"props":1758,"children":1759},{"class":822,"line":1573},[1760],{"type":41,"tag":820,"props":1761,"children":1762},{},[1763],{"type":47,"value":1579},{"type":41,"tag":820,"props":1765,"children":1767},{"class":822,"line":1766},8,[1768],{"type":41,"tag":820,"props":1769,"children":1771},{"emptyLinePlaceholder":1770},true,[1772],{"type":47,"value":1773},"\n",{"type":41,"tag":820,"props":1775,"children":1777},{"class":822,"line":1776},9,[1778],{"type":41,"tag":820,"props":1779,"children":1780},{},[1781],{"type":47,"value":1782},"# Repeat for additional connections (onedriveforbusiness, sharepointonline, etc.)\n",{"type":41,"tag":50,"props":1784,"children":1785},{},[1786,1788,1793,1795],{"type":47,"value":1787},"Generate consent links and open in browser. → ",{"type":41,"tag":280,"props":1789,"children":1790},{},[1791],{"type":47,"value":1792},"Exact format:",{"type":47,"value":1794}," See ",{"type":41,"tag":471,"props":1796,"children":1798},{"href":1797},"references\u002Fconsent.md",[1799],{"type":47,"value":1800},"consent.md",{"type":41,"tag":1321,"props":1802,"children":1803},{},[1804],{"type":41,"tag":50,"props":1805,"children":1806},{},[1807],{"type":41,"tag":280,"props":1808,"children":1809},{},[1810,1812,1818,1820,1825,1827,1833,1834,1839],{"type":47,"value":1811},"⚠️ Use ",{"type":41,"tag":112,"props":1813,"children":1815},{"className":1814},[],[1816],{"type":47,"value":1817},"Start-Process",{"type":47,"value":1819}," to open links. Body MUST use ",{"type":41,"tag":112,"props":1821,"children":1823},{"className":1822},[],[1824],{"type":47,"value":523},{"type":47,"value":1826}," array with\n",{"type":41,"tag":112,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":47,"value":1832},"objectId",{"type":47,"value":149},{"type":41,"tag":112,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":47,"value":1602},{"type":47,"value":1840}," from the connection. Do NOT try other formats or print the URL.",{"type":41,"tag":50,"props":1842,"children":1843},{},[1844,1846,1852],{"type":47,"value":1845},"Ask user to authenticate (use ",{"type":41,"tag":112,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":47,"value":1851},"ask_user",{"type":47,"value":1853},"), then verify:",{"type":41,"tag":809,"props":1855,"children":1857},{"className":811,"code":1856,"language":813,"meta":814,"style":814},"az rest --method GET \\\n  --url \"...\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview\" \\\n  --query \"value[].{name:name, status:properties.statuses[0].status}\"\n# All should show: Connected. If not, re-consent.\n",[1858],{"type":41,"tag":112,"props":1859,"children":1860},{"__ignoreMap":814},[1861,1884,1908,1928],{"type":41,"tag":820,"props":1862,"children":1863},{"class":822,"line":823},[1864,1868,1872,1876,1880],{"type":41,"tag":820,"props":1865,"children":1866},{"style":827},[1867],{"type":47,"value":830},{"type":41,"tag":820,"props":1869,"children":1870},{"style":833},[1871],{"type":47,"value":1430},{"type":41,"tag":820,"props":1873,"children":1874},{"style":833},[1875],{"type":47,"value":1435},{"type":41,"tag":820,"props":1877,"children":1878},{"style":833},[1879],{"type":47,"value":1440},{"type":41,"tag":820,"props":1881,"children":1882},{"style":1443},[1883],{"type":47,"value":1446},{"type":41,"tag":820,"props":1885,"children":1886},{"class":822,"line":25},[1887,1891,1895,1900,1904],{"type":41,"tag":820,"props":1888,"children":1889},{"style":833},[1890],{"type":47,"value":1454},{"type":41,"tag":820,"props":1892,"children":1893},{"style":849},[1894],{"type":47,"value":852},{"type":41,"tag":820,"props":1896,"children":1897},{"style":833},[1898],{"type":47,"value":1899},"...\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":1901,"children":1902},{"style":849},[1903],{"type":47,"value":862},{"type":41,"tag":820,"props":1905,"children":1906},{"style":1443},[1907],{"type":47,"value":1446},{"type":41,"tag":820,"props":1909,"children":1910},{"class":822,"line":1474},[1911,1915,1919,1924],{"type":41,"tag":820,"props":1912,"children":1913},{"style":833},[1914],{"type":47,"value":1480},{"type":41,"tag":820,"props":1916,"children":1917},{"style":849},[1918],{"type":47,"value":852},{"type":41,"tag":820,"props":1920,"children":1921},{"style":833},[1922],{"type":47,"value":1923},"value[].{name:name, status:properties.statuses[0].status}",{"type":41,"tag":820,"props":1925,"children":1926},{"style":849},[1927],{"type":47,"value":920},{"type":41,"tag":820,"props":1929,"children":1930},{"class":822,"line":1546},[1931],{"type":41,"tag":820,"props":1932,"children":1934},{"style":1933},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1935],{"type":47,"value":1936},"# All should show: Connected. If not, re-consent.\n",{"type":41,"tag":761,"props":1938,"children":1940},{"id":1939},"step-4-choose-integration-pattern",[1941],{"type":47,"value":1942},"Step 4: Choose integration pattern",{"type":41,"tag":50,"props":1944,"children":1945},{},[1946],{"type":47,"value":1072},{"type":41,"tag":937,"props":1948,"children":1949},{},[1950,1975],{"type":41,"tag":772,"props":1951,"children":1952},{},[1953,1958,1960,1966,1968,1974],{"type":41,"tag":280,"props":1954,"children":1955},{},[1956],{"type":47,"value":1957},"A) Direct API calls",{"type":47,"value":1959}," — call connector operations on demand via ",{"type":41,"tag":112,"props":1961,"children":1963},{"className":1962},[],[1964],{"type":47,"value":1965},"dynamicInvoke",{"type":47,"value":1967},"\n(send email, read list, create file). If deploying to sandbox, also wires the connection to the sandbox group + sandbox via ",{"type":41,"tag":112,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":47,"value":1973},"gatewayConnections[]",{"type":47,"value":439},{"type":41,"tag":772,"props":1976,"children":1977},{},[1978,1983],{"type":41,"tag":280,"props":1979,"children":1980},{},[1981],{"type":47,"value":1982},"B) Event-driven triggers",{"type":47,"value":1984}," — gateway pushes notifications to sandbox when\nevents happen. Handler can then use direct API calls for additional actions.",{"type":41,"tag":50,"props":1986,"children":1987},{},[1988],{"type":41,"tag":280,"props":1989,"children":1990},{},[1991],{"type":47,"value":1992},"Stop and wait for the user's answer.",{"type":41,"tag":937,"props":1994,"children":1995},{},[1996,2012],{"type":41,"tag":772,"props":1997,"children":1998},{},[1999,2000,2005,2007],{"type":47,"value":944},{"type":41,"tag":280,"props":2001,"children":2002},{},[2003],{"type":47,"value":2004},"A",{"type":47,"value":2006}," → ",{"type":41,"tag":280,"props":2008,"children":2009},{},[2010],{"type":47,"value":2011},"Step 5A",{"type":41,"tag":772,"props":2013,"children":2014},{},[2015,2016,2021,2022],{"type":47,"value":944},{"type":41,"tag":280,"props":2017,"children":2018},{},[2019],{"type":47,"value":2020},"B",{"type":47,"value":2006},{"type":41,"tag":280,"props":2023,"children":2024},{},[2025],{"type":47,"value":2026},"Step 5B",{"type":41,"tag":2028,"props":2029,"children":2030},"hr",{},[],{"type":41,"tag":761,"props":2032,"children":2034},{"id":2033},"step-5a-direct-api-calls-via-dynamicinvoke",[2035],{"type":47,"value":2036},"Step 5A: Direct API calls via dynamicInvoke",{"type":41,"tag":50,"props":2038,"children":2039},{},[2040,2042,2047,2048,2054,2056,2061,2062,2066,2067,2072,2073],{"type":47,"value":2041},"→ ",{"type":41,"tag":280,"props":2043,"children":2044},{},[2045],{"type":47,"value":2046},"Full details:",{"type":47,"value":1369},{"type":41,"tag":471,"props":2049,"children":2051},{"href":2050},"references\u002Fdirect-api.md",[2052],{"type":47,"value":2053},"direct-api.md",{"type":47,"value":2055}," | ",{"type":41,"tag":280,"props":2057,"children":2058},{},[2059],{"type":47,"value":2060},"Swagger discovery:",{"type":47,"value":1369},{"type":41,"tag":471,"props":2063,"children":2064},{"href":667},[2065],{"type":47,"value":670},{"type":47,"value":2055},{"type":41,"tag":280,"props":2068,"children":2069},{},[2070],{"type":47,"value":2071},"Dynamic values:",{"type":47,"value":1369},{"type":41,"tag":471,"props":2074,"children":2076},{"href":2075},"references\u002Fdynamic-values.md",[2077],{"type":47,"value":2078},"dynamic-values.md",{"type":41,"tag":768,"props":2080,"children":2081},{},[2082,2092,2117],{"type":41,"tag":772,"props":2083,"children":2084},{},[2085,2087,2091],{"type":47,"value":2086},"Fetch the connector Swagger and pick an operation — see ",{"type":41,"tag":471,"props":2088,"children":2089},{"href":667},[2090],{"type":47,"value":670},{"type":47,"value":439},{"type":41,"tag":772,"props":2093,"children":2094},{},[2095,2097,2102,2104,2110,2111],{"type":47,"value":2096},"Call ",{"type":41,"tag":112,"props":2098,"children":2100},{"className":2099},[],[2101],{"type":47,"value":1965},{"type":47,"value":2103}," on the connection with the resolved ",{"type":41,"tag":112,"props":2105,"children":2107},{"className":2106},[],[2108],{"type":47,"value":2109},"method",{"type":47,"value":501},{"type":41,"tag":112,"props":2112,"children":2114},{"className":2113},[],[2115],{"type":47,"value":2116},"path",{"type":41,"tag":772,"props":2118,"children":2119},{},[2120,2122,2127],{"type":47,"value":2121},"If parameters have ",{"type":41,"tag":112,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":47,"value":381},{"type":47,"value":2128}," → resolve via dynamicInvoke, show display names to user, store values",{"type":41,"tag":50,"props":2130,"children":2131},{},[2132,2137,2139,2144,2146,2150,2152,2158],{"type":41,"tag":280,"props":2133,"children":2134},{},[2135],{"type":47,"value":2136},"If deploying to sandbox:",{"type":47,"value":2138}," Wire the connection declaratively (sandbox-group ",{"type":41,"tag":112,"props":2140,"children":2142},{"className":2141},[],[2143],{"type":47,"value":1973},{"type":47,"value":2145}," PATCH + per-sandbox PUT body referencing the same connection) → ",{"type":41,"tag":471,"props":2147,"children":2148},{"href":644},[2149],{"type":47,"value":647},{"type":47,"value":2151},". The platform proxy injects Bearer auth on every runtime-URL call automatically; the handler makes plain ",{"type":41,"tag":112,"props":2153,"children":2155},{"className":2154},[],[2156],{"type":47,"value":2157},"requests.get(...)",{"type":47,"value":2159}," calls with no auth header.",{"type":41,"tag":50,"props":2161,"children":2162},{},[2163],{"type":41,"tag":280,"props":2164,"children":2165},{},[2166],{"type":47,"value":2167},"→ Skip to Final verification checklist.",{"type":41,"tag":2028,"props":2169,"children":2170},{},[],{"type":41,"tag":761,"props":2172,"children":2174},{"id":2173},"step-5b-event-driven-triggers",[2175],{"type":47,"value":2176},"Step 5B: Event-driven triggers",{"type":41,"tag":50,"props":2178,"children":2179},{},[2180,2181,2186,2187,2193,2194,2198,2199,2203,2204,2208,2209],{"type":47,"value":2041},{"type":41,"tag":280,"props":2182,"children":2183},{},[2184],{"type":47,"value":2185},"Full trigger setup (Steps 5B–9B):",{"type":47,"value":1369},{"type":41,"tag":471,"props":2188,"children":2190},{"href":2189},"references\u002Ftrigger-setup.md",[2191],{"type":47,"value":2192},"trigger-setup.md",{"type":47,"value":2055},{"type":41,"tag":280,"props":2195,"children":2196},{},[2197],{"type":47,"value":2060},{"type":47,"value":1369},{"type":41,"tag":471,"props":2200,"children":2201},{"href":667},[2202],{"type":47,"value":670},{"type":47,"value":2055},{"type":41,"tag":280,"props":2205,"children":2206},{},[2207],{"type":47,"value":2071},{"type":47,"value":1369},{"type":41,"tag":471,"props":2210,"children":2211},{"href":2075},[2212],{"type":47,"value":2078},{"type":41,"tag":768,"props":2214,"children":2215},{},[2216,2234,2247,2259,2264,2282],{"type":41,"tag":772,"props":2217,"children":2218},{},[2219,2221,2227,2229,2233],{"type":47,"value":2220},"Discover trigger operations — fetch the Swagger and filter paths whose operation has ",{"type":41,"tag":112,"props":2222,"children":2224},{"className":2223},[],[2225],{"type":47,"value":2226},"x-ms-trigger",{"type":47,"value":2228}," set. See ",{"type":41,"tag":471,"props":2230,"children":2231},{"href":667},[2232],{"type":47,"value":670},{"type":47,"value":439},{"type":41,"tag":772,"props":2235,"children":2236},{},[2237,2239,2245],{"type":47,"value":2238},"If trigger type is ",{"type":41,"tag":112,"props":2240,"children":2242},{"className":2241},[],[2243],{"type":47,"value":2244},"batch",{"type":47,"value":2246}," (polling): inform user it polls every ~3 minutes by default. Ask if they want a different interval.",{"type":41,"tag":772,"props":2248,"children":2249},{},[2250,2252,2257],{"type":47,"value":2251},"Collect parameters (resolve ",{"type":41,"tag":112,"props":2253,"children":2255},{"className":2254},[],[2256],{"type":47,"value":381},{"type":47,"value":2258}," via Swagger + dynamicInvoke)",{"type":41,"tag":772,"props":2260,"children":2261},{},[2262],{"type":47,"value":2263},"Ask user: sandbox (existing\u002Fnew) + callback type (ShellCommand \u002F ExecuteCommand \u002F InvokePort)",{"type":41,"tag":772,"props":2265,"children":2266},{},[2267,2269,2274,2276,2280],{"type":47,"value":2268},"Create trigger + access policy + role assignment (",{"type":41,"tag":280,"props":2270,"children":2271},{},[2272],{"type":47,"value":2273},"run in parallel",{"type":47,"value":2275},") — canonical template in ",{"type":41,"tag":471,"props":2277,"children":2278},{"href":2189},[2279],{"type":47,"value":2192},{"type":47,"value":2281}," Step 8B",{"type":41,"tag":772,"props":2283,"children":2284},{},[2285,2287],{"type":47,"value":2286},"Verify trigger state is ",{"type":41,"tag":112,"props":2288,"children":2290},{"className":2289},[],[2291],{"type":47,"value":2292},"Enabled",{"type":41,"tag":1321,"props":2294,"children":2295},{},[2296],{"type":41,"tag":50,"props":2297,"children":2298},{},[2299,2309,2311,2316,2317,2322,2324,2328],{"type":41,"tag":280,"props":2300,"children":2301},{},[2302,2304],{"type":47,"value":2303},"⚠️ Do NOT use ",{"type":41,"tag":112,"props":2305,"children":2307},{"className":2306},[],[2308],{"type":47,"value":531},{"type":47,"value":2310}," — that field does not exist. Correct schema: ",{"type":41,"tag":112,"props":2312,"children":2314},{"className":2313},[],[2315],{"type":47,"value":499},{"type":47,"value":501},{"type":41,"tag":112,"props":2318,"children":2320},{"className":2319},[],[2321],{"type":47,"value":507},{"type":47,"value":2323},". See ",{"type":41,"tag":471,"props":2325,"children":2326},{"href":2189},[2327],{"type":47,"value":2192},{"type":47,"value":439},{"type":41,"tag":63,"props":2330,"children":2331},{},[2332,2353],{"type":41,"tag":67,"props":2333,"children":2334},{},[2335],{"type":41,"tag":71,"props":2336,"children":2337},{},[2338,2343,2348],{"type":41,"tag":75,"props":2339,"children":2340},{},[2341],{"type":47,"value":2342},"Target",{"type":41,"tag":75,"props":2344,"children":2345},{},[2346],{"type":47,"value":2347},"Callback URL",{"type":41,"tag":75,"props":2349,"children":2350},{},[2351],{"type":47,"value":2352},"Notes",{"type":41,"tag":91,"props":2354,"children":2355},{},[2356,2393,2420],{"type":41,"tag":71,"props":2357,"children":2358},{},[2359,2364,2373],{"type":41,"tag":98,"props":2360,"children":2361},{},[2362],{"type":47,"value":2363},"ShellCommand",{"type":41,"tag":98,"props":2365,"children":2366},{},[2367],{"type":41,"tag":112,"props":2368,"children":2370},{"className":2369},[],[2371],{"type":47,"value":2372},"https:\u002F\u002Fmanagement.{region}.azuredevcompute.io\u002F...\u002FexecuteShellCommand",{"type":41,"tag":98,"props":2374,"children":2375},{},[2376,2378,2384,2386,2391],{"type":47,"value":2377},"Auto-resumes sandbox; needs RBAC ",{"type":41,"tag":112,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":47,"value":2383},"c24cf47c-...",{"type":47,"value":2385}," on sandbox group. ",{"type":41,"tag":280,"props":2387,"children":2388},{},[2389],{"type":47,"value":2390},"Regional host required",{"type":47,"value":2392}," (unregional → 404 GlobalSandboxNotFound).",{"type":41,"tag":71,"props":2394,"children":2395},{},[2396,2401,2410],{"type":41,"tag":98,"props":2397,"children":2398},{},[2399],{"type":47,"value":2400},"ExecuteCommand",{"type":41,"tag":98,"props":2402,"children":2403},{},[2404],{"type":41,"tag":112,"props":2405,"children":2407},{"className":2406},[],[2408],{"type":47,"value":2409},"https:\u002F\u002Fmanagement.{region}.azuredevcompute.io\u002F...\u002FexecuteCommand",{"type":41,"tag":98,"props":2411,"children":2412},{},[2413,2415],{"type":47,"value":2414},"Same as above, no shell interpretation. ",{"type":41,"tag":280,"props":2416,"children":2417},{},[2418],{"type":47,"value":2419},"Regional host required.",{"type":41,"tag":71,"props":2421,"children":2422},{},[2423,2428,2437],{"type":41,"tag":98,"props":2424,"children":2425},{},[2426],{"type":47,"value":2427},"InvokePort",{"type":41,"tag":98,"props":2429,"children":2430},{},[2431],{"type":41,"tag":112,"props":2432,"children":2434},{"className":2433},[],[2435],{"type":47,"value":2436},"https:\u002F\u002F{id}--{port}.proxy.azuredevcompute.io\u002F...",{"type":41,"tag":98,"props":2438,"children":2439},{},[2440],{"type":47,"value":2441},"Sandbox must be running; needs port auth",{"type":41,"tag":50,"props":2443,"children":2444},{},[2445,2447,2451],{"type":47,"value":2446},"After trigger creation → deploy handler. See ",{"type":41,"tag":471,"props":2448,"children":2449},{"href":598},[2450],{"type":47,"value":601},{"type":47,"value":439},{"type":41,"tag":2028,"props":2453,"children":2454},{},[],{"type":41,"tag":761,"props":2456,"children":2458},{"id":2457},"final-verification-checklist",[2459],{"type":47,"value":2460},"Final verification checklist",{"type":41,"tag":50,"props":2462,"children":2463},{},[2464],{"type":41,"tag":280,"props":2465,"children":2466},{},[2467],{"type":47,"value":2468},"For Direct API calls (path A):",{"type":41,"tag":937,"props":2470,"children":2471},{},[2472,2492,2511,2531,2552,2580],{"type":41,"tag":772,"props":2473,"children":2474},{},[2475,2477,2483,2484,2490],{"type":47,"value":2476},"✅ Gateway exists, connection ",{"type":41,"tag":112,"props":2478,"children":2480},{"className":2479},[],[2481],{"type":47,"value":2482},"Connected",{"type":47,"value":119},{"type":41,"tag":112,"props":2485,"children":2487},{"className":2486},[],[2488],{"type":47,"value":2489},"connectionRuntimeUrl",{"type":47,"value":2491}," available",{"type":41,"tag":772,"props":2493,"children":2494},{},[2495,2497,2502,2504,2509],{"type":47,"value":2496},"✅ Access policies on connection: ",{"type":41,"tag":112,"props":2498,"children":2500},{"className":2499},[],[2501],{"type":47,"value":701},{"type":47,"value":2503}," (gateway MI) AND ",{"type":41,"tag":112,"props":2505,"children":2507},{"className":2506},[],[2508],{"type":47,"value":709},{"type":47,"value":2510}," (sandbox-group MI)",{"type":41,"tag":772,"props":2512,"children":2513},{},[2514,2516,2522,2524,2529],{"type":47,"value":2515},"✅ Sandbox group has SystemAssigned MI (",{"type":41,"tag":112,"props":2517,"children":2519},{"className":2518},[],[2520],{"type":47,"value":2521},"aca sandboxgroup identity assign --name {sg} --system-assigned",{"type":47,"value":2523}," if ",{"type":41,"tag":112,"props":2525,"children":2527},{"className":2526},[],[2528],{"type":47,"value":1595},{"type":47,"value":2530}," is null)",{"type":41,"tag":772,"props":2532,"children":2533},{},[2534,2536,2542,2544,2550],{"type":47,"value":2535},"✅ Sandbox-group ",{"type":41,"tag":112,"props":2537,"children":2539},{"className":2538},[],[2540],{"type":47,"value":2541},"properties.gatewayConnections[]",{"type":47,"value":2543}," includes an entry with this connection's ",{"type":41,"tag":112,"props":2545,"children":2547},{"className":2546},[],[2548],{"type":47,"value":2549},"{resourceId, connectionRuntimeUrl, authentication.type=SystemAssignedManagedIdentity}",{"type":47,"value":2551}," (PATCH; merge-don't-clobber)",{"type":41,"tag":772,"props":2553,"children":2554},{},[2555,2557,2563,2565,2571,2573,2578],{"type":47,"value":2556},"✅ Each sandbox was created with ",{"type":41,"tag":112,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":47,"value":2562},"gatewayConnections: [{resourceId}]",{"type":47,"value":2564}," in its data-plane PUT body (the aca CLI doesn't expose ",{"type":41,"tag":112,"props":2566,"children":2568},{"className":2567},[],[2569],{"type":47,"value":2570},"--gateway-connection",{"type":47,"value":2572},"; use ",{"type":41,"tag":112,"props":2574,"children":2576},{"className":2575},[],[2577],{"type":47,"value":421},{"type":47,"value":2579}," data-plane PUT)",{"type":41,"tag":772,"props":2581,"children":2582},{},[2583],{"type":47,"value":2584},"✅ Test call from sandbox works (no auth header needed — platform proxy injects Bearer)",{"type":41,"tag":50,"props":2586,"children":2587},{},[2588],{"type":41,"tag":280,"props":2589,"children":2590},{},[2591],{"type":47,"value":2592},"For Event-driven triggers (path B):",{"type":41,"tag":937,"props":2594,"children":2595},{},[2596,2606,2624,2629],{"type":41,"tag":772,"props":2597,"children":2598},{},[2599,2601],{"type":47,"value":2600},"✅ Gateway has SystemAssigned identity, connection ",{"type":41,"tag":112,"props":2602,"children":2604},{"className":2603},[],[2605],{"type":47,"value":2482},{"type":41,"tag":772,"props":2607,"children":2608},{},[2609,2611,2616,2617,2622],{"type":47,"value":2610},"✅ Trigger state is ",{"type":41,"tag":112,"props":2612,"children":2614},{"className":2613},[],[2615],{"type":47,"value":2292},{"type":47,"value":119},{"type":41,"tag":112,"props":2618,"children":2620},{"className":2619},[],[2621],{"type":47,"value":701},{"type":47,"value":2623}," exists (gateway MI → connection)",{"type":41,"tag":772,"props":2625,"children":2626},{},[2627],{"type":47,"value":2628},"✅ RBAC role on sandbox group (ShellCommand) OR port auth (InvokePort)",{"type":41,"tag":772,"props":2630,"children":2631},{},[2632,2634,2639,2641,2646,2648,2654],{"type":47,"value":2633},"✅ If handler calls runtime URL: also needs ",{"type":41,"tag":112,"props":2635,"children":2637},{"className":2636},[],[2638],{"type":47,"value":709},{"type":47,"value":2640}," + sandbox-group ",{"type":41,"tag":112,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":47,"value":1973},{"type":47,"value":2647}," entry + per-sandbox ",{"type":41,"tag":112,"props":2649,"children":2651},{"className":2650},[],[2652],{"type":47,"value":2653},"gatewayConnections[{resourceId}]",{"type":47,"value":2655}," (same as path A)",{"type":41,"tag":50,"props":2657,"children":2658},{},[2659,2661,2665],{"type":47,"value":2660},"After setup → deploy the handler app. See ",{"type":41,"tag":471,"props":2662,"children":2663},{"href":598},[2664],{"type":47,"value":601},{"type":47,"value":439},{"type":41,"tag":56,"props":2667,"children":2669},{"id":2668},"quick-reference",[2670],{"type":47,"value":2671},"Quick reference",{"type":41,"tag":809,"props":2673,"children":2675},{"className":811,"code":2674,"language":813,"meta":814,"style":814},"# ARM base: https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\n# API version: api-version=2026-05-01-preview\n\n# Gateway\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview\"\n\n# Connections\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview\"\n\n# Connector Swagger (paths, parameters, x-ms-dynamic-* extensions) — use to list operations or pick a specific one.\n# See references\u002Fswagger-discovery.md for the full fetch pattern (metadata URL + user-ACL + API Hub token):\n#   az rest --method GET --url \"\u003Cmetadata_url>?export=true\" --resource \"https:\u002F\u002Fapihub.azure.com\"\n\n# Dynamic invoke\naz rest --method POST --url \"...\u002FconnectorGateways\u002F{gw}\u002Fconnections\u002F{conn}\u002FdynamicInvoke?api-version=2026-05-01-preview\" --body '{\"request\":{\"method\":\"GET\",\"path\":\"\u002F...\"}}'\n\n# Trigger configs\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}\u002FtriggerConfigs?api-version=2026-05-01-preview\"\naz rest --method GET --url \"...\u002FconnectorGateways\u002F{gw}\u002FtriggerConfigs\u002F{name}?api-version=2026-05-01-preview\" --query \"properties.state\"\n",[2676],{"type":41,"tag":112,"props":2677,"children":2678},{"__ignoreMap":814},[2679,2687,2695,2702,2710,2747,2754,2762,2798,2805,2814,2823,2832,2840,2849,2907,2915,2924,2961],{"type":41,"tag":820,"props":2680,"children":2681},{"class":822,"line":823},[2682],{"type":41,"tag":820,"props":2683,"children":2684},{"style":1933},[2685],{"type":47,"value":2686},"# ARM base: https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002FconnectorGateways\n",{"type":41,"tag":820,"props":2688,"children":2689},{"class":822,"line":25},[2690],{"type":41,"tag":820,"props":2691,"children":2692},{"style":1933},[2693],{"type":47,"value":2694},"# API version: api-version=2026-05-01-preview\n",{"type":41,"tag":820,"props":2696,"children":2697},{"class":822,"line":1474},[2698],{"type":41,"tag":820,"props":2699,"children":2700},{"emptyLinePlaceholder":1770},[2701],{"type":47,"value":1773},{"type":41,"tag":820,"props":2703,"children":2704},{"class":822,"line":1546},[2705],{"type":41,"tag":820,"props":2706,"children":2707},{"style":1933},[2708],{"type":47,"value":2709},"# Gateway\n",{"type":41,"tag":820,"props":2711,"children":2712},{"class":822,"line":1555},[2713,2717,2721,2725,2729,2734,2738,2743],{"type":41,"tag":820,"props":2714,"children":2715},{"style":827},[2716],{"type":47,"value":830},{"type":41,"tag":820,"props":2718,"children":2719},{"style":833},[2720],{"type":47,"value":1430},{"type":41,"tag":820,"props":2722,"children":2723},{"style":833},[2724],{"type":47,"value":1435},{"type":41,"tag":820,"props":2726,"children":2727},{"style":833},[2728],{"type":47,"value":1440},{"type":41,"tag":820,"props":2730,"children":2731},{"style":833},[2732],{"type":47,"value":2733}," --url",{"type":41,"tag":820,"props":2735,"children":2736},{"style":849},[2737],{"type":47,"value":852},{"type":41,"tag":820,"props":2739,"children":2740},{"style":833},[2741],{"type":47,"value":2742},"...\u002FconnectorGateways\u002F{gw}?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":2744,"children":2745},{"style":849},[2746],{"type":47,"value":920},{"type":41,"tag":820,"props":2748,"children":2749},{"class":822,"line":1564},[2750],{"type":41,"tag":820,"props":2751,"children":2752},{"emptyLinePlaceholder":1770},[2753],{"type":47,"value":1773},{"type":41,"tag":820,"props":2755,"children":2756},{"class":822,"line":1573},[2757],{"type":41,"tag":820,"props":2758,"children":2759},{"style":1933},[2760],{"type":47,"value":2761},"# Connections\n",{"type":41,"tag":820,"props":2763,"children":2764},{"class":822,"line":1766},[2765,2769,2773,2777,2781,2785,2789,2794],{"type":41,"tag":820,"props":2766,"children":2767},{"style":827},[2768],{"type":47,"value":830},{"type":41,"tag":820,"props":2770,"children":2771},{"style":833},[2772],{"type":47,"value":1430},{"type":41,"tag":820,"props":2774,"children":2775},{"style":833},[2776],{"type":47,"value":1435},{"type":41,"tag":820,"props":2778,"children":2779},{"style":833},[2780],{"type":47,"value":1440},{"type":41,"tag":820,"props":2782,"children":2783},{"style":833},[2784],{"type":47,"value":2733},{"type":41,"tag":820,"props":2786,"children":2787},{"style":849},[2788],{"type":47,"value":852},{"type":41,"tag":820,"props":2790,"children":2791},{"style":833},[2792],{"type":47,"value":2793},"...\u002FconnectorGateways\u002F{gw}\u002Fconnections?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":2795,"children":2796},{"style":849},[2797],{"type":47,"value":920},{"type":41,"tag":820,"props":2799,"children":2800},{"class":822,"line":1776},[2801],{"type":41,"tag":820,"props":2802,"children":2803},{"emptyLinePlaceholder":1770},[2804],{"type":47,"value":1773},{"type":41,"tag":820,"props":2806,"children":2808},{"class":822,"line":2807},10,[2809],{"type":41,"tag":820,"props":2810,"children":2811},{"style":1933},[2812],{"type":47,"value":2813},"# Connector Swagger (paths, parameters, x-ms-dynamic-* extensions) — use to list operations or pick a specific one.\n",{"type":41,"tag":820,"props":2815,"children":2817},{"class":822,"line":2816},11,[2818],{"type":41,"tag":820,"props":2819,"children":2820},{"style":1933},[2821],{"type":47,"value":2822},"# See references\u002Fswagger-discovery.md for the full fetch pattern (metadata URL + user-ACL + API Hub token):\n",{"type":41,"tag":820,"props":2824,"children":2826},{"class":822,"line":2825},12,[2827],{"type":41,"tag":820,"props":2828,"children":2829},{"style":1933},[2830],{"type":47,"value":2831},"#   az rest --method GET --url \"\u003Cmetadata_url>?export=true\" --resource \"https:\u002F\u002Fapihub.azure.com\"\n",{"type":41,"tag":820,"props":2833,"children":2835},{"class":822,"line":2834},13,[2836],{"type":41,"tag":820,"props":2837,"children":2838},{"emptyLinePlaceholder":1770},[2839],{"type":47,"value":1773},{"type":41,"tag":820,"props":2841,"children":2843},{"class":822,"line":2842},14,[2844],{"type":41,"tag":820,"props":2845,"children":2846},{"style":1933},[2847],{"type":47,"value":2848},"# Dynamic invoke\n",{"type":41,"tag":820,"props":2850,"children":2852},{"class":822,"line":2851},15,[2853,2857,2861,2865,2870,2874,2878,2883,2887,2892,2897,2902],{"type":41,"tag":820,"props":2854,"children":2855},{"style":827},[2856],{"type":47,"value":830},{"type":41,"tag":820,"props":2858,"children":2859},{"style":833},[2860],{"type":47,"value":1430},{"type":41,"tag":820,"props":2862,"children":2863},{"style":833},[2864],{"type":47,"value":1435},{"type":41,"tag":820,"props":2866,"children":2867},{"style":833},[2868],{"type":47,"value":2869}," POST",{"type":41,"tag":820,"props":2871,"children":2872},{"style":833},[2873],{"type":47,"value":2733},{"type":41,"tag":820,"props":2875,"children":2876},{"style":849},[2877],{"type":47,"value":852},{"type":41,"tag":820,"props":2879,"children":2880},{"style":833},[2881],{"type":47,"value":2882},"...\u002FconnectorGateways\u002F{gw}\u002Fconnections\u002F{conn}\u002FdynamicInvoke?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":2884,"children":2885},{"style":849},[2886],{"type":47,"value":862},{"type":41,"tag":820,"props":2888,"children":2889},{"style":833},[2890],{"type":47,"value":2891}," --body",{"type":41,"tag":820,"props":2893,"children":2894},{"style":849},[2895],{"type":47,"value":2896}," '",{"type":41,"tag":820,"props":2898,"children":2899},{"style":833},[2900],{"type":47,"value":2901},"{\"request\":{\"method\":\"GET\",\"path\":\"\u002F...\"}}",{"type":41,"tag":820,"props":2903,"children":2904},{"style":849},[2905],{"type":47,"value":2906},"'\n",{"type":41,"tag":820,"props":2908,"children":2910},{"class":822,"line":2909},16,[2911],{"type":41,"tag":820,"props":2912,"children":2913},{"emptyLinePlaceholder":1770},[2914],{"type":47,"value":1773},{"type":41,"tag":820,"props":2916,"children":2918},{"class":822,"line":2917},17,[2919],{"type":41,"tag":820,"props":2920,"children":2921},{"style":1933},[2922],{"type":47,"value":2923},"# Trigger configs\n",{"type":41,"tag":820,"props":2925,"children":2927},{"class":822,"line":2926},18,[2928,2932,2936,2940,2944,2948,2952,2957],{"type":41,"tag":820,"props":2929,"children":2930},{"style":827},[2931],{"type":47,"value":830},{"type":41,"tag":820,"props":2933,"children":2934},{"style":833},[2935],{"type":47,"value":1430},{"type":41,"tag":820,"props":2937,"children":2938},{"style":833},[2939],{"type":47,"value":1435},{"type":41,"tag":820,"props":2941,"children":2942},{"style":833},[2943],{"type":47,"value":1440},{"type":41,"tag":820,"props":2945,"children":2946},{"style":833},[2947],{"type":47,"value":2733},{"type":41,"tag":820,"props":2949,"children":2950},{"style":849},[2951],{"type":47,"value":852},{"type":41,"tag":820,"props":2953,"children":2954},{"style":833},[2955],{"type":47,"value":2956},"...\u002FconnectorGateways\u002F{gw}\u002FtriggerConfigs?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":2958,"children":2959},{"style":849},[2960],{"type":47,"value":920},{"type":41,"tag":820,"props":2962,"children":2964},{"class":822,"line":2963},19,[2965,2969,2973,2977,2981,2985,2989,2994,2998,3002,3006,3011],{"type":41,"tag":820,"props":2966,"children":2967},{"style":827},[2968],{"type":47,"value":830},{"type":41,"tag":820,"props":2970,"children":2971},{"style":833},[2972],{"type":47,"value":1430},{"type":41,"tag":820,"props":2974,"children":2975},{"style":833},[2976],{"type":47,"value":1435},{"type":41,"tag":820,"props":2978,"children":2979},{"style":833},[2980],{"type":47,"value":1440},{"type":41,"tag":820,"props":2982,"children":2983},{"style":833},[2984],{"type":47,"value":2733},{"type":41,"tag":820,"props":2986,"children":2987},{"style":849},[2988],{"type":47,"value":852},{"type":41,"tag":820,"props":2990,"children":2991},{"style":833},[2992],{"type":47,"value":2993},"...\u002FconnectorGateways\u002F{gw}\u002FtriggerConfigs\u002F{name}?api-version=2026-05-01-preview",{"type":41,"tag":820,"props":2995,"children":2996},{"style":849},[2997],{"type":47,"value":862},{"type":41,"tag":820,"props":2999,"children":3000},{"style":833},[3001],{"type":47,"value":846},{"type":41,"tag":820,"props":3003,"children":3004},{"style":849},[3005],{"type":47,"value":852},{"type":41,"tag":820,"props":3007,"children":3008},{"style":833},[3009],{"type":47,"value":3010},"properties.state",{"type":41,"tag":820,"props":3012,"children":3013},{"style":849},[3014],{"type":47,"value":920},{"type":41,"tag":56,"props":3016,"children":3018},{"id":3017},"references",[3019],{"type":47,"value":3020},"References",{"type":41,"tag":937,"props":3022,"children":3023},{},[3024,3033,3042,3051,3060,3069,3083,3094,3103,3114,3123,3134],{"type":41,"tag":772,"props":3025,"children":3026},{},[3027,3031],{"type":41,"tag":471,"props":3028,"children":3029},{"href":2050},[3030],{"type":47,"value":2053},{"type":47,"value":3032}," — Full dynamicInvoke details, parameter resolution, examples",{"type":41,"tag":772,"props":3034,"children":3035},{},[3036,3040],{"type":41,"tag":471,"props":3037,"children":3038},{"href":1797},[3039],{"type":47,"value":1800},{"type":47,"value":3041}," — OAuth consent link generation (exact body format)",{"type":41,"tag":772,"props":3043,"children":3044},{},[3045,3049],{"type":41,"tag":471,"props":3046,"children":3047},{"href":2189},[3048],{"type":47,"value":2192},{"type":47,"value":3050}," — Full trigger creation commands (Steps 5B–9B)",{"type":41,"tag":772,"props":3052,"children":3053},{},[3054,3058],{"type":41,"tag":471,"props":3055,"children":3056},{"href":598},[3057],{"type":47,"value":601},{"type":47,"value":3059}," — Handler development, event delivery, templates",{"type":41,"tag":772,"props":3061,"children":3062},{},[3063,3067],{"type":41,"tag":471,"props":3064,"children":3065},{"href":2075},[3066],{"type":47,"value":2078},{"type":47,"value":3068}," — Dynamic parameter resolution algorithms",{"type":41,"tag":772,"props":3070,"children":3071},{},[3072,3076,3078,3081],{"type":41,"tag":471,"props":3073,"children":3074},{"href":644},[3075],{"type":47,"value":647},{"type":47,"value":3077}," — Sandbox ↔ connection wiring (declarative gatewayConnections",{"type":41,"tag":820,"props":3079,"children":3080},{},[],{"type":47,"value":3082},")",{"type":41,"tag":772,"props":3084,"children":3085},{},[3086,3092],{"type":41,"tag":471,"props":3087,"children":3089},{"href":3088},"references\u002Fruntime-url-examples.md",[3090],{"type":47,"value":3091},"runtime-url-examples.md",{"type":47,"value":3093}," — Curl examples for all connectors",{"type":41,"tag":772,"props":3095,"children":3096},{},[3097,3101],{"type":41,"tag":471,"props":3098,"children":3099},{"href":473},[3100],{"type":47,"value":476},{"type":47,"value":3102}," — Common issues and solutions",{"type":41,"tag":772,"props":3104,"children":3105},{},[3106,3112],{"type":41,"tag":471,"props":3107,"children":3109},{"href":3108},"references\u002Ftrigger-flow.md",[3110],{"type":47,"value":3111},"trigger-flow.md",{"type":47,"value":3113}," — Trigger architecture details",{"type":41,"tag":772,"props":3115,"children":3116},{},[3117,3121],{"type":41,"tag":471,"props":3118,"children":3119},{"href":793},[3120],{"type":47,"value":796},{"type":47,"value":3122}," — Setup requirements",{"type":41,"tag":772,"props":3124,"children":3125},{},[3126,3132],{"type":41,"tag":471,"props":3127,"children":3129},{"href":3128},"references\u002Fquickstart.md",[3130],{"type":47,"value":3131},"quickstart.md",{"type":47,"value":3133}," — Quick start guide",{"type":41,"tag":772,"props":3135,"children":3136},{},[3137,3143],{"type":41,"tag":471,"props":3138,"children":3140},{"href":3139},"references\u002Ftutorial-welcome-emailer.md",[3141],{"type":47,"value":3142},"tutorial-welcome-emailer.md",{"type":47,"value":3144}," — Pattern A walkthrough: deploy a welcome emailer to a sandbox",{"type":41,"tag":3146,"props":3147,"children":3148},"style",{},[3149],{"type":47,"value":3150},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3152,"total":25},[3153,3166],{"slug":3154,"name":3154,"fn":3155,"description":3156,"org":3157,"tags":3158,"stars":21,"repoUrl":22,"updatedAt":3165},"azure-connectornamespace","manage Azure connector namespaces and connections","Azure Connector Namespace — manage namespaces, connections, triggers, and MCP server configs.\nConnect external SaaS services (Office 365, Teams, SharePoint, OneDrive, Forms, GitHub,\nAzure Blob) to any user-provided webhook URL via event-driven triggers, expose\nselected connector operations as an MCP server endpoint, or call connector operations\non demand via dynamicInvoke.\nUse when:\n- Managing connector namespaces and connections\n- Creating trigger configs that POST to a callback URL\n- Subscribing to connector events (email, file, list-item, form response)\n- Wiring event sources to a webhook, Function App, Logic App, or API\n- Recurrence \u002F sliding-window triggers that fire on a schedule\n- Exposing connector operations as MCP tools at a namespace endpoint\n- Calling connector APIs (send email, post Teams message, upload files)\nTriggers: \"connector namespace\", \"connector\", \"trigger config\", \"webhook trigger\",\n\"recurrence trigger\", \"on new email\", \"callback url\",\n\"mcp\", \"send email\", \"post teams message\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3159,3160,3161,3162],{"name":19,"slug":20,"type":14},{"name":11,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":3163,"slug":3164,"type":14},"MCP","mcp","2026-07-12T08:18:17.747618",{"slug":4,"name":4,"fn":5,"description":6,"org":3167,"tags":3168,"stars":21,"repoUrl":22,"updatedAt":23},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3169,3170,3171],{"name":19,"slug":20,"type":14},{"name":11,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"items":3173,"total":3350},[3174,3193,3212,3229,3244,3259,3272,3287,3298,3312,3325,3338],{"slug":3175,"name":3175,"fn":3176,"description":3177,"org":3178,"tags":3179,"stars":3190,"repoUrl":3191,"updatedAt":3192},"azure-arg-external-evaluation-policy-author","author and test Azure Resource Graph policies","Use when the user wants to author, design, or test an Azure Policy that queries Azure Resource Graph (ARG) at request-time — i.e. a policy whose deny\u002Faudit decision depends on data from elsewhere in the subscription (sibling\u002Fparent resource state, RG-wide invariants, multi-hop relationships, etc.). Formally called Azure Policy External Evaluation; sometimes referred to colloquially as \"Invoke\". Drives an iterative KQL co-design loop against the user's real subscription via `az graph query`, then emits a policy definition, assignment, `.http` test flow, and an `EXPLANATION.md` companion. Read-only; never provisions anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3180,3181,3184,3187],{"name":11,"slug":8,"type":14},{"name":3182,"slug":3183,"type":14},"Compliance","compliance",{"name":3185,"slug":3186,"type":14},"Governance","governance",{"name":3188,"slug":3189,"type":14},"Policy","policy",1686,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-policy","2026-07-12T08:17:48.378432",{"slug":3194,"name":3194,"fn":3195,"description":3196,"org":3197,"tags":3198,"stars":3209,"repoUrl":3210,"updatedAt":3211},"azure-blueprints-migration","migrate Azure Blueprints to Template Specs","Use when a user needs to migrate off Azure Blueprints (definitions and\u002For assignments) to Template Specs and Deployment Stacks before the January 31, 2027 retirement. Covers inventory, export, conversion to Bicep, policy decoupling, Template Spec publishing, Deployment Stack deployment with deny-settings, validation, and cutover.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3199,3200,3203,3206],{"name":11,"slug":8,"type":14},{"name":3201,"slug":3202,"type":14},"Deployment","deployment",{"name":3204,"slug":3205,"type":14},"Infrastructure as Code","infrastructure-as-code",{"name":3207,"slug":3208,"type":14},"Migration","migration",260,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-blueprints","2026-07-12T08:17:49.646405",{"slug":3213,"name":3213,"fn":3214,"description":3215,"org":3216,"tags":3217,"stars":3226,"repoUrl":3227,"updatedAt":3228},"apiview-feedback-resolution","resolve APIView feedback on Azure SDKs","Analyze and resolve APIView review feedback on Azure SDK PRs. **UTILITY SKILL**. USE FOR: APIView comments, API review feedback, SDK API surface changes. DO NOT USE FOR: general code review, non-APIView feedback. INVOKES: azure-sdk-mcp:azsdk_apiview_get_comments, azure-sdk-mcp:azsdk_typespec_customized_code_update.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3218,3219,3220,3223],{"name":19,"slug":20,"type":14},{"name":11,"slug":8,"type":14},{"name":3221,"slug":3222,"type":14},"Code Review","code-review",{"name":3224,"slug":3225,"type":14},"Documentation","documentation",133,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-tools","2026-07-12T08:17:43.350876",{"slug":3230,"name":3230,"fn":3231,"description":3232,"org":3233,"tags":3234,"stars":3226,"repoUrl":3227,"updatedAt":3243},"azsdk-common-live-and-recorded-tests","deploy resources and run Azure SDK tests","Deploy test resources and run Azure SDK tests in live, record, or playback mode. WHEN: \"run live tests\", \"run recorded tests\", \"deploy test resources\", \"record tests\", \"run tests in record mode\", \"clean up test resources\", \"run tests against live resources\". DO NOT USE FOR: writing new tests, authoring Bicep templates, playback-only test runs without resource deployment. INVOKES: azure-sdk-mcp:azsdk_package_run_tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3235,3236,3237,3240],{"name":11,"slug":8,"type":14},{"name":3201,"slug":3202,"type":14},{"name":3238,"slug":3239,"type":14},"SDK","sdk",{"name":3241,"slug":3242,"type":14},"Testing","testing","2026-07-12T08:17:44.718943",{"slug":3245,"name":3245,"fn":3246,"description":3247,"org":3248,"tags":3249,"stars":3226,"repoUrl":3227,"updatedAt":3258},"azsdk-common-prepare-release-plan","manage Azure SDK release plan work items","Create, get, update, abandon, and link SDK PRs to release plan work items for Azure SDK releases. **UTILITY SKILL**. USE FOR: \"create release plan\", \"get release plan\", \"update release plan\", \"update API spec in release plan\", \"update SDK details in release plan\", \"abandon release plan\", \"link SDK PR to plan\", \"namespace approval\", \"check release plan status\". DO NOT USE FOR: SDK code generation, pipeline troubleshooting, API review feedback. INVOKES: azure-sdk-mcp:azsdk_create_release_plan, azure-sdk-mcp:azsdk_get_release_plan, azure-sdk-mcp:azsdk_get_release_plan_for_spec_pr, azure-sdk-mcp:azsdk_update_release_plan, azure-sdk-mcp:azsdk_update_api_spec_pull_request_in_release_plan, azure-sdk-mcp:azsdk_update_sdk_details_in_release_plan, azure-sdk-mcp:azsdk_abandon_release_plan, azure-sdk-mcp:azsdk_link_sdk_pull_request_to_release_plan, azure-sdk-mcp:azsdk_link_namespace_approval_issue.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3250,3251,3254,3257],{"name":11,"slug":8,"type":14},{"name":3252,"slug":3253,"type":14},"GitHub","github",{"name":3255,"slug":3256,"type":14},"Project Management","project-management",{"name":3238,"slug":3239,"type":14},"2026-07-12T08:17:38.345387",{"slug":3260,"name":3260,"fn":3261,"description":3262,"org":3263,"tags":3264,"stars":3226,"repoUrl":3227,"updatedAt":3271},"azsdk-common-sdk-release","release Azure SDK packages","Check release readiness and trigger the release pipeline for Azure SDK packages. **UTILITY SKILL**. USE FOR: \"release SDK\", \"trigger release\", \"check release readiness\", \"release pipeline\", \"publish package\", \"ship SDK\". DO NOT USE FOR: SDK development, code generation, pipeline debugging, release plan creation. INVOKES: azure-sdk-mcp:azsdk_release_sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3265,3266,3269,3270],{"name":11,"slug":8,"type":14},{"name":3267,"slug":3268,"type":14},"CI\u002FCD","ci-cd",{"name":3201,"slug":3202,"type":14},{"name":3238,"slug":3239,"type":14},"2026-07-12T08:17:34.27607",{"slug":3273,"name":3273,"fn":3274,"description":3275,"org":3276,"tags":3277,"stars":3226,"repoUrl":3227,"updatedAt":3286},"azure-typespec-author","author and modify Azure TypeSpec API specifications","Authors and modifies Azure TypeSpec (.tsp) API specifications. USE FOR: any TypeSpec\u002Ftsp change — api versions (add, bump, preview, stable, promote), resources, operations, models, properties, decorators, visibility, constraints, breaking changes, LRO, suppressions, operationId, spread model. Covers ARM resource-manager and data-plane services. DO NOT USE FOR: SDK generation, releasing SDK packages, or single MCP tool calls. INVOKES: azure-sdk-mcp:azsdk_typespec_generate_authoring_plan, azure-sdk-mcp:azsdk_run_typespec_validation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3278,3279,3280,3283],{"name":19,"slug":20,"type":14},{"name":11,"slug":8,"type":14},{"name":3281,"slug":3282,"type":14},"OpenAPI","openapi",{"name":3284,"slug":3285,"type":14},"Technical Writing","technical-writing","2026-07-12T08:17:39.603232",{"slug":3288,"name":3288,"fn":3289,"description":3290,"org":3291,"tags":3292,"stars":3226,"repoUrl":3227,"updatedAt":3297},"generate-sdk-locally","generate and test Azure SDKs locally","Generate, build, and test Azure SDKs locally from TypeSpec with automatic customization. WHEN: \"generate SDK locally\", \"build SDK\", \"run SDK tests\", \"run CI checks\", \"validate package\", \"run checks\", \"update changelog\", \"fix SDK build errors\", \"fix breaking changes\", \"resolve SDK generation errors\", \"customize TypeSpec\", \"rename SDK client\", \"rename SDK model\", \"hide operation from SDK\", \"fix analyzer errors\", \"resolve customization drift\", \"create subclient\", \"update metadata\", \"update version\". DO NOT USE FOR: publishing to package registries, CI pipeline configuration, API design review. INVOKES: azsdk_verify_setup, azsdk_package_generate_code, azsdk_package_build_code, azsdk_package_run_check, azsdk_package_run_tests, azsdk_customized_code_update, azsdk_package_update_changelog_content, azsdk_package_update_metadata, azsdk_package_update_version.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3293,3294,3295,3296],{"name":11,"slug":8,"type":14},{"name":3267,"slug":3268,"type":14},{"name":3238,"slug":3239,"type":14},{"name":3241,"slug":3242,"type":14},"2026-07-12T08:17:37.08523",{"slug":3299,"name":3299,"fn":3300,"description":3301,"org":3302,"tags":3303,"stars":3226,"repoUrl":3227,"updatedAt":3311},"markdown-token-optimizer","optimize markdown files for token efficiency","Analyze markdown files for token efficiency and reduce context-window bloat. **UTILITY SKILL**. DO NOT USE FOR: code optimization, general file editing, non-markdown files. TRIGGERS: optimize markdown, reduce tokens, token count, token bloat, too many tokens, make concise, shrink file, file too large, optimize for AI, token efficiency, verbose markdown, reduce file size. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3304,3307,3310],{"name":3305,"slug":3306,"type":14},"LLM","llm",{"name":3308,"slug":3309,"type":14},"Performance","performance",{"name":3284,"slug":3285,"type":14},"2026-07-12T08:17:42.080413",{"slug":3313,"name":3313,"fn":3314,"description":3315,"org":3316,"tags":3317,"stars":3226,"repoUrl":3227,"updatedAt":3324},"pipeline-troubleshooting","troubleshoot Azure SDK CI pipelines","Diagnose and resolve failures in Azure SDK CI and generation pipelines. **UTILITY SKILL**. USE FOR: \"pipeline failed\", \"build failure\", \"CI check failing\", \"SDK generation error\", \"reproduce pipeline locally\", \"debug SDK pipeline\". DO NOT USE FOR: local build issues without pipeline context, API design review, SDK publishing. INVOKES: azure-sdk-mcp:azsdk_analyze_pipeline, azure-sdk-mcp:azsdk_package_build_code, azure-sdk-mcp:azsdk_package_run_check.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3318,3319,3320,3323],{"name":11,"slug":8,"type":14},{"name":3267,"slug":3268,"type":14},{"name":3321,"slug":3322,"type":14},"Debugging","debugging",{"name":3238,"slug":3239,"type":14},"2026-07-12T08:17:40.821512",{"slug":3326,"name":3326,"fn":3327,"description":3328,"org":3329,"tags":3330,"stars":3226,"repoUrl":3227,"updatedAt":3337},"sensei","improve skill frontmatter compliance","**WORKFLOW SKILL** — Iteratively improve skill frontmatter compliance using the Ralph loop pattern. WHEN: \"run sensei\", \"sensei help\", \"improve skill\", \"fix frontmatter\", \"skill compliance\", \"frontmatter audit\", \"score skill\", \"check skill tokens\". INVOKES: token counting tools, test runners, git commands. FOR SINGLE OPERATIONS: use token CLI directly for counts\u002Fchecks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3331,3332,3333,3336],{"name":11,"slug":8,"type":14},{"name":3182,"slug":3183,"type":14},{"name":3334,"slug":3335,"type":14},"Process Optimization","process-optimization",{"name":3284,"slug":3285,"type":14},"2026-07-12T08:17:32.970921",{"slug":3339,"name":3339,"fn":3340,"description":3341,"org":3342,"tags":3343,"stars":3226,"repoUrl":3227,"updatedAt":3349},"skill-authoring","author agent skills for agentskills.io","Write Agent Skills that comply with the agentskills.io specification. WHEN: \"create a skill\", \"new skill\", \"write a skill\", \"skill template\", \"skill structure\", \"review skill\", \"skill PR\", \"skill compliance\", \"SKILL.md format\", \"skill frontmatter\", \"skill best practices\". DO NOT USE FOR: improving existing skills (use sensei), general documentation. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3344,3345,3348],{"name":3224,"slug":3225,"type":14},{"name":3346,"slug":3347,"type":14},"Plugin Development","plugin-development",{"name":3284,"slug":3285,"type":14},"2026-07-12T08:17:35.873862",109]