Response shapes and behavioral notes for the FlowStudio Power Automate MCP server.
For tool names and parameters: Always call
tools/liston the server. It returns the authoritative, up-to-date schema for every tool. This document covers whattools/listdoes NOT tell you: response shapes and non-obvious behaviors discovered through real usage.
| Priority | Source | Covers |
|---|---|---|
| 1 | Real API response | Always trust what the server actually returns |
| 2 | tools/list |
Tool names, parameter names, types, required flags |
| 3 | This document | Response shapes, behavioral notes, gotchas |
If this document disagrees with
tools/listor real API behavior, the API wins. Update this document accordingly.
Response: direct array of environments.
[
{
"id": "Default-26e65220-5561-46ef-9783-ce5f20489241",
"displayName": "FlowStudio (default)",
"sku": "Production",
"location": "australia",
"state": "Enabled",
"isDefault": true,
"isAdmin": true,
"isMember": true,
"createdTime": "2023-08-18T00:41:05Z"
}
]Use the
idvalue asenvironmentNamein all other tools.
Same shape as list_live_environments but read from cache (faster).
Response: wrapper object with connections array.
{
"connections": [
{
"id": "shared-office365-9f9d2c8e-55f1-49c9-9f9c-1c45d1fbbdce",
"displayName": "user@contoso.com",
"connectorName": "shared_office365",
"createdBy": "User Name",
"statuses": [{"status": "Connected"}],
"createdTime": "2024-03-12T21:23:55.206815Z"
}
],
"totalCount": 56,
"error": null
}Key field:
idis theconnectionNamevalue used inconnectionReferences.Key field:
connectorNamemaps to apiId:"/providers/Microsoft.PowerApps/apis/" + connectorNameFilter by status:
statuses[0].status == "Connected".Note:
tools/listmarksenvironmentNameas optional, but the server returnsMissingEnvironmentFilter(HTTP 400) if you omit it. Always passenvironmentName.
Same connection data from cache.
Response: wrapper object with flows array.
{
"mode": "owner",
"flows": [
{
"id": "0757041a-8ef2-cf74-ef06-06881916f371",
"displayName": "My Flow",
"state": "Started",
"triggerType": "Request",
"triggerKind": "Http",
"createdTime": "2023-08-18T01:18:17Z",
"lastModifiedTime": "2023-08-18T12:47:42Z",
"owners": "<aad-object-id>",
"definitionAvailable": true
}
],
"totalCount": 100,
"error": null
}Access via
result["flows"].idis a plain UUID --- use directly asflowName.
modeindicates the access scope used ("owner"or"admin").
Response: direct array (no wrapper).
[
{
"id": "3991358a-f603-e49d-b1ed-a9e4f72e2dcb.0757041a-8ef2-cf74-ef06-06881916f371",
"displayName": "Admin | Sync Template v3 (Solutions)",
"state": "Started",
"triggerType": "OpenApiConnectionWebhook",
"environmentName": "3991358a-f603-e49d-b1ed-a9e4f72e2dcb",
"runPeriodTotal": 100,
"createdTime": "2023-08-18T01:18:17Z",
"lastModifiedTime": "2023-08-18T12:47:42Z"
}
]
idformat:<environmentId>.<flowId>--- split on the first.to extract the flow UUID:flow_id = item["id"].split(".", 1)[1]
Response: single flow metadata from cache (selected fields).
{
"id": "<environmentId>.<flowId>",
"displayName": "My Flow",
"state": "Started",
"triggerType": "Recurrence",
"runPeriodTotal": 100,
"runPeriodFailRate": 0.1,
"runPeriodSuccessRate": 0.9,
"runPeriodFails": 10,
"runPeriodSuccess": 90,
"runPeriodDurationAverage": 29410.8,
"runPeriodDurationMax": 158900.0,
"runError": "{\"code\": \"EACCES\", ...}",
"description": "Flow description",
"tier": "Premium",
"complexity": "{...}",
"actions": 42,
"connections": ["sharepointonline", "office365"],
"owners": ["user@contoso.com"],
"createdBy": "user@contoso.com"
}
runPeriodDurationAverage/runPeriodDurationMaxare in milliseconds (divide by 1000).runErroris a JSON string --- parse withjson.loads().
Response: full flow definition from PA API.
{
"name": "<flow-guid>",
"properties": {
"displayName": "My Flow",
"state": "Started",
"definition": {
"triggers": { "..." },
"actions": { "..." },
"parameters": { "..." }
},
"connectionReferences": { "..." }
}
}Create mode: Omit flowName --- creates a new flow. definition and displayName required.
Update mode: Provide flowName --- PATCHes existing flow.
Response:
{
"created": false,
"flowKey": "<environmentId>.<flowId>",
"updated": ["definition", "connectionReferences"],
"displayName": "My Flow",
"state": "Started",
"definition": { "...full definition..." },
"error": null
}
erroris always present but may benull. Checkresult.get("error") is not None.On create:
createdis the new flow GUID (string). On update:createdisfalse.
descriptionis always required (create and update).
Migrates a non-solution flow into a solution. Returns error if already in a solution.
Response: direct array of runs (newest first).
[{
"name": "<run-id>",
"status": "Succeeded|Failed|Running|Cancelled",
"startTime": "2026-02-25T06:13:38Z",
"endTime": "2026-02-25T06:14:02Z",
"triggerName": "Recurrence",
"error": null
}]
topdefaults to 30 and auto-paginates for higher values. Settop: 300for 24-hour coverage on flows running every 5 minutes.Run ID field is
name(notrunName). Use this value as therunNameparameter in other tools.
Response: structured error breakdown for a failed run.
{
"runName": "08584296068667933411438594643CU15",
"failedActions": [
{
"actionName": "Apply_to_each_prepare_workers",
"status": "Failed",
"error": {"code": "ActionFailed", "message": "An action failed."},
"code": "ActionFailed",
"startTime": "2026-02-25T06:13:52Z",
"endTime": "2026-02-25T06:15:24Z"
},
{
"actionName": "HTTP_find_AD_User_by_Name",
"status": "Failed",
"code": "NotSpecified",
"startTime": "2026-02-25T06:14:01Z",
"endTime": "2026-02-25T06:14:05Z"
}
],
"allActions": [
{"actionName": "Apply_to_each", "status": "Skipped"},
{"actionName": "Compose_WeekEnd", "status": "Succeeded"},
{"actionName": "HTTP_find_AD_User_by_Name", "status": "Failed"}
]
}
failedActionsis ordered outer-to-inner --- the last entry is the root cause. UsefailedActions[-1]["actionName"]as the starting point for diagnosis.
Response: array of action detail objects.
[
{
"actionName": "Compose_WeekEnd_now",
"status": "Succeeded",
"startTime": "2026-02-25T06:13:52Z",
"endTime": "2026-02-25T06:13:52Z",
"error": null,
"inputs": "Mon, 25 Feb 2026 06:13:52 GMT",
"outputs": "Mon, 25 Feb 2026 06:13:52 GMT"
}
]
actionNameis optional: omit it to return ALL actions in the run; provide it to return a single-element array for that action only.Outputs can be very large (50 MB+) for bulk-data actions. Use 120s+ timeout.
Response: { flowKey, resubmitted: true, runName, triggerName }
Cancels a Running flow run.
Do NOT cancel runs waiting for an adaptive card response --- status
Runningis normal while a Teams card is awaiting user input.
Response keys:
flowKey - Flow GUID
displayName - Flow display name
triggerName - Trigger action name (e.g. "manual")
triggerType - Trigger type (e.g. "Request")
triggerKind - Trigger kind (e.g. "Http")
requestMethod - HTTP method (e.g. "POST")
relativePath - Relative path configured on the trigger (if any)
requestSchema - JSON schema the trigger expects as POST body
requestHeaders - Headers the trigger expects
responseSchemas - Array of JSON schemas defined on Response action(s)
responseSchemaCount - Number of Response actions that define output schemas
The request body schema is in
requestSchema(nottriggerSchema).
Returns the signed callback URL for HTTP-triggered flows. Response includes
flowKey, triggerName, triggerType, triggerKind, triggerMethod, triggerUrl.
Response keys: flowKey, triggerName, triggerUrl, requiresAadAuth, authType,
responseStatus, responseBody.
Only works for
Request(HTTP) triggers. Returns an error for Recurrence and other trigger types:"only HTTP Request triggers can be invoked via this tool".Button-kind triggers returnListCallbackUrlOperationBlocked.
responseStatus+responseBodycontain the flow's Response action output. AAD-authenticated triggers are handled automatically.Content-type note: The body is sent as
application/octet-stream(raw), notapplication/json. Flows with a trigger schema that hasrequiredfields will reject the request withInvalidRequestContent(400) because PA validatesContent-Typebefore parsing against the schema. Flows without a schema, or flows designed to accept raw input (e.g. Baker-pattern flows that parse the body internally), will work fine. The flow receives the JSON as base64-encoded$contentwith$content-type: application/octet-stream.
Start or stop a Power Automate flow via the live PA API. Does not require a Power Clarity workspace — works for any flow the impersonated account can access. Reads the current state first and only issues the start/stop call if a change is actually needed.
Parameters: environmentName, flowName, state ("Started" | "Stopped") — all required.
Response:
{
"flowName": "6321ab25-7eb0-42df-b977-e97d34bcb272",
"environmentName": "Default-26e65220-...",
"requestedState": "Started",
"actualState": "Started"
}Use this tool — not
update_live_flow— to start or stop a flow.update_live_flowonly changes displayName/definition; the PA API ignores state passed through that endpoint.
Start or stop a flow via the live PA API and persist the updated state back
to the Power Clarity cache. Same parameters as set_live_flow_state but requires
a Power Clarity workspace.
Response (different shape from set_live_flow_state):
{
"flowKey": "<environmentId>.<flowId>",
"requestedState": "Stopped",
"currentState": "Stopped",
"flow": { /* full gFlows record, same shape as get_store_flow */ }
}Prefer
set_live_flow_statewhen you only need to toggle state — it's simpler and has no subscription requirement.Use
set_store_flow_statewhen you need the cache updated immediately (without waiting for the next daily scan) AND want the full updated governance record back in the same call — useful for workflows that stop a flow and immediately tag or inspect it.
Response: aggregated run statistics.
{
"totalRuns": 100,
"failRuns": 10,
"failRate": 0.1,
"averageDurationSeconds": 29.4,
"maxDurationSeconds": 158.9,
"firstFailRunRemediation": "<hint or null>"
}Cached run history for the last N days with duration and remediation hints.
Cached failed-only runs with failed action names and remediation hints.
Trigger URL from cache (instant, no PA API call).
Update governance metadata (description, tags, monitor flag, notification rules, business impact).
Maker (citizen developer) discovery and detail.
List all Power Apps canvas apps from the cache.
Non-obvious behaviors discovered through real API usage. These are things
tools/list cannot tell you.
actionNameis optional: omit to get all actions, provide to get one. This changes the response from N elements to 1 element (still an array).- Outputs can be 50 MB+ for bulk-data actions --- always use 120s+ timeout.
descriptionis always required (create and update modes).errorkey is always present in response ---nullmeans success. Do NOT checkif "error" in result; checkresult.get("error") is not None.- On create,
created= new flow GUID (string). On update,created=false. - Cannot change flow state. Only updates displayName, definition, and
connectionReferences. Use
set_live_flow_stateto start/stop a flow.
- Only works for HTTP Request triggers. Returns error for Recurrence, connector, and other trigger types.
- AAD-authenticated triggers are handled automatically (impersonated Bearer token).
topdefaults to 30 with automatic pagination for higher values.- Run ID field is
name, notrunName. Use this value asrunNamein other tools. - Runs are returned newest-first.
- "Chat with Flow bot":
body/recipient="user@domain.com;"(string with trailing semicolon). - "Channel":
body/recipient={"groupId": "...", "channelId": "..."}(object). poster:"Flow bot"for Workflows bot identity,"User"for user identity.
idis the value you need forconnectionNameinconnectionReferences.connectorNamemaps to apiId:"/providers/Microsoft.PowerApps/apis/" + connectorName.