chore: publish from main

This commit is contained in:
github-actions[bot]
2026-09-07 02:41:22 +00:00
parent a6f5d48060
commit 844bb61d15
13 changed files with 96 additions and 98 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
# FlowStudio Power Automate Plugin
Give your AI agent the same visibility you have in the Power Automate portal. The Graph API only returns top-level run status — agents can't see action inputs, loop iterations, nested failures, or who owns a flow. Flow Studio MCP exposes all of it.
Give your AI agent the same visibility you have in the Power Automate portal. The Graph API only returns top-level run status — agents can't see action inputs, loop iterations, nested failures, or who owns a flow. FlowStudio MCP exposes all of it.
This plugin includes five skills covering the full lifecycle: connect, debug, build, monitor, and govern Power Automate cloud flows.
@@ -16,7 +16,7 @@ Requires a [FlowStudio MCP](https://mcp.flowstudio.app) subscription.
| Flow health and failure rates | Nothing |
| Who built a flow, what connectors it uses | Nothing |
Flow Studio MCP fills these gaps.
FlowStudio MCP fills these gaps.
## Installation
@@ -411,50 +411,43 @@ print(f"Status: {result['responseStatus']}, via: {result['invocation']}")
print(result.get("warning")) # set when a required input was missing: the run still ran, with null
```
### Brand-new non-HTTP flows (Recurrence, connector triggers, etc.)
### Brand-new non-HTTP flows
A brand-new Recurrence or connector-triggered flow has **no prior runs** to
resubmit and no HTTP endpoint to call. This is the ONLY scenario where you
need the temporary HTTP trigger approach below. **Deploy with a temporary
HTTP trigger first, test the actions, then swap to the production trigger.**
A brand-new **Recurrence** flow needs no workaround: deploy it, then run it
immediately with `trigger_live_flow` and no `body` — same as the portal's
"Run flow" button. A body is refused; scheduled triggers take no inputs.
Compact recipe:
A brand-new **connector-triggered** flow (SharePoint, webhooks) has no prior
runs and cannot fire without a real source event. Deploy with a temporary
HTTP trigger, test the actions, then swap to the production trigger:
```python
production_trigger = definition["triggers"]
definition["triggers"] = {
"manual": {"type": "Request", "kind": "Http", "inputs": {"schema": {}}}
}
result = mcp("update_live_flow",
environmentName=ENV,
result = mcp("update_live_flow", environmentName=ENV,
flowName=FLOW_ID, # omit if creating new
definition=definition,
connectionReferences=connection_references,
definition=definition, connectionReferences=connection_references,
displayName="Overdue Invoice Notifications")
FLOW_ID = FLOW_ID or result["created"]
FLOW_ID = FLOW_ID or result["flowName"]
test = mcp("trigger_live_flow", environmentName=ENV, flowName=FLOW_ID,
body={"sample": "payload"})
mcp("trigger_live_flow", environmentName=ENV, flowName=FLOW_ID,
body={"sample": "payload"})
runs = mcp("get_live_flow_runs", environmentName=ENV, flowName=FLOW_ID, top=1)
if runs[0]["status"] == "Failed":
err = mcp("get_live_flow_run_error",
environmentName=ENV, flowName=FLOW_ID, runName=runs[0]["name"])
raise Exception(err["failedActions"][-1])
definition["triggers"] = production_trigger
mcp("update_live_flow",
environmentName=ENV,
flowName=FLOW_ID,
definition=definition,
connectionReferences=connection_references)
mcp("update_live_flow", environmentName=ENV, flowName=FLOW_ID,
definition=definition, connectionReferences=connection_references)
```
The trigger is only the entry point; testing through HTTP still exercises the
same actions. If actions use `triggerBody()` or `triggerOutputs()`, pass a
representative `trigger_live_flow.body` shaped like the production trigger
payload.
representative `body` shaped like the production trigger payload.
---
@@ -409,10 +409,10 @@ print(new_runs[0]["status"]) # Succeeded = done
| Scenario | Use | Why |
|---|---|---|
| **Testing a fix** on any flow | `resubmit_live_flow_run` | Replays the exact trigger payload that caused the failure — best way to verify |
| Recurrence / scheduled flow | `resubmit_live_flow_run` | Cannot be triggered on demand any other way |
| Recurrence / scheduled flow | `trigger_live_flow` (no `body`) | Runs it now, like the portal's "Run flow" button; resubmit replays a past run's data |
| SharePoint / connector trigger | `resubmit_live_flow_run` | Cannot be triggered without creating a real SP item |
| HTTP, Button, or PowerApps trigger with **custom** test payload | `trigger_live_flow` | When you need to send different data than the original run |
| Brand-new flow, never run | `trigger_live_flow` (HTTP, Button, PowerApps) | No prior run exists to resubmit |
| Brand-new flow, never run | `trigger_live_flow` | No prior run exists to resubmit |
### Testing HTTP, Button, and PowerApps flows with custom payloads
@@ -445,8 +445,10 @@ if result.get("warning"):
```
> `trigger_live_flow` handles AAD-authenticated triggers automatically.
> Works for `Request` triggers only: HTTP request, Button, and PowerApps.
> Scheduled and connector triggers cannot be run this way.
> Works for `Request` triggers (HTTP request, Button, PowerApps) and for
> scheduled (Recurrence) flows, which it runs immediately — with no `body`,
> since a scheduled trigger takes no inputs (a body is refused). Automated
> connector triggers only fire from their source event.
>
> Power Automate does not enforce a trigger's `required` inputs. If you leave
> one out the run still starts, with that input null, and the result carries a
@@ -64,18 +64,18 @@ If a deleted flow has `monitor=true`, suggest disabling monitoring
## The Write Tool: `update_store_flow`
`update_store_flow` writes governance metadata to the **Flow Studio cache
`update_store_flow` writes governance metadata to the **FlowStudio cache
only** — it does NOT modify the flow in Power Automate. These fields are
not visible via `get_live_flow` or the PA portal. They exist only in the
Flow Studio store and are used by Flow Studio's scanning pipeline and
FlowStudio store and are used by FlowStudio's scanning pipeline and
notification rules.
This means:
- `ownerTeam` / `supportEmail` — sets who Flow Studio considers the
- `ownerTeam` / `supportEmail` — sets who FlowStudio considers the
governance contact. Does NOT change the actual PA flow owner.
- `rule_notify_email` — sets who receives Flow Studio failure/missing-run
- `rule_notify_email` — sets who receives FlowStudio failure/missing-run
notifications. Does NOT change Microsoft's built-in flow failure alerts.
- `monitor` / `critical` / `businessImpact` — Flow Studio classification
- `monitor` / `critical` / `businessImpact` — FlowStudio classification
only. Power Automate has no equivalent fields.
Merge semantics — only fields you provide are updated. Returns the full
@@ -218,7 +218,7 @@ store tags, so read/append/write. Avoid overriding computed `tier` unless asked.
### 7. Maker Offboarding
When an employee leaves, identify their flows and apps, and reassign
Flow Studio governance contacts and notification recipients.
FlowStudio governance contacts and notification recipients.
```
1. get_store_maker(makerKey="<departing-user-aad-oid>")
@@ -234,7 +234,7 @@ Flow Studio governance contacts and notification recipients.
apps needing manual reassignment
```
This changes Flow Studio governance contacts, not actual PA ownership. Power
This changes FlowStudio governance contacts, not actual PA ownership. Power
Apps ownership changes are manual/admin-center work.
### 8. Security Review
@@ -26,6 +26,9 @@ skills that all build on this one.
> compatible Power Automate MCP server). You will need:
> - MCP endpoint: `https://mcp.flowstudio.app/mcp` (same for all subscribers)
> - API key / JWT token (`x-api-key` header — NOT Bearer)
> - In ChatGPT or claude.ai there is no key: add `https://mcp.flowstudio.app/mcp/oauth`
> as a connector and sign in with Microsoft — see the
> [ChatGPT walkthrough](https://learn.flowstudio.app/chatgpt-power-automate)
> - Power Platform environment name (e.g. `Default-<tenant-guid>`)
---
@@ -93,9 +93,9 @@ Response: wrapper object with `connections` array.
> Filter by status: prefer `overallStatus == "Connected"` when present; otherwise
> check `statuses[0].status == "Connected"`.
>
> For build workflows, pass `environmentName` to avoid using a connection from
> the wrong environment. Omit it only when intentionally inventorying connections
> across all environments.
> `environmentName` is required — the platform cannot list connections across
> environments (omitting it answers 400 MissingEnvironmentFilter). Get one from
> `list_live_environments`.
>
> Pass `search=<connector or account>` to narrow output and receive
> `connectionReferenceTemplate` plus `hostTemplate` values that can be copied
@@ -448,9 +448,10 @@ Response keys: `flowKey`, `triggerName`, `triggerKind`, `invocation`, `triggerUr
`requiresAadAuth`, `authType`, `responseStatus`, `responseBody`, `runName`, and
`warning` when a required trigger input was not supplied.
> **Works for `Request` triggers: HTTP request, Button, and PowerApps.** Returns an
> error for Recurrence and connector triggers:
> `"only HTTP Request triggers can be invoked via this tool"`.
> **Works for `Request` triggers (HTTP request, Button, PowerApps) and for
> scheduled (Recurrence) flows.** A scheduled flow runs immediately, like the
> portal's "Run flow" button, and takes no `body` — 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 a `body` they run
@@ -483,8 +484,7 @@ Response keys: `flowKey`, `triggerName`, `triggerKind`, `invocation`, `triggerUr
### `set_live_flow_state`
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.
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.
@@ -594,11 +594,11 @@ tool schemas cannot tell you.
connectionReferences. Use `set_live_flow_state` to start/stop a flow.
### `trigger_live_flow`
- **Works for HTTP, Button, and PowerApps triggers.** Returns error for Recurrence,
connector, and other trigger types.
- **Works for HTTP, Button, PowerApps, and scheduled (Recurrence) triggers.**
A scheduled flow runs with no `body`. Automated connector triggers error.
- Pass trigger inputs as `body`. A `warning` in the result means a required input
was missing and the run started with it null.
- AAD-authenticated triggers are handled automatically (impersonated Bearer token).
- AAD-authenticated triggers are handled automatically (Bearer token attached).
### `get_live_flow_runs`
- `top` defaults to **30** with automatic pagination for higher values.
@@ -611,8 +611,9 @@ tool schemas cannot tell you.
- `poster`: `"Flow bot"` for Workflows bot identity, `"User"` for user identity.
### `list_live_connections`
- For build workflows, pass `environmentName`; omitting it inventories
connections across environments.
- `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.
- Use `search=<connector/account>` to get smaller output and paste-ready
`connectionReferenceTemplate` / `hostTemplate` values.
- `id` is the value you need for `connectionName` in `connectionReferences`.
@@ -39,7 +39,7 @@ enriched with governance metadata and remediation hints.
## How Monitoring Works
Flow Studio scans the Power Automate API daily for each subscriber and caches
FlowStudio scans the Power Automate API daily for each subscriber and caches
the results. There are two levels:
- **All flows** get metadata scanned: definition, connections, owners, trigger
@@ -54,7 +54,7 @@ the results. There are two levels:
a flow was last scanned. If stale, the scanning pipeline may not be running.
**Enabling monitoring:** Set `monitor: true` via `update_store_flow` or the
Flow Studio for Teams app
FlowStudio for Teams app
([how to select flows](https://learn.flowstudio.app/teams-monitoring)).
**Designating critical flows:** Use `update_store_flow` with `critical=true`