- **New skill: flowstudio-power-automate-monitoring** — flow health, failure rates, maker inventory, Power Apps, environment/connection counts via FlowStudio MCP cached store tools. - **New skill: flowstudio-power-automate-governance** — 10 CoE-aligned governance workflows: compliance review, orphan detection, archive scoring, connector audit, notification management, classification/tagging, maker offboarding, security review, environment governance, governance dashboard. - **Updated flowstudio-power-automate-debug** — purely live API tools (no store dependencies), mandatory action output inspection step, resubmit clarified as working for ALL trigger types. - **Updated flowstudio-power-automate-build** — Step 1 uses list_live_flows (not list_store_flows) for the duplicate check, resubmit-first testing. - **Updated flowstudio-power-automate-mcp** — store tool catalog, response shapes verified against real API calls, set_store_flow_state shape fix. - Plugin version bumped to 2.0.0, all 5 skills listed in plugin.json. - Generated docs regenerated via npm start. All response shapes verified against real FlowStudio MCP API calls. All 10 governance workflows validated with real tenant data. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
13 KiB
name, description, metadata
| name | description | metadata | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flowstudio-power-automate-monitoring | Monitor Power Automate flow health, track failure rates, and inventory tenant assets using the FlowStudio MCP cached store. The live API only returns top-level run status. Store tools surface aggregated stats, per-run failure details with remediation hints, maker activity, and Power Apps inventory — all from a fast cache with no rate-limit pressure on the PA API. Load this skill when asked to: check flow health, find failing flows, get failure rates, review error trends, list all flows with monitoring enabled, check who built a flow, find inactive makers, inventory Power Apps, see environment or connection counts, get a flow summary, or any tenant-wide health overview. Requires a FlowStudio for Teams or MCP Pro+ subscription — see 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.
Requires: A FlowStudio for Teams or MCP Pro+ subscription.
Start every session with
tools/listto confirm tool names and parameters. This skill covers response shapes, behavioral notes, and workflow patterns — thingstools/listcannot tell you. If this document disagrees withtools/listor 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:
- All flows get metadata scanned: definition, connections, owners, trigger
type, and aggregate run statistics (
runPeriodTotal,runPeriodFailRate, etc.). Environments, apps, connections, and makers are also scanned. - Monitored flows (
monitor: true) additionally get per-run detail: individual run records with status, duration, failed action names, and remediation hints. This is what populatesget_store_flow_runs,get_store_flow_errors, andget_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 |
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 |
get_store_flow_errors |
Failed-only runs with action names and remediation hints |
get_store_flow_trigger_url |
Trigger URL from cache (instant, no PA API call) |
set_store_flow_state |
Start or stop a flow and sync state back to cache |
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 |
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_errors |
— |
| 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,get_store_flow_errors, orget_store_flow_summaryreturn empty results, check: (1) ismonitor: trueon the flow? and (2) is thescannedfield recent? Useget_store_flowto verify both.
Response Shapes
list_store_flows
Direct array. Filters: monitor (bool), rule_notify_onfail (bool),
rule_notify_onmissingdays (bool).
[
{
"id": "Default-<envGuid>.<flowGuid>",
"displayName": "Stripe subscription updated",
"state": "Started",
"triggerType": "Request",
"triggerUrl": "https://...",
"tags": ["#operations", "#sensitive"],
"environmentName": "Default-26e65220-...",
"monitor": true,
"runPeriodFailRate": 0.012,
"runPeriodTotal": 82,
"createdTime": "2025-06-24T01:20:53Z",
"lastModifiedTime": "2025-06-24T03:51:03Z"
}
]
idformat:Default-<envGuid>.<flowGuid>. Split on first.to getenvironmentNameandflowName.
triggerUrlandtagsare optional. Some entries are sparse (justid+monitor) — skip entries withoutdisplayName.Tags on
list_store_flowsare auto-extracted from the flow'sdescriptionfield (maker hashtags like#operations). Tags written viaupdate_store_flow(tags=...)are stored separately and only visible onget_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.
runErrorcontains 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-<envGuid>.<flowGuid>",
"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
startTimeandendTime(ISO 8601) parameters to change the window.
get_store_flow_runs / get_store_flow_errors
Direct array. get_store_flow_errors filters to status=Failed only.
Parameters: startTime, endTime, status (array: ["Failed"],
["Succeeded"], etc.).
Both return
[]when no run data exists.
get_store_flow_trigger_url
{
"flowKey": "Default-<envGuid>.<flowGuid>",
"displayName": "Stripe subscription updated",
"triggerType": "Request",
"triggerKind": "Http",
"triggerUrl": "https://..."
}
triggerUrlis null for non-HTTP triggers.
set_store_flow_state
Calls the live PA API then syncs state to the cache and returns the full updated record.
{
"flowKey": "Default-<envGuid>.<flowGuid>",
"requestedState": "Stopped",
"currentState": "Stopped",
"flow": { /* full gFlows record, same shape as get_store_flow */ }
}
The embedded
flowobject reflects the new state immediately — no follow-upget_store_flowcall needed. Useful for governance workflows that stop a flow and then read its tags/monitor/owner metadata in the same turn.Functionally equivalent to
set_live_flow_statefor changing state, butset_live_flow_stateonly returns{flowName, environmentName, requestedState, actualState}and doesn't sync the cache. Preferset_live_flow_statewhen you only need to toggle state and don't care about cache freshness.
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-26e65220-...",
"displayName": "Flow Studio (default)",
"sku": "Default",
"type": "NotSpecified",
"location": "australia",
"isDefault": true,
"isAdmin": true,
"isManagedEnvironment": false,
"createdTime": "2017-01-18T01:06:46Z"
}
]
skuvalues:Default,Production,Developer,Sandbox,Teams.
list_store_connections
Direct array. Can be very large (1500+ items).
[
{
"id": "<environmentId>.<connectionId>",
"displayName": "user@contoso.com",
"createdBy": "{\"id\":\"...\",\"displayName\":\"...\",\"email\":\"...\"}",
"environmentName": "...",
"statuses": "[{\"status\":\"Connected\"}]"
}
]
createdByandstatusesare JSON strings — parse withjson.loads().
list_store_makers
Direct array.
[
{
"id": "09dbe02f-...",
"displayName": "Catherine Han",
"mail": "catherine.han@flowstudio.app",
"deleted": false,
"ownerFlowCount": 199,
"ownerAppCount": 209,
"userIsServicePrinciple": false
}
]
Deleted makers have
deleted: trueand nodisplayName/
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": "<environmentId>.<appId>",
"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_errors → 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_errors 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— Core connection setup, live tool referencepower-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