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/list
to confirm tool names and parameters.
This skill covers response shapes, behavioral notes, and workflow patterns —
things
tools/list
cannot tell you. If this document disagrees with
tools/list
or 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 populates
get_store_flow_runs
,
get_store_flow_errors
, 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
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
, 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-26e65220-..."
,
"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
/
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-."
,
"displayName"
:
"Stripe subscription updated"
,
"triggerType"
:
"Request"
,
"triggerKind"
:
"Http"
,
"triggerUrl"
:
"https://..."
}
triggerUrl
is 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-."
,
"requestedState"
:
"Stopped"
,
"currentState"
:
"Stopped"
,
"flow"
:
{
/ full gFlows record, same shape as get_store_flow /
}
}
The embedded
flow
object reflects the new state immediately — no
follow-up
get_store_flow
call 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_state
for changing state,
but
set_live_flow_state
only returns
{flowName, environmentName, requestedState, actualState}
and doesn't sync the cache. Prefer
set_live_flow_state
when 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"
}
]
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"
:
"Catherine Han"
,
"mail"
:
"catherine.han@flowstudio.app"
,
"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_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