Skip to content

Latest commit

 

History

History
245 lines (208 loc) · 5.32 KB

File metadata and controls

245 lines (208 loc) · 5.32 KB

FlowStudio MCP — Trigger Types

Copy-paste trigger definitions for Power Automate flow definitions.


Recurrence

Run on a schedule.

"Recurrence": {
  "type": "Recurrence",
  "recurrence": {
    "frequency": "Day",
    "interval": 1,
    "startTime": "2026-01-01T08:00:00Z",
    "timeZone": "AUS Eastern Standard Time"
  }
}

Weekly on specific days:

"Recurrence": {
  "type": "Recurrence",
  "recurrence": {
    "frequency": "Week",
    "interval": 1,
    "schedule": {
      "weekDays": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
    },
    "startTime": "2026-01-05T09:00:00Z",
    "timeZone": "AUS Eastern Standard Time"
  }
}

Common timeZone values:

  • "AUS Eastern Standard Time" — Sydney/Melbourne (UTC+10/+11)
  • "UTC" — Universal time
  • "E. Australia Standard Time" — Brisbane (UTC+10 no DST)
  • "New Zealand Standard Time" — Auckland (UTC+12/+13)
  • "Pacific Standard Time" — Los Angeles (UTC-8/-7)
  • "GMT Standard Time" — London (UTC+0/+1)

Manual (HTTP Request / Power Apps)

Receive an HTTP POST with a JSON body.

"manual": {
  "type": "Request",
  "kind": "Http",
  "inputs": {
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "value": { "type": "integer" }
      },
      "required": ["name"]
    }
  }
}

Access values: @triggerBody()?['name']
Trigger URL available after saving: @listCallbackUrl()

No-Schema Variant (Accept Arbitrary JSON)

When the incoming payload structure is unknown or varies, omit the schema to accept any valid JSON body without validation:

"manual": {
  "type": "Request",
  "kind": "Http",
  "inputs": {
    "schema": {}
  }
}

Access any field dynamically: @triggerBody()?['anyField']

Use this for external webhooks (Stripe, GitHub, Employment Hero, etc.) where the payload shape may change or is not fully documented. The flow accepts any JSON without returning 400 for unexpected properties.


Manual (Copilot Studio Skills)

Use the Skills trigger when the flow is meant to be called by a Copilot Studio agent tool. Keep the trigger schema explicit so the agent receives predictable input names and types.

"manual": {
  "type": "Request",
  "kind": "Skills",
  "inputs": {
    "schema": {
      "type": "object",
      "properties": {
        "itemId": { "type": "string" },
        "notes": { "type": "string" }
      },
      "required": ["itemId"]
    }
  },
  "metadata": {
    "operationMetadataId": "<stable-guid>"
  }
}

After deploying a production Skills-triggered flow, call add_live_flow_to_solution with the target solutionId; Copilot Studio agent tool discovery expects the flow to be solution-aware. For MCP-driven testing, use a temporary HTTP twin with the same actions and payload shape, then restore the Skills trigger after the actions are verified.


Automated (SharePoint Item Created)

"When_an_item_is_created": {
  "type": "OpenApiConnectionNotification",
  "inputs": {
    "host": {
      "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
      "connectionName": "<connectionName>",
      "operationId": "OnNewItem"
    },
    "parameters": {
      "dataset": "https://mytenant.sharepoint.com/sites/mysite",
      "table": "MyList"
    },
    "subscribe": {
      "body": { "notificationUrl": "@listCallbackUrl()" },
      "queries": {
        "dataset": "https://mytenant.sharepoint.com/sites/mysite",
        "table": "MyList"
      }
    }
  }
}

Access trigger data: @triggerBody()?['ID'], @triggerBody()?['Title'], etc.


Automated (SharePoint Item Modified)

"When_an_existing_item_is_modified": {
  "type": "OpenApiConnectionNotification",
  "inputs": {
    "host": {
      "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
      "connectionName": "<connectionName>",
      "operationId": "OnUpdatedItem"
    },
    "parameters": {
      "dataset": "https://mytenant.sharepoint.com/sites/mysite",
      "table": "MyList"
    },
    "subscribe": {
      "body": { "notificationUrl": "@listCallbackUrl()" },
      "queries": {
        "dataset": "https://mytenant.sharepoint.com/sites/mysite",
        "table": "MyList"
      }
    }
  }
}

Automated (Outlook: When New Email Arrives)

"When_a_new_email_arrives": {
  "type": "OpenApiConnectionNotification",
  "inputs": {
    "host": {
      "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365",
      "connectionName": "<connectionName>",
      "operationId": "OnNewEmail"
    },
    "parameters": {
      "folderId": "Inbox",
      "to": "monitored@contoso.com",
      "isHTML": true
    },
    "subscribe": {
      "body": { "notificationUrl": "@listCallbackUrl()" }
    }
  }
}

Child Flow (Called by Another Flow)

"manual": {
  "type": "Request",
  "kind": "Button",
  "inputs": {
    "schema": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": { "type": "object" }
        }
      }
    }
  }
}

Access parent-supplied data: @triggerBody()?['items']

To return data to the parent, add a Response action:

"Respond_to_Parent": {
  "type": "Response",
  "runAfter": { "Compose_Result": ["Succeeded"] },
  "inputs": {
    "statusCode": 200,
    "body": "@outputs('Compose_Result')"
  }
}