22name : flowstudio-power-automate-build
33description : >-
44 Build, scaffold, and deploy Power Automate cloud flows using the FlowStudio
5- MCP server. Load this skill when asked to: create a flow, build a new flow,
5+ MCP server. Your agent constructs flow definitions, wires connections, deploys,
6+ and tests — all via MCP without opening the portal.
7+ Load this skill when asked to: create a flow, build a new flow,
68 deploy a flow definition, scaffold a Power Automate workflow, construct a flow
79 JSON, update an existing flow's actions, patch a flow definition, add actions
810 to a flow, wire up connections, or generate a workflow definition from scratch.
911 Requires a FlowStudio MCP subscription — see https://mcp.flowstudio.app
12+ metadata :
13+ openclaw :
14+ requires :
15+ env :
16+ - FLOWSTUDIO_MCP_TOKEN
17+ primaryEnv : FLOWSTUDIO_MCP_TOKEN
18+ homepage : https://mcp.flowstudio.app
1019---
1120
1221# Build & Deploy Power Automate Flows with FlowStudio MCP
@@ -15,7 +24,7 @@ Step-by-step guide for constructing and deploying Power Automate cloud flows
1524programmatically through the FlowStudio MCP server.
1625
1726** Prerequisite** : A FlowStudio MCP server must be reachable with a valid JWT.
18- See the ` flowstudio- power-automate-mcp` skill for connection setup.
27+ See the ` power-automate-mcp ` skill for connection setup.
1928Subscribe at https://mcp.flowstudio.app
2029
2130---
@@ -278,6 +287,8 @@ check = mcp("get_live_flow", environmentName=ENV, flowName=FLOW_ID)
278287
279288# Confirm state
280289print (" State:" , check[" properties" ][" state" ]) # Should be "Started"
290+ # If state is "Stopped", use set_live_flow_state — NOT update_live_flow
291+ # mcp("set_live_flow_state", environmentName=ENV, flowName=FLOW_ID, state="Started")
281292
282293# Confirm the action we added is there
283294acts = check[" properties" ][" definition" ][" actions" ]
@@ -294,38 +305,45 @@ print("Actions:", list(acts.keys()))
294305> flow will do and wait for explicit approval before calling `trigger_live_flow`
295306> or `resubmit_live_flow_run` .
296307
297- # ## Updated flows (have prior runs)
308+ # ## Updated flows (have prior runs) — ANY trigger type
298309
299- The fastest path — resubmit the most recent run:
310+ > ** Use `resubmit_live_flow_run` first.** It works for EVERY trigger type —
311+ > Recurrence, SharePoint, connector webhooks, Button, and HTTP . It replays
312+ > the original trigger payload. Do NOT ask the user to manually trigger the
313+ > flow or wait for the next scheduled run.
300314
301315```python
302316runs = mcp(" get_live_flow_runs" , environmentName = ENV , flowName = FLOW_ID , top = 1 )
303317if runs:
318+ # Works for Recurrence, SharePoint, connector triggers — not just HTTP
304319 result = mcp(" resubmit_live_flow_run" ,
305320 environmentName = ENV , flowName = FLOW_ID , runName = runs[0 ][" name" ])
306- print (result)
321+ print (result) # {"resubmitted": true, "triggerName": "..."}
307322```
308323
309- # ## Flows already using an HTTP trigger
324+ # ## HTTP-triggered flows — custom test payload
310325
311- Fire directly with a test payload:
326+ Only use `trigger_live_flow` when you need to send a ** different** payload
327+ than the original run. For verifying a fix, `resubmit_live_flow_run` is
328+ better because it uses the exact data that caused the failure.
312329
313330```python
314331schema = mcp(" get_live_flow_http_schema" ,
315332 environmentName = ENV , flowName = FLOW_ID )
316- print (" Expected body:" , schema.get(" triggerSchema " ))
333+ print (" Expected body:" , schema.get(" requestSchema " ))
317334
318335result = mcp(" trigger_live_flow" ,
319336 environmentName = ENV , flowName = FLOW_ID ,
320337 body = {" name" : " Test" , " value" : 1 })
321- print (f " Status: { result[' status ' ]} " )
338+ print (f " Status: { result[' responseStatus ' ]} " )
322339```
323340
324341# ## Brand-new non-HTTP flows (Recurrence, connector triggers, etc.)
325342
326- A brand- new Recurrence or connector- triggered flow has no runs to resubmit
327- and no HTTP endpoint to call. ** Deploy with a temporary HTTP trigger first,
328- test the actions, then swap to the production trigger.**
343+ A brand- new Recurrence or connector- triggered flow has ** no prior runs** to
344+ resubmit and no HTTP endpoint to call. This is the ONLY scenario where you
345+ need the temporary HTTP trigger approach below. ** Deploy with a temporary
346+ HTTP trigger first, test the actions, then swap to the production trigger.**
329347
330348# ### 7a — Save the real trigger, deploy with a temporary HTTP trigger
331349
@@ -428,7 +446,7 @@ else:
428446| `union(old_data, new_data)` | Old values override new (first- wins) | Use `union(new_data, old_data)` |
429447| `split()` on potentially- null string | `InvalidTemplate` crash | Wrap with `coalesce(field, ' ' )` |
430448| Checking `result[" error" ]` exists | Always present; true error is `!= null` | Use `result.get(" error" ) is not None ` |
431- | Flow deployed but state is " Stopped" | Flow won' t run on schedule | Check connection auth; re-enable |
449+ | Flow deployed but state is " Stopped" | Flow won' t run on schedule | Call `set_live_flow_state` with `state: "Started"` — do **not** use `update_live_flow` for state changes |
432450| Teams " Chat with Flow bot" recipient as object | 400 `GraphUserDetailNotFound` | Use plain string with trailing semicolon (see below) |
433451
434452# ## Teams `PostMessageToConversation` — Recipient Formats
@@ -456,5 +474,5 @@ The `body/recipient` parameter format depends on the `location` value:
456474
457475# # Related Skills
458476
459- - `flowstudio - power- automate- mcp` — Core connection setup and tool reference
460- - `flowstudio - power- automate- debug` — Debug failing flows after deployment
477+ - `power- automate- mcp` — Core connection setup and tool reference
478+ - `power- automate- debug` — Debug failing flows after deployment
0 commit comments