Skill 167 · Flowstudio Power Automate MCP
Subchapter 167.4
references/tool-reference.mdMarkdown20 KBView on GitHub
Response shapes and behavioral notes for the FlowStudio Power Automate MCP server.
For tool names and parameters: Prefer
list_skillsand . They return focused, up-to-date schemas without loading every MCP tool at once. Use only as a low-level fallback when the meta-tools are not available. This document covers what tool schemas do NOT tell you: and discovered through real usage.
tool_searchtools/list| Priority | Source | Covers |
|---|---|---|
| 1 | Real API response | Always trust what the server actually returns |
| 2 | list_skills / tool_search | Tool names, parameter names, types, required flags |
| 3 | This document | Response shapes, behavioral notes, gotchas |
If this document disagrees with
tool_search,tools/list, or 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",
"environment": "Default-26e65220-...",
"createdBy": "User Name",
"authenticatedUser": "user@contoso.com",
"overallStatus": "Connected",
"statuses": [{"status": "Connected"}],
"createdTime": "2024-03-12T21:23:55.206815Z",
"connectionReferenceTemplate": {
"connectionName": "shared-office365-9f9d2c8e-55f1-49c9-9f9c-1c45d1fbbdce",
"source": "Invoker",
"id": "/providers/Microsoft.PowerApps/apis/shared_office365"
},
"hostTemplate": {
"connectionName": "shared_office365"
}
}
],
"totalCount": 56,
"error": null
}Key field:
idis theconnectionNamevalue used inconnectionReferences.Key field:
connectorNamemaps to apiId:"/providers/Microsoft.PowerApps/apis/" + connectorNameFilter by status: prefer
overallStatus == "Connected"when present; otherwise checkstatuses[0].status == "Connected".
environmentNameis required — the platform cannot list connections across environments (omitting it answers 400 MissingEnvironmentFilter). Get one fromlist_live_environments.Pass
search=<connector or account>to narrow output and receiveconnectionReferenceTemplateplushostTemplatevalues that can be copied directly intoupdate_live_flow.
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,
"nextLink": null,
"error": null
}Access via
result["flows"].idis a plain UUID — use directly asflowName.
modeindicates the access scope used ("owner"or"admin").Parameters added in newer server versions:
search: filter by display name server-side.mode:ownerfor flows owned by the MCP identity;adminfor all flows visible to an admin account.timeoutSeconds: return partial results withnextLinkinstead of waiting on very large environments.continuationUrl: pass the previousnextLinkto continue the same query.
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.Required fields can vary by server version. Use
tool_searchwithselect:update_live_flowbefore creating or patching a flow; if a description is required, include either the new description or the existing one fromget_live_flow.The flow description is part of the workflow definition (
definition.description), not a top-level tool argument in current schemas.
Migrates a non-solution flow into a solution. Returns error if already in a solution.
Use this after creating a Copilot Studio Skills-triggered flow that must be
discoverable as an agent tool. Pass solutionId for the target solution. If the
server supports omitting solutionId, it uses the environment’s default solution;
prefer an explicit unmanaged solution for production ALM.
This tool changes solution membership only. It does not validate the trigger schema, publish a Copilot Studio agent, or prove that the flow is callable by the agent.
Describes a connector/API and its operations. Use it before creating connector actions instead of guessing operation JSON.
Common modes:
| Call shape | Use |
|---|---|
search="send email" without connectorName | Search operations across connectors |
connectorName="shared_sharepointonline" | Compact operation catalog for one connector |
operationId="GetItems" | Expanded schema for one operation |
variant="flowbot_chat" | Authored example for one operation variant |
The operation detail can include:
hint: authored guidance from the connector hints table.exampleDefinition: copy-ready action/trigger shape when available.nextTool=get_live_dynamic_options or
nextTool=get_live_dynamic_properties.Resolves live dropdown/list options for connector parameters. Use this for
IDs selected from lists, such as SharePoint sites/lists, Teams teams/channels,
or other x-ms-dynamic-list / x-ms-dynamic-values parameters.
Pass the dynamicMetadata object returned by describe_live_connector, the
connection id from list_live_connections, and any already-resolved dependent
parameters.
Resolves live schema/field properties for connector parameters. Use this for dynamic field sets such as SharePoint list item columns after the site and list are known.
Useful parameters:
parameters: dependent values, for example { "dataset": "<site-url>", "table": "<list-id>" }.propertyName: request one field after inspecting the compact response.includeRaw: include raw connector schema only when needed; it can be large.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 top-level actions in the run. Provide it for a specific action. If that action runs inside a foreach, the tool can return every repetition of that action across iterations; passiterationIndexto pin to one zero-based iteration.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.
Deprecated. Prefer get_live_flow and inspect the Request trigger’s
inputs.schema plus any Response actions directly from the definition.
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 schemasThe request body schema is in
requestSchema(nottriggerSchema).
Deprecated. Prefer trigger_live_flow when you need to run a flow; it fetches the
callback URL internally for HTTP triggers and uses the connector runtime for
Button and PowerApps triggers, which have no callback URL.
Returns the signed callback URL for HTTP-triggered flows. Response includes
flowKey, triggerName, triggerType, triggerKind, triggerMethod, triggerUrl.
Response keys: flowKey, triggerName, triggerKind, invocation, triggerUrl,
requiresAadAuth, authType, responseStatus, responseBody, runName, and
warning when a required trigger input was not supplied.
Works for
Requesttriggers (HTTP request, Button, PowerApps) and for scheduled (Recurrence) flows. A scheduled flow runs immediately, like the portal’s “Run flow” button, and takes nobody— one is refused. Automated connector triggers only fire from their source event and return an error.HTTP triggers go through the signed callback URL (
invocation: callbackUrl). Button and PowerApps triggers have no callback URL; with abodythey run through the Power Platform connector runtime (connectorFlowTokenorconnectorApihubToken), which is the only route that delivers the inputs. With no body they use the cheaper direct run (directRun).
runNameis returned only for connector-runtime runs. Otherwise look the run up withget_live_flow_runs.Power Automate does not enforce a trigger’s
requiredlist. A missing input still starts the run with a null value;warningnames the missing keys and the body shape to retry with.Browser-extension keys cannot reach the connector runtime, so Button and PowerApps triggers run only with an empty body over that key type. The error lists the alternatives (resubmit a past run, default the inputs inside the flow with
coalesce(), or use a standard key).
responseStatus+responseBodycontain the flow’s Response action output. AAD-authenticated triggers are handled automatically.Content type:
bodyis sent asapplication/json, sotriggerBody()and the trigger schema see the object you passed. Verified 2026-08-27 on server 1.2.43 against Button, PowerAppV2, and Skills triggers withrequiredschemas.
Start or stop a Power Automate flow in any environment you have access to. 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 tool schemas cannot tell you.
actionName is optional: omit to get top-level actions, provide to get one
action. For actions inside foreach loops, a named action may return multiple
repetitions; use iterationIndex to pin to one iteration.tool_search
(select:update_live_flow) before create/update. If description is required,
preserve the existing description when patching.error key is always present in response — null means success.
Do NOT check if "error" in result; check result.get("error") is not None.created = new flow GUID (string). On update, created = false.set_live_flow_state to start/stop a flow.body. Automated connector triggers error.body. A warning in the result means a required input
was missing and the run started with it null.top defaults to 30 with automatic pagination for higher values.name, not runName. Use this value as runName in other tools.body/recipient = "user@domain.com;" (string with trailing semicolon).body/recipient = {"groupId": "...", "channelId": "..."} (object).poster: "Flow bot" for Workflows bot identity, "User" for user identity.environmentName is required; the platform cannot list connections across
environments. top is applied after search and the result carries
truncated + matchedCount when the cap drops matches.search=<connector/account> to get smaller output and paste-ready
connectionReferenceTemplate / hostTemplate values.id is the value you need for connectionName in connectionReferences.connectorName maps to apiId: "/providers/Microsoft.PowerApps/apis/" + connectorName.This file
Nearby