Power Automate Monitoring
by @ninihen1
**Pro+ subscription required.** Tenant-wide Power Automate flow health monitoring, failure rate analytics, and asset inventory using the FlowStudio MCP cache...
clawhub install power-automate-monitoringπ About This Skill
name: power-automate-monitoring description: >- Pro+ subscription required. Tenant-wide Power Automate flow health monitoring, failure rate analytics, and asset inventory using the FlowStudio MCP cached store. Load this skill ONLY for tenant-wide aggregated views β not for listing flows in a single environment or debugging a specific run (use power-automate-mcp or power-automate-debug for those). Not the same as the server's
monitor-flow tool bundle (tool_search query: "skill:monitor-flow")
β that bundle is for runtime control of a single flow (start/stop/trigger/
cancel/resubmit); this skill is for tenant-wide health analytics over the
cached store.
Load when asked to: monitor tenant health, get aggregated failure rates over
a time window, review tenant-wide error trends, find inactive makers across
the tenant, inventory all Power Apps in the tenant, compute governance scores,
generate a compliance report, or run a tenant-wide health overview. Requires
a FlowStudio for Teams or MCP Pro+ subscription β see https://mcp.flowstudio.app
metadata:
openclaw:
requires:
env:
- FLOWSTUDIO_MCP_TOKEN
primaryEnv: FLOWSTUDIO_MCP_TOKEN
homepage: https://mcp.flowstudio.app
Power Automate Monitoring with FlowStudio MCP
Monitor flow health, track failure rates, and inventory tenant assets through the FlowStudio MCP cached store β fast reads, no PA API rate limits, and enriched with governance metadata and remediation hints.
> β οΈ Pro+ subscription required. This skill calls store_* tools that
> only work for FlowStudio for Teams or MCP Pro+ subscribers.
>
> If the user does not have Pro+ access: the first store_* tool call
> will return a 403/404 error. When that happens:
> 1. STOP calling store tools
> 2. Tell the user this feature requires a Pro+ subscription
> 3. Link them to https://mcp.flowstudio.app/pricing
> 4. If their question can be answered with live tools (e.g. "list flows in
> one environment"), offer to use the power-automate-mcp skill instead
>
> Discovery: load tool schemas via tool_search rather than tools/list β
> call with query: "select:list_store_flows,get_store_flow_summary" for the
> common monitoring tools, or load the full set with query: "skill:governance"
> (the server's governance bundle covers most monitoring reads too β this skill
> and power-automate-governance share the underlying tool family). This skill
> covers response shapes, behavioral notes, and workflow patterns β things
> tool_search cannot tell you. If this document disagrees with a real API
> response, the API wins.
How Monitoring Works
Flow Studio scans the Power Automate API daily for each subscriber and caches the results. There are two levels:
runPeriodTotal, runPeriodFailRate,
etc.). Environments, apps, connections, and makers are also scanned.
monitor: true) additionally get per-run detail:get_store_flow_runs and
get_store_flow_summary.Data freshness: Check the scanned field on get_store_flow to see when
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
(how to select flows).
Designating critical flows: Use update_store_flow with critical=true
on business-critical flows. This enables the governance skill's notification
rule management to auto-configure failure alerts on critical flows.
Tools
| Tool | Purpose |
|---|---|
| list_store_flows | List flows with failure rates and monitoring filters |
| get_store_flow | Full cached record: run stats, owners, tier, connections, definition (triggerUrl field included) |
| get_store_flow_summary | Aggregated run stats: success/fail rate, avg/max duration |
| get_store_flow_runs | Per-run history with duration, status, failed actions, remediation (filter status="Failed" for errors-only view) |
| update_store_flow | Set monitor flag, notification rules, tags, governance metadata |
| list_store_environments | All Power Platform environments |
| list_store_connections | All connections |
| list_store_makers | All makers (citizen developers) |
| get_store_maker | Maker detail: flow/app counts, licenses, account status |
| list_store_power_apps | All Power Apps canvas apps |
> For start/stop, use set_live_flow_state from the monitor-flow bundle
> (tool_search query: "select:set_live_flow_state") β the cache resyncs on
> the next scan. The previous set_store_flow_state convenience wrapper is
> deprecated.
Store vs Live
| Question | Use Store | Use Live |
|---|---|---|
| How many flows are failing? | list_store_flows | β |
| What's the fail rate over 30 days? | get_store_flow_summary | β |
| Show error history for a flow | get_store_flow_runs (filter status="Failed") | β |
| Who built this flow? | get_store_flow β parse owners | β |
| Read the full flow definition | get_store_flow has it (JSON string) | get_live_flow (structured) |
| Inspect action inputs/outputs from a run | β | get_live_flow_run_action_outputs |
| Resubmit a failed run | β | resubmit_live_flow_run |
> Store tools answer "what happened?" and "how healthy is it?" > Live tools answer "what exactly went wrong?" and "fix it now."
> If get_store_flow_runs or get_store_flow_summary return empty results,
> check: (1) is monitor: true on the flow? and (2) is the scanned field
> recent? Use get_store_flow to verify both.
Response Shapes
list_store_flows
Direct array. Filters: monitor (bool), rule_notify_onfail (bool),
rule_notify_onmissingdays (bool).
[
{
"id": "Default-.",
"displayName": "Stripe subscription updated",
"state": "Started",
"triggerType": "Request",
"triggerUrl": "https://...",
"tags": ["#operations", "#sensitive"],
"environmentName": "Default-aaaaaaaa-...",
"monitor": true,
"runPeriodFailRate": 0.012,
"runPeriodTotal": 82,
"createdTime": "2025-06-24T01:20:53Z",
"lastModifiedTime": "2025-06-24T03:51:03Z"
}
]
> id format: Default-. Split on first . to get
> environmentName and flowName.
>
> triggerUrl and tags are optional. Some entries are sparse (just id +
> monitor) β skip entries without displayName.
>
> Tags on list_store_flows are auto-extracted from the flow's description
> field (maker hashtags like #operations). Tags written via
> update_store_flow(tags=...) are stored separately and only visible on
> get_store_flow β they do NOT appear in the list response.
get_store_flow
Full cached record. Key fields:
| Category | Fields |
|---|---|
| Identity | name, displayName, environmentName, state, triggerType, triggerKind, tier, sharingType |
| Run stats | runPeriodTotal, runPeriodFails, runPeriodSuccess, runPeriodFailRate, runPeriodSuccessRate, runPeriodDurationAverage/Max/Min (milliseconds), runTotal, runFails, runFirst, runLast, runToday |
| Governance | monitor (bool), rule_notify_onfail (bool), rule_notify_onmissingdays (number), rule_notify_email (string), log_notify_onfail (ISO), description, tags |
| Freshness | scanned (ISO), nextScan (ISO) |
| Lifecycle | deleted (bool), deletedTime (ISO) |
| JSON strings | actions, connections, owners, complexity, definition, createdBy, security, triggers, referencedResources, runError β all require json.loads() to parse |
> Duration fields (runPeriodDurationAverage, Max, Min) are in
> milliseconds. Divide by 1000 for seconds.
>
> runError contains the last run error as a JSON string. Parse it:
> json.loads(record["runError"]) β returns {} when no error.
get_store_flow_summary
Aggregated stats over a time window (default: last 7 days).
{
"flowKey": "Default-.",
"windowStart": null,
"windowEnd": null,
"totalRuns": 82,
"successRuns": 81,
"failRuns": 1,
"successRate": 0.988,
"failRate": 0.012,
"averageDurationSeconds": 2.877,
"maxDurationSeconds": 9.433,
"firstFailRunRemediation": null,
"firstFailRunUrl": null
}
> Returns all zeros when no run data exists for this flow in the window.
> Use startTime and endTime (ISO 8601) parameters to change the window.
get_store_flow_runs
Direct array of cached run records. Parameters: startTime, endTime,
status (array β pass ["Failed"] for an errors-only view, ["Succeeded"],
or omit for all).
> Returns [] when no run data exists in the window.
Trigger URL
Read the triggerUrl field directly from get_store_flow (cached) or
get_live_flow (live). It is null for non-HTTP triggers.
Starting / stopping a flow
Use set_live_flow_state from the monitor-flow server bundle. The cache
catches up on the next daily scan; if you need cache freshness sooner, call
get_live_flow after the state change to confirm and let the next scan sync.
update_store_flow
Updates governance metadata. Only provided fields are updated (merge).
Returns the full updated record (same shape as get_store_flow).
Settable fields: monitor (bool), rule_notify_onfail (bool),
rule_notify_onmissingdays (number, 0=disabled),
rule_notify_email (comma-separated), description, tags,
businessImpact, businessJustification, businessValue,
ownerTeam, ownerBusinessUnit, supportGroup, supportEmail,
critical (bool), tier, security.
list_store_environments
Direct array.
[
{
"id": "Default-aaaaaaaa-...",
"displayName": "Flow Studio (default)",
"sku": "Default",
"type": "NotSpecified",
"location": "australia",
"isDefault": true,
"isAdmin": true,
"isManagedEnvironment": false,
"createdTime": "2017-01-18T01:06:46Z"
}
]
> sku values: Default, Production, Developer, Sandbox, Teams.
list_store_connections
Direct array. Can be very large (1500+ items).
[
{
"id": ".",
"displayName": "user@contoso.com",
"createdBy": "{\"id\":\"...\",\"displayName\":\"...\",\"email\":\"...\"}",
"environmentName": "...",
"statuses": "[{\"status\":\"Connected\"}]"
}
]
> createdBy and statuses are JSON strings β parse with json.loads().
list_store_makers
Direct array.
[
{
"id": "09dbe02f-...",
"displayName": "Sample Maker",
"mail": "maker@contoso.com",
"deleted": false,
"ownerFlowCount": 199,
"ownerAppCount": 209,
"userIsServicePrinciple": false
}
]
> Deleted makers have deleted: true and no displayName/mail fields.
get_store_maker
Full maker record. Key fields: displayName, mail, userPrincipalName,
ownerFlowCount, ownerAppCount, accountEnabled, deleted, country,
firstFlow, firstFlowCreatedTime, lastFlowCreatedTime,
firstPowerApp, lastPowerAppCreatedTime,
licenses (JSON string of M365 SKUs).
list_store_power_apps
Direct array.
[
{
"id": ".",
"displayName": "My App",
"environmentName": "...",
"ownerId": "09dbe02f-...",
"ownerName": "Catherine Han",
"appType": "Canvas",
"sharedUsersCount": 0,
"createdTime": "2023-08-18T01:06:22Z",
"lastModifiedTime": "2023-08-18T01:06:22Z",
"lastPublishTime": "2023-08-18T01:06:22Z"
}
]
Common Workflows
Find unhealthy flows
1. list_store_flows
2. Filter where runPeriodFailRate > 0.1 and runPeriodTotal >= 5
3. Sort by runPeriodFailRate descending
4. For each: get_store_flow for full detail
Check a specific flow's health
1. get_store_flow β check scanned (freshness), runPeriodFailRate, runPeriodTotal
2. get_store_flow_summary β aggregated stats with optional time window
3. get_store_flow_runs(status=["Failed"]) β per-run failure detail with remediation hints
4. If deeper diagnosis needed β switch to live tools:
get_live_flow_runs β get_live_flow_run_action_outputs
Enable monitoring on a flow
1. update_store_flow with monitor=true
2. Optionally set rule_notify_onfail=true, rule_notify_email="user@domain.com"
3. Run data will appear after the next daily scan
Daily health check
1. list_store_flows
2. Flag flows with runPeriodFailRate > 0.2 and runPeriodTotal >= 3
3. Flag monitored flows with state="Stopped" (may indicate auto-suspension)
4. For critical failures β get_store_flow_runs(status=["Failed"]) for remediation hints
Maker audit
1. list_store_makers
2. Identify deleted accounts still owning flows (deleted=true, ownerFlowCount > 0)
3. get_store_maker for full detail on specific users
Inventory
1. list_store_environments β environment count, SKUs, locations
2. list_store_flows β flow count by state, trigger type, fail rate
3. list_store_power_apps β app count, owners, sharing
4. list_store_connections β connection count per environment
Related Skills
power-automate-mcp β Foundation skill: connection setup, MCP helper, tool discoverypower-automate-debug β Deep diagnosis with action-level inputs/outputs (live API)power-automate-build β Build and deploy flow definitionspower-automate-governance β Governance metadata, tagging, notification rules, CoE patterns