Power Automate MCP Server by Flow Studio
What this MCP does
Builds, updates, runs, monitors, debugs, and governs Microsoft Power Automate flows, environments, connectors, and run histories.
Tools
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'flowName': {'type': 'string', 'description': 'Name (ID) of the flow to migrate into the solution.'}, 'solutionId': {'type': 'string', 'description': 'Target solution ID (Dataverse solutionid GUID). Omit for the default solution. Discover IDs via resolve_live_parameters on shared_commondataserviceforapps/ListRecords with entityName "solutions" (value-path solutionid, value-title friendlyname); needs a Dataverse connection in the env.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName', 'runName'], 'properties': {'runName': {'type': 'string', 'description': 'Run identifier (name field from get_live_flow_runs).'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName'], 'properties': {'top': {'type': 'number', 'description': 'Max operations to return in connector summary mode, or max top search results to show in cross-connector search. Default 250 for summary, 10 for search display.'}, 'type': {'enum': ['Action', 'Trigger'], 'type': 'string', 'description': 'Operation usage to include in summary mode. Default Action.'}, 'depth': {'enum': ['summary', 'full'], 'type': 'string', 'description': 'summary (default): compact operation catalog. full: raw OpenAPI metadata.'}, 'search': {'type': 'string', 'description': 'Optional operation search text. With connectorName, filters that connector summary. Without connectorName, searches operations across connectors.'}, 'apiName': {'type': 'string', 'description': 'Alias for connectorName, matching Canvas MCP describe_api naming.'}, 'variant': {'type': 'string', 'description': "When an operation has multiple authored variants (e.g. shared_teams/PostMessageToConversation has channel/groupchat/flowbot_chat), pass a specific variantKey to get that variant's hint and exampleDefinition. Omit to receive a hint listing the available variants."}, 'operationId': {'type': 'string', 'description': 'Optional operation ID to describe with expanded inputs and outputs.'}, 'connectorName': {'type': 'string', 'description': 'Connector logical name, for example shared_teams. Either connectorName/apiName is required, unless search is provided for cross-connector operation search.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'depth': {'enum': ['summary', 'full'], 'type': 'string', 'description': 'full (default): the whole definition. summary: the action tree — name, type, operation, runAfter, nesting — with no inputs. Use summary on a large flow, then ask for the actions you need.'}, 'actions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Return only these actions, found at any nesting depth and each reported with the scopes it sits in, plus triggers. Combine with depth:"summary" to get the tree as well.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'top': {'type': 'number', 'description': 'Max actions or repetitions to return. Paginates automatically. Omit for all.'}, 'checkId': {'type': 'string', 'description': "Trigger check id (checkId from get_live_flow_runs -> triggerChecks). Returns that check's inputs/outputs, including the failure reason. Not a run id — the two are different, which is why a check id returns WorkflowRunNotFound from the run tools."}, 'runName': {'type': 'string', 'description': 'Run identifier (name field from get_live_flow_runs), or "latest" for the most recent run. Required unless checkId is given.'}, 'trigger': {'type': 'boolean', 'description': "Return the RUN's trigger inputs/outputs instead of its actions. Requires runName."}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'actionName': {'type': 'string', 'description': 'Action name. Without iterationIndex: returns all repetitions of this action across every foreach iteration. With iterationIndex: returns the single repetition matching that iteration. Omit entirely for top-level action list.'}, 'iterationIndex': {'type': 'number', 'description': 'Zero-based foreach iteration index. Matched against the innermost repetitionIndexes[].itemIndex in the PA repetition record. Only meaningful when actionName is also set.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName', 'runName'], 'properties': {'top': {'type': 'number', 'description': 'Max actions to return. Paginates automatically. Omit for all.'}, 'runName': {'type': 'string', 'description': 'Run identifier (name field from get_live_flow_runs), or "latest" for the most recent run.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'top': {'type': 'number', 'description': 'Max runs to return. Paginates automatically. Default 30.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}, 'includeTriggerChecks': {'type': 'boolean', 'description': 'Also report trigger check history when runs DO exist. Checks are always reported when there are no runs. Costs two extra API calls.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'top': {'type': 'number', 'description': 'Maximum number of run rows to return (default 5000).'}, 'status': {'type': 'array', 'items': {'enum': ['Running', 'Succeeded', 'Failed', 'Cancelled'], 'type': 'string'}, 'description': 'Filter by status. Only the first value is used in the OData filter.'}, 'endTime': {'type': 'string', 'description': 'ISO 8601 end of the time window.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'startTime': {'type': 'string', 'description': 'ISO 8601 start of the time window (default: 7 days ago).'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'endTime': {'type': 'string', 'description': 'ISO 8601 end of the time window.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'startTime': {'type': 'string', 'description': 'ISO 8601 start of the time window (default: 7 days ago).'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['makerKey'], 'properties': {'makerKey': {'type': 'string', 'description': 'Maker RowKey (AAD object ID of the user).'}}}
Input schema
{'type': 'object', 'required': ['environmentName'], 'properties': {'top': {'type': 'number', 'description': 'Max connections to RETURN, applied after search. Paginates automatically. Omit for all.'}, 'search': {'type': 'string', 'description': 'Optional case-insensitive substring filter applied to id, displayName, connectorName, and accountName. Adds connectionReferenceTemplate + hostTemplate to each returned connection.'}, 'environmentName': {'type': 'string', 'description': 'Required. Name of the Power Platform environment (a GUID, or a name like "Default-<tid>"). Call list_live_environments if you do not have one — the platform cannot list connections across environments.'}}}
Input schema
{'type': 'object', 'properties': {'top': {'type': 'number', 'description': 'Max environments to return. Paginates automatically. Omit for all.'}, 'mode': {'enum': ['all', 'member', 'admin'], 'type': 'string', 'description': 'all (default) and member: every environment you belong to. admin: only those where you hold ListAnyFlow; errors rather than returning a shorter list if admin access cannot be determined.'}}}
Input schema
{'type': 'object', 'required': ['environmentName'], 'properties': {'top': {'type': 'number', 'description': 'Max flows to return. Paginates automatically. Omit for all.'}, 'mode': {'enum': ['owner', 'admin'], 'type': 'string', 'description': 'owner (default): user-scoped — owned + shared-with-me flows (personal + team), with full definitions. admin: admin-scoped endpoint, all flows.'}, 'search': {'type': 'string', 'description': 'Optional case-insensitive filter applied to flow displayName.'}, 'includeDeleted': {'type': 'boolean', 'description': 'Include soft-deleted flows, which come back with state=Deleted and can be restored with restore_live_flow. Requires mode=admin — the user-scoped listing never returns deleted flows. Off by default.'}, 'timeoutSeconds': {'type': 'number', 'description': 'Stop collecting pages after this many seconds and return a nextLink for the next batch. Default 25. Max 55.'}, 'continuationUrl': {'type': 'string', 'description': 'nextLink value returned by a previous call. Pass to resume pagination from where the last call stopped. Must match the same mode as the original call.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {'monitor': {'type': 'boolean', 'description': 'If set, only return flows where monitor equals this value.'}, 'rule_notify_onfail': {'type': 'boolean', 'description': 'If set, filter flows by whether on-fail notifications are enabled.'}, 'rule_notify_onmissingdays': {'type': 'boolean', 'description': 'If set, filter flows by whether missing-days notifications are enabled.'}}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'required': ['action'], 'properties': {'chunk': {'type': 'integer', 'minimum': 0, 'description': 'Optional. Omit to append the next chunk automatically.'}, 'action': {'enum': ['report', 'append', 'status', 'list'], 'type': 'string'}, 'notify': {'type': 'boolean', 'default': True}, 'ticket': {'type': 'string'}, 'content': {'type': 'string', 'description': 'Text attachment body. Max 64 KB per call.'}, 'details': {'type': 'string', 'maxLength': 100000}, 'summary': {'type': 'string', 'maxLength': 200}, 'category': {'enum': ['wrong-result', 'error', 'missing-capability', 'docs-or-hints', 'performance', 'other'], 'type': 'string', 'default': 'other'}, 'severity': {'enum': ['blocker', 'major', 'minor'], 'type': 'string', 'default': 'major'}, 'file_name': {'type': 'string'}, 'flow_name': {'type': 'string'}, 'tool_name': {'type': 'string'}, 'final_chunk': {'type': 'boolean'}, 'content_type': {'type': 'string', 'description': 'Media type of the attachment. text/plain (default), text/csv, text/markdown, application/json, application/har+json, application/xml, image/png, image/jpeg, image/gif, image/webp, application/pdf.'}, 'contact_email': {'type': 'string'}, 'content_base64': {'type': 'string', 'description': 'Binary attachment body, base64-encoded. Max 256 KB decoded per call. Use for images/PDF; pass text through `content` instead. Do not send both.'}, 'environment_name': {'type': 'string'}, 'include_diagnostics': {'type': 'boolean', 'default': True}}}
Input schema
{'type': 'object', 'required': ['environmentName'], 'properties': {'top': {'type': 'number', 'description': 'Max options per dropdown (default 200). A longer list is marked truncated.'}, 'match': {'type': 'object', 'description': 'Exact display name, or the value itself, per input, e.g. { "folderPath": "Inbox" }. Case-insensitive, never fuzzy. Folders also take /path. matchCount 0 answers status "nomatch".'}, 'browse': {'type': 'object', 'description': 'Open a folder: { "field": "<input>", "id": "<folder value>" }.'}, 'detail': {'enum': ['compact', 'full'], 'type': 'string', 'description': 'Column detail. Default compact.'}, 'search': {'type': 'string', 'description': 'Narrow long option or column lists by name (a filter, not a pick).'}, 'apiName': {'type': 'string', 'description': 'Alias for connectorName.'}, 'include': {'type': 'array', 'items': {'enum': ['outputs'], 'type': 'string'}, 'description': 'Add "outputs" to get the fields this action returns.'}, 'flowName': {'type': 'string', 'description': 'With actionName: take the connector, operation and connection from this flow action.'}, 'actionName': {'type': 'string', 'description': 'Action (or trigger) name in flowName.'}, 'parameters': {'type': 'object', 'description': 'Values already chosen, e.g. { "dataset": "<site url>" }.'}, 'operationId': {'type': 'string', 'description': 'Operation ID, e.g. PostItem. Not needed with flowName + actionName.'}, 'connectorName': {'type': 'string', 'description': 'Connector name, e.g. shared_sharepointonline.'}, 'parameterName': {'type': 'string', 'description': 'Resolve only this input. Omit for every input.'}, 'connectionName': {'type': 'string', 'description': 'Connection to run as. Omit to have one chosen.'}, 'dynamicMetadata': {'type': 'object', 'description': "Not needed for the operation's own inputs. For a lookup the connector does not define (e.g. Dataverse ListRecords over connectionreferences) send it and it is used as given."}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName', 'runName'], 'properties': {'runName': {'type': 'string', 'description': 'Run identifier (name field from get_live_flow_runs), or "latest" for the most recent run.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName', 'state'], 'properties': {'state': {'enum': ['Started', 'Stopped'], 'type': 'string', 'description': 'Desired state for the flow.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Search query. Forms: "select:name1,name2", "skill:<name>", or free-text keywords.'}, 'max_results': {'type': 'integer', 'default': 5, 'description': 'Max tools to return for keyword queries (default 5). Ignored for select: and skill: queries.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'body': {'type': 'object', 'description': 'JSON body to POST to the trigger URL. Omit for flows that expect an empty body.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'connections': {'type': 'object', 'description': 'Only for a flow whose connections are provided by whoever runs it. Map of connection-reference name to the connection id to run it with, e.g. {"shared_office365users":"shared-office365user-…"}. Omit unless the result told you the connection picked was wrong; ids come from list_live_connections.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}}}
Input schema
{'type': 'object', 'required': ['environmentName'], 'properties': {'dryRun': {'type': 'boolean', 'description': 'Preview only, on BOTH paths: with flowName, apply the change to the live definition and return the result + what changed; without flowName, return the flow that WOULD be created. Nothing is written either way.'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow to update. Omit or leave blank to create a new flow.'}, 'definition': {'type': 'object', 'description': "Full flow definition as a JSON object (triggers + actions + parameters + outputs + description). MUST be a JSON object — strings are rejected. Do not JSON.stringify the definition; pass the parsed object directly. Required when creating. For updates, obtain from get_live_flow (properties.definition), modify it, then pass the modified object here. definition.description is required (a short note about what changed); when updating, if you omit it we reuse the flow's existing description."}, 'operations': {'type': 'array', 'items': {'type': 'object', 'required': ['op', 'path'], 'properties': {'op': {'enum': ['set', 'add', 'remove', 'merge'], 'type': 'string', 'description': 'Edit verb.'}, 'path': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of literal keys, one per level, e.g. ["actions","Compose","inputs"]. A "/" inside an element is a literal character, so SharePoint/Dataverse column params (flat keys like "item/Title") are addressable: ["actions","Update_Item","inputs","parameters","item/Title"]. Do NOT pass a slash-delimited string — it cannot distinguish a literal "/" from a separator.'}, 'value': {'description': 'New value (required for set/add/merge; merge requires an object).'}}}, 'description': 'SURGICAL EDIT of an existing flow (requires flowName; do not combine with definition). An ordered list applied to the LIVE definition. Each item = { op, path, value? }. path is an ARRAY of literal keys, e.g. ["actions","Send_Email","inputs","parameters","subject"] (each element is one key; a "/" inside an element is literal, so it addresses SharePoint/Dataverse columns like ["actions","Update_Item","inputs","parameters","item/Title"]). ops: set (create/overwrite), add (new key — errors if it already exists), remove (delete key — no-op if absent), merge (deep-merge an object value, keeping sibling keys).'}, 'displayName': {'type': 'string', 'description': 'Display name for the flow. Required when creating.'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}, 'connectionReferences': {'type': 'object', 'description': 'Connection references map copied from get_live_flow. Direct-flow entries use { connectionName, id }. Solution-aware entries also include { connectionReferenceLogicalName, source } and must retain those fields exactly. A freshly migrated entry may instead be keyed by the physical connection name and carry no connectionName field at all — copy it back as-is. The action/trigger inputs.host.connectionName must match the map key; the physical connectionName stays inside the entry. Never invent a solution logical name. Adding a connectionReferenceLogicalName to an entry that lacks one does not always take: the save can return success without storing it, so re-read with get_live_flow to confirm. MAY BE PASSED ALONGSIDE operations: your entries are merged over the stored map and saved in the SAME request as the edit. That is how you add the first action for a connector the flow does not use yet — a reference saved on its own does not stick, because Power Automate prunes an entry no action references. Your entries win on a key collision.'}}}
Input schema
{'type': 'object', 'required': ['environmentName', 'flowName'], 'properties': {'tags': {'type': 'string'}, 'tier': {'type': 'string'}, 'monitor': {'type': 'boolean', 'description': 'Enable/disable monitoring for this flow.'}, 'critical': {'type': 'boolean'}, 'flowName': {'type': 'string', 'description': 'Name (ID) of the flow.'}, 'security': {'type': 'string'}, 'ownerTeam': {'type': 'string'}, 'description': {'type': 'string'}, 'supportEmail': {'type': 'string'}, 'supportGroup': {'type': 'string'}, 'businessValue': {'type': 'string'}, 'businessImpact': {'type': 'string'}, 'environmentName': {'type': 'string', 'description': 'Name of the Power Platform environment.'}, 'ownerBusinessUnit': {'type': 'string'}, 'rule_notify_email': {'type': 'string', 'description': 'Comma-separated email addresses for notifications.'}, 'rule_notify_onfail': {'type': 'boolean', 'description': 'Send notification when the flow fails.'}, 'businessJustification': {'type': 'string'}, 'rule_notify_onmissingdays': {'type': 'number', 'description': 'Send notification when flow has not run for this many days (0 = disabled).'}}}
Recent tool changes
Similar MCP servers
shiply
Publishes and manages web applications with SQL databases, serverless functions, domains, email tests, client intake, contracts, …
Boat House
Deploys and operates small containerized web applications with releases, rollbacks, persistent data, access controls, secrets, bi…
OSIR Domain Registrar
Manages domain registration and transfers, DNS, VPS instances, SSH keys, hosted email, account funding, and related infrastructur…
Fine Structure
Builds and hosts full-stack applications from prompts and supports agent communication through WhatsApp and email.
ALM X++ MCP Server
Supports D365 Finance and Operations development with X++ and AOT search, code analysis, Azure DevOps workflows, telemetry querie…
mcp
Provisions and manages cloud instances, networks, storage, databases, backups, VPNs, application deployments, and autocoding-agen…
EchoRelay
Manages a hosted API relay runtime, including projects, endpoints, credentials, publishing, keys, delivery logs, and dead-letter …
Supero
Builds, validates, publishes, tests, and deploys multi-tenant applications with schemas, CRUD operations, external data connector…