Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions .claude-plugin/plugin.json

This file was deleted.

4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/portal_bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ body:
attributes:
label: One-line summary
description: What broke, in a sentence.
placeholder: e.g. "Connector gateway list shows duplicate rows after delete"
placeholder: e.g. "Connector list shows duplicate rows after delete"
validations:
required: true

Expand All @@ -23,7 +23,7 @@ body:
label: Area of the portal
default: 6
options:
- Connector gateways
- Connectors
- MCP servers
- Connections
- Triggers
Expand Down
23 changes: 0 additions & 23 deletions .plugin/plugin.json

This file was deleted.

7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Or install via the marketplace (useful when more plugins are added later):

```bash
/plugin marketplace add Azure/Connectors
/plugin install azure-connectorgateway@Azure-Connectors
/plugin install azure-connectornamespace@Azure-Connectors
```

### Claude Code
Expand All @@ -41,9 +41,10 @@ claude plugin add Azure/Connectors

| Skill | Description |
|-------|-------------|
| [azure-connectorgateway](Skills/Sandbox/azure-connectorgateway/SKILL.md) | Manage connector gateways, connections, and triggers — wire external services (Office 365, Teams, Forms, SharePoint, OneDrive, GitHub, Azure Blob) to sandbox apps via event-driven triggers or direct API calls using connection runtime URLs. |
| [azure-connectornamespace](plugin/skills/connectors/SKILL.md) | Generic, callback-agnostic — manage connector namespaces, connections, trigger configs that POST to any HTTP(S) callback (Function App, Logic App, App Service, custom webhook), and MCP server configs that expose connector operations as MCP tools. |
| [azure-connectornamespace-aca-sandbox](plugin/skills/aca-sandboxes/SKILL.md) | ACA-sandbox edition — manage connector namespaces, connections, and triggers; wire external services (Office 365, Teams, Forms, SharePoint, OneDrive, GitHub, Azure Blob) to Azure Container Apps sandbox apps via event-driven triggers or direct API calls using connection runtime URLs. |

See [`Skills/Sandbox/README.md`](Skills/Sandbox/README.md) for more detail.
See [`plugin/skills/connectors/README.md`](plugin/skills/connectors/README.md) for more detail.

## Resources

Expand Down
35 changes: 0 additions & 35 deletions Skills/Sandbox/README.md

This file was deleted.

9 changes: 5 additions & 4 deletions marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@
},
"plugins": [
{
"name": "azure-connectorgateway",
"source": ".",
"description": "Azure Connector Gateway — manage gateways, connections, and triggers. Connects external services (Office 365, Teams, Microsoft Forms, SharePoint, OneDrive, GitHub, Azure Blob) to sandbox apps via event-driven triggers or direct API calls using connection runtime URLs.",
"name": "azure-connectornamespace",
"source": "./plugin",
"description": "Azure Connector Namespace — manage connector namespaces, connections, triggers, MCP server configs, and ACA sandbox wiring. Bundles a generic (callback-to-any-HTTPS-endpoint) skill plus an ACA-sandbox edition that wires triggers and direct API calls into Azure Container Apps sandboxes.",
"version": "0.1.0",
"skills": [
"./Skills/Sandbox/azure-connectorgateway"
"./skills/connectors",
"./skills/aca-sandboxes"
]
}
]
Expand Down
25 changes: 25 additions & 0 deletions plugin/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "azure-connectornamespace",
"description": "Azure Connector Namespace — manage connector namespaces, connections, triggers, MCP server configs, and ACA sandbox wiring. Connects external services (Office 365, Teams, Microsoft Forms, SharePoint, OneDrive, GitHub, Azure Blob) to any HTTP(S) callback (Function App, Logic App, App Service, custom webhook) or to Azure Container Apps sandboxes via event-driven triggers or direct API calls using connection runtime URLs.",
"version": "0.1.0",
"author": {
"name": "Microsoft",
"url": "https://www.microsoft.com"
},
"homepage": "https://github.com/Azure/Connectors",
"repository": "https://github.com/Azure/Connectors",
"license": "MIT",
"keywords": [
"azure",
"connectors",
"connector-namespace",
"triggers",
"mcp",
"ai-agents",
"sandbox"
],
"skills": [
"./skills/aca-sandboxes",
"./skills/connectors"
]
}
25 changes: 25 additions & 0 deletions plugin/.plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "azure-connectornamespace",
"description": "Azure Connector Namespace — manage connector namespaces, connections, triggers, MCP server configs, and ACA sandbox wiring. Connects external services (Office 365, Teams, Microsoft Forms, SharePoint, OneDrive, GitHub, Azure Blob) to any HTTP(S) callback (Function App, Logic App, App Service, custom webhook) or to Azure Container Apps sandboxes via event-driven triggers or direct API calls using connection runtime URLs.",
"version": "0.1.0",
"author": {
"name": "Microsoft",
"url": "https://www.microsoft.com"
},
"homepage": "https://github.com/Azure/Connectors",
"repository": "https://github.com/Azure/Connectors",
"license": "MIT",
"keywords": [
"azure",
"connectors",
"connector-namespace",
"triggers",
"mcp",
"ai-agents",
"sandbox"
],
"skills": [
"./skills/aca-sandboxes",
"./skills/connectors"
]
}
37 changes: 37 additions & 0 deletions plugin/skills/aca-sandboxes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Azure Connectors Skills

Skills for [Azure Connector Namespaces](https://connectors.azure.com) — install
once, drive connectors, connections, and triggers from natural language
in your coding agent.

> The plugin descriptors live under `plugin/` (`plugin/.plugin/plugin.json` and
> `plugin/.claude-plugin/plugin.json`); the marketplace manifest
> (`marketplace.json`) lives at the repo root. Skill sources live in
> sibling folders under `plugin/skills/`.

## Install

### GitHub Copilot CLI

```bash
# Direct install (single command)
/plugin install Azure/Connectors

# Or via marketplace (useful when this repo adds more skills)
/plugin marketplace add Azure/Connectors
/plugin install azure-connectornamespace@Azure-Connectors
```

### Claude Code

```bash
claude plugin add Azure/Connectors
```

## Skills

| Skill | Description |
|-------|-------------|
| [azure-connectornamespace-aca-sandbox](SKILL.md) | ACA-sandbox edition — manage connector namespaces, connections, and triggers; wire external services (Office 365, Teams, Forms, SharePoint, OneDrive, GitHub, Azure Blob) to Azure Container Apps sandbox apps via event-driven triggers or direct API calls using connection runtime URLs. |
| [azure-connectornamespace](../connectors/SKILL.md) | Generic, callback-agnostic counterpart — manage connector namespaces, connections, trigger configs that POST to any HTTP(S) callback (Function App, Logic App, App Service, custom webhook), and MCP server configs that expose connector operations as MCP tools. |

Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
---
name: azure-connectorgateway
name: azure-connectornamespace-aca-sandbox
description: |
Azure Connector Gatewaymanage gateways, connections, and triggers.
Connects external services (Office 365, Teams, Microsoft Forms, SharePoint,
OneDrive, GitHub, Azure Blob) to sandbox apps via event-driven triggers or
direct API calls using connection runtime URLs.
Azure Connector NamespaceACA sandbox edition. Manage connector namespaces,
connections, and triggers that wire external services (Office 365, Teams, Microsoft
Forms, SharePoint, OneDrive, GitHub, Azure Blob) into Azure Container Apps sandbox
apps via event-driven triggers or direct API calls using connection runtime URLs.
Use when:
- Creating or managing connector gateways and connections
- Creating or managing trigger configs on a connector gateway
- Creating or managing connector namespaces and connections for ACA sandboxes
- Creating or managing trigger configs whose callbacks target sandbox endpoints
- Subscribing to connector events (email, file, webhook, form submission, Teams message)
- Wiring event sources to sandbox callbacks
- Wiring event sources to ACA sandbox callbacks via `gatewayConnections[]`
- Managing trigger lifecycle (enable, disable, delete)
- Building sandbox apps that call connector APIs (send email, upload files, post Teams message, etc.)
- Reacting to events from one service and calling another (e.g., "when a form is submitted, send a Teams message")
- Automating workflows across Microsoft 365 services (Forms, Teams, Outlook, SharePoint, OneDrive)
- Automating workflows across Microsoft 365 services (Forms, Teams, Outlook, SharePoint, OneDrive) from within an ACA sandbox
Triggers: "create trigger", "trigger config", "webhook trigger",
"connector gateway", "connection", "email trigger", "send email",
"connector namespace", "connector", "connection", "email trigger", "send email",
"onedrive", "sharepoint", "teams", "teams message", "post message",
"microsoft forms", "forms", "form response", "form submission",
"microsoft forms", "forms", "form response", "form submission", "aca sandbox",
"sandbox group", "container apps sandbox",
"notify", "notification", "automate", "when", "on new"
---

# Azure Connector Gateway
# Azure Connector Namespace — ACA sandbox edition

Manage connector gateways, connections, and triggers — connect external services
Manage connectors, connections, and triggers — connect external services
to sandbox apps via direct API calls or event-driven triggers.

## Common scenarios
Expand Down Expand Up @@ -116,7 +117,7 @@ Ask the user:
> Use the subscription and resource group selected in Step 0.

Ask the user:
- "Do you have an existing connector gateway, or should I create a new one?"
- "Do you have an existing connector, or should I create a new one?"
- If **existing**: ask for the gateway name, then retrieve it (using sub/rg from Step 0):
```bash
az rest --method GET \
Expand Down Expand Up @@ -217,8 +218,8 @@ Ask the user:

| Target | Callback URL | Notes |
|--------|-------------|-------|
| ShellCommand | `.../executeShellCommand` | Auto-resumes sandbox; needs RBAC `c24cf47c-...` on sandbox group |
| ExecuteCommand | `.../executeCommand` | Same as above, no shell interpretation |
| ShellCommand | `https://management.{region}.azuredevcompute.io/.../executeShellCommand` | Auto-resumes sandbox; needs RBAC `c24cf47c-...` on sandbox group. **Regional host required** (unregional → 404 GlobalSandboxNotFound). |
| ExecuteCommand | `https://management.{region}.azuredevcompute.io/.../executeCommand` | Same as above, no shell interpretation. **Regional host required.** |
| InvokePort | `https://{id}--{port}.proxy.azuredevcompute.io/...` | Sandbox must be running; needs port auth |

After trigger creation → deploy handler. See [handler-guide.md](references/handler-guide.md).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ az rest --method POST \
"method": "POST",
"path": "/datasets/default/files",
"queries": {"folderPath": "/", "name": "hello.txt"},
"body": "Hello from Connector Gateway!"
"body": "Hello from Connector!"
}
}'
```
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Gateway Connections — Declarative Sandbox ↔ Connection Wiring

How to wire a connector-gateway connection to a sandbox group + sandbox so that
How to wire a connector-namespace connection to a sandbox group + sandbox so that
calls from inside the sandbox to the connection's **runtime URL** are
authenticated automatically by the platform.

Expand Down Expand Up @@ -217,7 +217,7 @@ entries:
2. It mints a Bearer token using the sandbox-group's SystemAssigned MI against
the connection (this is why `sandbox-acl` must exist).
3. It adds `Authorization: Bearer <token>` to the outbound request.
4. The connector gateway authorizes the call (sandbox-group MI is on its ACL),
4. The connector authorizes the call (sandbox-group MI is on its ACL),
exchanges the token for the stored OAuth credentials, and forwards to the
downstream API (Office 365, Teams, etc.).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ Common issues and their solutions.
| `az rest --body` "Unsupported Media Type" | Inline JSON strings get mangled by PowerShell. Always use `@$tmpFile` pattern: write body to temp file, pass `--body "@$tmpFile"` |
| `gatewayConnections[]` PATCH clobbered other entries | Always GET-merge-PATCH on the sandbox group — never PUT or unconditionally PATCH `gatewayConnections` with just your entry. Match existing entries case-insensitively by `resourceId.toLower()`. See [gateway-connections.md](gateway-connections.md) Step 4. |
| `aca sandbox create` ignores connection wiring | The aca CLI does not yet expose `--gateway-connection`. Use the data-plane PUT via `az rest` with `gatewayConnections: [{resourceId}]` in the body. See [gateway-connections.md](gateway-connections.md) Step 5. |
| Sandbox data-plane endpoint 404s | The endpoint is **regional** — `https://management.{region}.azuredevcompute.io/...`, NOT `https://management.azuredevcompute.io/...` |
| Sandbox data-plane endpoint 404s | The endpoint is **regional** — `https://management.{region}.azuredevcompute.io/...`, NOT `https://management.azuredevcompute.io/...`. This applies to **ALL** sandbox data-plane URLs, including trigger `callbackUrl` for ShellCommand/ExecuteCommand. Symptom: trigger fires but callback fails with `{"title":"GlobalSandboxNotFound","status":404,...}`. |
| aca CLI install 404 | GitHub releases URL requires auth. Use `gh release download` (needs `gh auth login`) or ask user for the .tgz path |
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ az rest --method GET \
--url "https://management.azure.com/subscriptions/{sub}/providers/Microsoft.Web/locations/{location}/managedApis/office365/apiOperations?api-version=2016-06-01"
```

Or open the lab notebook: `labs/02-trigger-getting-started/01-trigger-getting-started.ipynb`
For an end-to-end walkthrough, see [`tutorial-welcome-emailer.md`](tutorial-welcome-emailer.md).
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
┌─────────────────────────────────────────────────────────────────┐
│ Connector Gateway (ARM: Microsoft.Web/connectorGateways) │
│ Connector (ARM: Microsoft.Web/connectorGateways) │
│ ├── Connection: OAuth-authorized access to the connector │
│ ├── Trigger Config: event subscription + callback delivery │
│ └── Access Policy: gateway MI granted access to connection │
Expand All @@ -32,7 +32,7 @@

## End-to-End Flow

### Step 1: Create Connector Gateway with SystemAssigned Identity
### Step 1: Create Connector with SystemAssigned Identity

```bash
az rest --method PUT \
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Trigger Setup (Steps 5B–9B)

Detailed commands for creating event-driven triggers on a connector gateway.
Detailed commands for creating event-driven triggers on a connector.

## Step 5B: Discover trigger operations

Expand Down Expand Up @@ -115,8 +115,9 @@ Ask for callback type:

```powershell
# Build trigger config body — ShellCommand example
# First construct the callback URL:
$callbackUrl = "https://management.azuredevcompute.io/subscriptions/{sub}/resourceGroups/{rg}/sandboxGroups/{sandbox_group}/sandboxes/{sandbox_id}/executeShellCommand?api-version=2026-02-01-preview"
# First construct the callback URL — MUST use the regional data-plane host
# (the unregional `management.azuredevcompute.io` returns 404 GlobalSandboxNotFound):
$callbackUrl = "https://management.{region}.azuredevcompute.io/subscriptions/{sub}/resourceGroups/{rg}/sandboxGroups/{sandbox_group}/sandboxes/{sandbox_id}/executeShellCommand?api-version=2026-02-01-preview"

$triggerBody = @{
properties = @{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Office 365 connector using **Direct API calls (Pattern A)**.

## What you'll build

- A connector gateway + OAuth connection to Office 365
- A connector + OAuth connection to Office 365
- A sandbox running a Python script that sends a welcome email
- Declarative **gatewayConnections** wiring (SG-level PATCH + per-sandbox PUT
body) so the sandbox calls the runtime URL with **no auth code** — the
Expand Down Expand Up @@ -43,7 +43,7 @@ RG="welcome-emailer-rg"
LOCATION="eastus"
```

## Step 2: Create connector gateway
## Step 2: Create connector

```powershell
$gwBody = @{ location = $LOCATION; identity = @{ type = "SystemAssigned" } } | ConvertTo-Json -Compress
Expand Down
Loading