powerautomate-mcp 0.9.4 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +275 -146
- package/dist/index.js +839 -16
- package/dist/index.js.map +1 -1
- package/package.json +9 -3
- package/scripts/validate-powerpages.mjs +153 -0
package/README.md
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
# Power Automate MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Docs:** **Overview** · [Installation & Upgrading](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md) · [Changelog](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/CHANGELOG.md) · [Report an issue](https://github.com/rcb0727/powerautomate-mcp-docs/issues)
|
|
4
|
+
|
|
5
|
+
An MCP (Model Context Protocol) server for Microsoft Power Automate. Create, manage, and deploy Power Automate flows using natural language.
|
|
6
|
+
|
|
7
|
+
Works with any MCP-compatible AI client: **Claude Desktop**, **Claude Code**, **VS Code Copilot**, **Cursor**, **Google Gemini CLI**, and more.
|
|
8
|
+
|
|
9
|
+
## Documentation Map
|
|
10
|
+
|
|
11
|
+
| Page | What you'll find |
|
|
12
|
+
|------|------------------|
|
|
13
|
+
| **README** (this page) | [Features](#features) · [Quick Start](#quick-start) · [App Registration](#microsoft-entra-app-registration) · [CLI Reference](#cli-reference) · [Usage Examples](#usage-examples) · [All 121 Tools](#available-tools-121-total) · [Security](#security) · [Architecture](#architecture) |
|
|
14
|
+
| [Installation Guide](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md) | [Prerequisites](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#prerequisites) · [Install](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#install-from-npm) · [**Updating safely**](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#updating) · per-client setup ([Claude Desktop](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#claude-desktop), [Claude Code](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#claude-code-cli), [VS Code](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#vs-code-github-copilot), [Cursor](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#cursor), [Gemini CLI](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#google-gemini-cli), [ChatGPT](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#chatgpt-openai)) · [Enterprise consent](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#enterprise-tenants-with-strict-consent-policies) |
|
|
15
|
+
| [Changelog](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/CHANGELOG.md) | Release history with per-version upgrade notes |
|
|
16
|
+
| [Issues](https://github.com/rcb0727/powerautomate-mcp-docs/issues) | Bug reports and feature requests — every one gets read |
|
|
4
17
|
|
|
5
18
|
## Features
|
|
6
19
|
|
|
@@ -8,92 +21,202 @@ An MCP (Model Context Protocol) server that connects Claude to Microsoft Power A
|
|
|
8
21
|
- **Test & Debug** - Automatic testing with intelligent error diagnosis
|
|
9
22
|
- **Validate** - Pre-flight checks with best practices scoring (0-100)
|
|
10
23
|
- **Manage Flows** - List, update, clone, and delete flows
|
|
24
|
+
- **Power Apps** - Manage canvas and model-driven apps, permissions, versions
|
|
25
|
+
- **Power Pages** - Configure sites (pages, web roles, table permissions, snippets, templates) and manage hosting (provision, restart, delete)
|
|
26
|
+
- **Environment Admin** - Create, copy, backup, restore environments
|
|
27
|
+
- **DLP Policies** - Create and manage data loss prevention policies
|
|
28
|
+
- **Solutions ALM** - Export, import, and manage Dataverse solutions
|
|
29
|
+
- **Dataverse CRUD** - Full table/row operations via OData Web API
|
|
30
|
+
- **SharePoint** - Sites, lists, items, and files via Microsoft Graph
|
|
11
31
|
- **Expression Help** - Interactive Power Automate expression reference
|
|
12
32
|
- **Connector Intelligence** - Full knowledge of 400+ connectors and schemas
|
|
13
33
|
- **Cross-Platform** - Works on Windows, macOS, and Linux
|
|
14
34
|
|
|
15
35
|
## Quick Start
|
|
16
36
|
|
|
17
|
-
|
|
37
|
+
```bash
|
|
38
|
+
npm install -g powerautomate-mcp
|
|
39
|
+
powerautomate-mcp --setup
|
|
40
|
+
```
|
|
18
41
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
42
|
+
The setup wizard handles everything automatically:
|
|
43
|
+
1. Creates the app registration in your tenant via Azure CLI (or prompts you to provide one)
|
|
44
|
+
2. Opens your browser to sign in
|
|
45
|
+
3. Presents the admin consent URL (auto-opens in browser)
|
|
46
|
+
4. Discovers your environments and lets you select one
|
|
47
|
+
5. Saves your configuration
|
|
25
48
|
|
|
26
|
-
|
|
27
|
-
sudo dnf install libsecret gnome-keyring
|
|
28
|
-
```
|
|
49
|
+
Then configure your AI client. See the **[Installation Guide](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md)** for platform-specific setup:
|
|
29
50
|
|
|
30
|
-
|
|
31
|
-
|
|
51
|
+
| Client | Config |
|
|
52
|
+
|--------|--------|
|
|
53
|
+
| Claude Desktop | `claude_desktop_config.json` |
|
|
54
|
+
| Claude Code | `claude mcp add powerautomate` |
|
|
55
|
+
| VS Code Copilot | `.vscode/mcp.json` |
|
|
56
|
+
| Cursor | `~/.cursor/mcp.json` |
|
|
57
|
+
| Gemini CLI | `~/.gemini/settings.json` |
|
|
58
|
+
| ChatGPT | `--http` flag + tunnel (see [guide](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#chatgpt-openai)) |
|
|
32
59
|
|
|
33
|
-
|
|
60
|
+
---
|
|
34
61
|
|
|
35
|
-
|
|
36
|
-
npm install -g powerautomate-mcp
|
|
37
|
-
```
|
|
62
|
+
## Microsoft Entra App Registration
|
|
38
63
|
|
|
39
|
-
|
|
64
|
+
The setup wizard (`--setup`) creates the app registration automatically if you have Azure CLI installed. No manual steps required for most users.
|
|
40
65
|
|
|
41
|
-
|
|
42
|
-
|
|
66
|
+
### Who Needs to Do What?
|
|
67
|
+
|
|
68
|
+
| Role | Action |
|
|
69
|
+
|------|--------|
|
|
70
|
+
| Entra ID admin with Azure CLI | Run `powerautomate-mcp --setup` — everything is automated |
|
|
71
|
+
| Entra ID admin without Azure CLI | Run `--setup`, paste your app's Client ID when prompted, grant admin consent |
|
|
72
|
+
| Non-admin user | Run `--setup`, then ask an admin (see roles below) to approve the consent URL shown |
|
|
73
|
+
| End users (after admin setup) | Just run `powerautomate-mcp --setup` |
|
|
74
|
+
|
|
75
|
+
> **Tip:** You can also set `PA_MCP_CLIENT_ID` as an environment variable to skip the prompt entirely.
|
|
76
|
+
|
|
77
|
+
### Admin Consent
|
|
78
|
+
|
|
79
|
+
The setup wizard presents the admin consent URL and auto-opens it in your browser. Any of these Entra ID roles can grant consent: **Global Administrator**, **Application Administrator**, **Cloud Application Administrator**, or **Privileged Role Administrator**. If you don't have one of these roles, share the URL with your admin:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id=YOUR_CLIENT_ID
|
|
43
83
|
```
|
|
44
84
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
85
|
+
### Manual Setup (Optional)
|
|
86
|
+
|
|
87
|
+
If you prefer to create the app registration manually:
|
|
88
|
+
|
|
89
|
+
1. Go to [Azure Portal](https://portal.azure.com) > **Microsoft Entra ID** > **App registrations** > **New registration**
|
|
49
90
|
|
|
50
|
-
|
|
91
|
+
2. Configure basic settings:
|
|
92
|
+
- **Name**: `Power Automate MCP`
|
|
93
|
+
- **Supported account types**: Accounts in any organizational directory (multi-tenant)
|
|
94
|
+
- **Redirect URI**: Select "Public client/native" and enter:
|
|
95
|
+
```
|
|
96
|
+
https://login.microsoftonline.com/common/oauth2/nativeclient
|
|
97
|
+
```
|
|
51
98
|
|
|
52
|
-
|
|
99
|
+
3. After creation, go to **Authentication** and enable:
|
|
100
|
+
- **Allow public client flows**: Yes
|
|
53
101
|
|
|
54
|
-
**
|
|
55
|
-
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
56
|
-
**Linux**: `~/.config/Claude/claude_desktop_config.json`
|
|
102
|
+
4. Go to **API permissions** > **Add a permission** and add:
|
|
57
103
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
104
|
+
| API | Permission | Type | Used For |
|
|
105
|
+
|-----|------------|------|----------|
|
|
106
|
+
| Microsoft Graph | `User.Read` | Delegated | User profile |
|
|
107
|
+
| Microsoft Graph | `Sites.ReadWrite.All` | Delegated | SharePoint sites, lists, files |
|
|
108
|
+
| Microsoft Graph | `Files.ReadWrite.All` | Delegated | OneDrive/SharePoint file operations |
|
|
109
|
+
| Power Automate (Flow Service) | `Flows.Read.All` | Delegated | Read flows |
|
|
110
|
+
| Power Automate (Flow Service) | `Flows.Manage.All` | Delegated | Create/update/delete flows |
|
|
111
|
+
| Power Automate (Flow Service) | `Activity.Read.All` | Delegated | Flow run history |
|
|
112
|
+
| Power Automate (Flow Service) | `Approvals.Manage.All` | Delegated | Approval management |
|
|
113
|
+
| Dynamics CRM | `user_impersonation` | Delegated | Dataverse table/row CRUD |
|
|
114
|
+
| Power Platform API | delegated permission | Delegated | Power Pages **site management** (Tier 2 — optional; see note below) |
|
|
115
|
+
|
|
116
|
+
> **Power Pages site-management tools (Tier 2)** call `https://api.powerplatform.com` and need the "Power Platform API" delegated permission (appId `8578e004-a5c6-46e7-913e-12f58912df43`). It is **not** added by the automatic `--setup` app creation because that API exposes only feature-scoped permissions and the auto-creator can't safely guess the scope. Add it manually here if you want Tier 2; the Power Pages **config** tools (Dataverse) work without it. After adding, re-run `--setup` — the wizard reports whether the Power Platform API authorized.
|
|
117
|
+
|
|
118
|
+
5. Click **Grant admin consent for [Your Tenant]** (requires Global Admin, Application Admin, Cloud Application Admin, or Privileged Role Admin)
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## CLI Reference
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
powerautomate-mcp [options]
|
|
66
126
|
```
|
|
67
127
|
|
|
68
|
-
|
|
128
|
+
| Flag | Description |
|
|
129
|
+
|------|-------------|
|
|
130
|
+
| `--setup`, `-s` | Run the interactive setup wizard |
|
|
131
|
+
| `--validate` | Verify config, auth, and API connectivity then exit |
|
|
132
|
+
| `--update` | Check for updates and install the latest version |
|
|
133
|
+
| `--version`, `-v` | Print version and exit |
|
|
134
|
+
| `--http` | Start with Streamable HTTP transport |
|
|
135
|
+
| `--port <N>` | Port for HTTP transport (default: 3000) |
|
|
136
|
+
| `--env <name>` | Override the default environment (alias or GUID) |
|
|
137
|
+
| `--config <path>` | Use an alternate config file |
|
|
138
|
+
| `--debug` | Enable debug-level logging |
|
|
139
|
+
| `--help`, `-h` | Show help message |
|
|
140
|
+
|
|
141
|
+
**Environment Variables:**
|
|
142
|
+
| Variable | Description |
|
|
143
|
+
|----------|-------------|
|
|
144
|
+
| `PA_MCP_CLIENT_ID` | Microsoft Entra app client ID (overrides config file) |
|
|
145
|
+
| `PA_CONFIG_PATH` | Custom path to config.json |
|
|
146
|
+
|
|
147
|
+
---
|
|
69
148
|
|
|
70
149
|
## Usage Examples
|
|
71
150
|
|
|
151
|
+
### Flows
|
|
72
152
|
```
|
|
73
153
|
Create a flow that sends me an email every morning with the weather forecast
|
|
74
154
|
```
|
|
75
|
-
|
|
76
155
|
```
|
|
77
156
|
Test my "Daily Report" flow and tell me if there are any errors
|
|
78
157
|
```
|
|
158
|
+
```
|
|
159
|
+
Help me write an expression to format a date as "January 1, 2024"
|
|
160
|
+
```
|
|
161
|
+
```
|
|
162
|
+
Show me all the flows that have been shared with me
|
|
163
|
+
```
|
|
164
|
+
```
|
|
165
|
+
Patch the "Compose" action inside the Default case of "If_Recognized_Form" — only that one node, leave the rest alone
|
|
166
|
+
```
|
|
79
167
|
|
|
168
|
+
### SharePoint
|
|
169
|
+
```
|
|
170
|
+
List all items in the "Projects" list on our Marketing site
|
|
80
171
|
```
|
|
81
|
-
|
|
172
|
+
```
|
|
173
|
+
Upload this month's report to the Shared Documents library
|
|
82
174
|
```
|
|
83
175
|
|
|
176
|
+
### Dataverse
|
|
84
177
|
```
|
|
85
|
-
|
|
178
|
+
Show me all active accounts in Dataverse with revenue over $1M
|
|
179
|
+
```
|
|
180
|
+
```
|
|
181
|
+
Create a new contact row for John Smith in the contacts table
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Power Apps
|
|
185
|
+
```
|
|
186
|
+
List all canvas apps in my environment and who owns them
|
|
187
|
+
```
|
|
188
|
+
```
|
|
189
|
+
Share the "Expense Tracker" app with the Finance team
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Administration (requires Power Platform Admin, Dynamics 365 Admin, or Global Admin)
|
|
193
|
+
```
|
|
194
|
+
Create a new sandbox environment called "Dev Testing"
|
|
195
|
+
```
|
|
196
|
+
```
|
|
197
|
+
What DLP policies are applied to my default environment?
|
|
198
|
+
```
|
|
199
|
+
```
|
|
200
|
+
Export the "Sales Solution" as a managed solution for deployment
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Connectors & Expressions
|
|
204
|
+
```
|
|
205
|
+
What connectors are available for working with SharePoint?
|
|
206
|
+
```
|
|
207
|
+
```
|
|
208
|
+
What parameters does the "Send an email (V2)" action need?
|
|
86
209
|
```
|
|
87
210
|
|
|
88
|
-
## Available Tools (
|
|
211
|
+
## Available Tools (121 total)
|
|
89
212
|
|
|
90
213
|
### Core Flow Operations
|
|
91
214
|
| Tool | Description |
|
|
92
215
|
|------|-------------|
|
|
93
|
-
| `list_flows` | List flows
|
|
94
|
-
| `get_flow` | Get
|
|
95
|
-
| `create_flow` | Create a new flow |
|
|
96
|
-
| `update_flow` | Modify an existing flow |
|
|
216
|
+
| `list_flows` | List flows. `scope: "owned" \| "shared" \| "all"` filters by ownership; `includeOwner` shows the creator + `[owned]`/`[shared]` tag |
|
|
217
|
+
| `get_flow` | Get flow definition. `format: "summary" \| "json" \| "both"` — use `json`/`both` to capture nested actions inside Switch/If/Foreach/Scope |
|
|
218
|
+
| `create_flow` | Create a new flow (supports optional `description`) |
|
|
219
|
+
| `update_flow` | Modify an existing flow. Three modes: full replace (default), `mergeActions: true` (deep-merge — preserves siblings), or `patchActions: { "path": value }` (surgical, smallest payload). Also supports `description` |
|
|
97
220
|
| `delete_flow` | Delete a flow |
|
|
98
221
|
| `toggle_flow` | Enable or disable a flow |
|
|
99
222
|
| `clone_flow` | Copy flow to another environment |
|
|
@@ -104,6 +227,8 @@ Help me write an expression to format a date as "January 1, 2024"
|
|
|
104
227
|
| `test_flow` | Run flow with automatic diagnosis |
|
|
105
228
|
| `run_flow` | Trigger a manual flow |
|
|
106
229
|
| `get_runs` | Get flow run history |
|
|
230
|
+
| `get_run_actions` | Action-level debugging with full I/O visibility. Fetches inputs/outputs for failed actions by default; `includeInputs`/`includeOutputs` for all; `actionName` to drill into one action; `failedOnly` to filter |
|
|
231
|
+
| `get_run_action_repetitions` | Loop iteration drill-down for `Apply_to_each`/`Do_until`. Shows per-iteration status, inputs, outputs, errors. `failedOnly` + `maxIterations` for large loops |
|
|
107
232
|
| `diagnose_flow` | Analyze failures with fix suggestions |
|
|
108
233
|
| `validate_flow` | Validate with best practices score |
|
|
109
234
|
|
|
@@ -142,127 +267,131 @@ Help me write an expression to format a date as "January 1, 2024"
|
|
|
142
267
|
| `upload_sharepoint_file` | Upload a file (up to 4MB) |
|
|
143
268
|
| `get_sharepoint_file_content` | Download file content |
|
|
144
269
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
|
152
|
-
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
az login
|
|
163
|
-
./scripts/Register-PublishedApp.ps1
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
The script will:
|
|
167
|
-
1. Create the app registration
|
|
168
|
-
2. Configure required permissions
|
|
169
|
-
3. Output the admin consent URL
|
|
170
|
-
|
|
171
|
-
### Option 2: Manual Setup
|
|
172
|
-
|
|
173
|
-
1. Go to [Azure Portal](https://portal.azure.com) > **Microsoft Entra ID** > **App registrations** > **New registration**
|
|
174
|
-
|
|
175
|
-
2. Configure basic settings:
|
|
176
|
-
- **Name**: `Power Automate MCP`
|
|
177
|
-
- **Supported account types**: Accounts in any organizational directory (multi-tenant)
|
|
178
|
-
- **Redirect URI**: Select "Public client/native" and enter:
|
|
179
|
-
```
|
|
180
|
-
https://login.microsoftonline.com/common/oauth2/nativeclient
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
3. After creation, go to **Authentication** and enable:
|
|
184
|
-
- **Allow public client flows**: Yes
|
|
185
|
-
|
|
186
|
-
4. Go to **API permissions** > **Add a permission** and add:
|
|
187
|
-
|
|
188
|
-
| API | Permission | Type | Used For |
|
|
189
|
-
|-----|------------|------|----------|
|
|
190
|
-
| Microsoft Graph | `User.Read` | Delegated | User profile |
|
|
191
|
-
| Microsoft Graph | `Sites.ReadWrite.All` | Delegated | SharePoint sites, lists, files |
|
|
192
|
-
| Microsoft Graph | `Files.ReadWrite.All` | Delegated | OneDrive/SharePoint file operations |
|
|
193
|
-
| Power Automate (Flow Service) | `Flows.Read.All` | Delegated | Read flows |
|
|
194
|
-
| Power Automate (Flow Service) | `Flows.Manage.All` | Delegated | Create/update/delete flows |
|
|
195
|
-
| Dynamics CRM | `user_impersonation` | Delegated | Dataverse table/row CRUD |
|
|
270
|
+
### Power Apps
|
|
271
|
+
| Tool | Description |
|
|
272
|
+
|------|-------------|
|
|
273
|
+
| `list_canvas_apps` | List canvas apps |
|
|
274
|
+
| `get_canvas_app` | Get app details |
|
|
275
|
+
| `publish_canvas_app` | Publish an app |
|
|
276
|
+
| `list_model_driven_apps` | List model-driven apps |
|
|
277
|
+
| `get_model_driven_app` | Get model-driven app details |
|
|
278
|
+
| `list_app_versions` | List app version history |
|
|
279
|
+
| `get_app_permissions` | Get app permissions |
|
|
280
|
+
| `share_app` | Share an app with users/groups |
|
|
281
|
+
| `remove_app_permission` | Remove app access |
|
|
282
|
+
| `set_app_owner` | Transfer app ownership |
|
|
283
|
+
|
|
284
|
+
### Power Pages — Site Configuration (Dataverse)
|
|
285
|
+
Auto-detects each site's data model (standard `adx_*` vs enhanced `mspp_*` tables) and routes to the right tables. Requires a Dataverse-enabled environment.
|
|
196
286
|
|
|
197
|
-
|
|
287
|
+
| Tool | Description |
|
|
288
|
+
|------|-------------|
|
|
289
|
+
| `list_powerpages_sites` | List Power Pages sites in Dataverse, tagged by data model, with the site id for the tools below |
|
|
290
|
+
| `get_powerpages_site` | Get a site's Dataverse record + detected data model |
|
|
291
|
+
| `list_powerpages_components` | List a site's config components. `component`: `webpage`, `webrole`, `tablepermission`, `contentsnippet`, `webtemplate`, `pagetemplate`, `sitesetting`, `sitemarker`, `weblinkset`, `webfile`, `list`, `basicform`, `advancedform` |
|
|
292
|
+
| `get_powerpages_component` | Get a single config component by record id |
|
|
293
|
+
| `create_powerpages_component` | Create a config component (site link added automatically via `@odata.bind`) |
|
|
294
|
+
| `update_powerpages_component` | Update a config component |
|
|
295
|
+
| `delete_powerpages_component` | Delete a config component (with confirmation) |
|
|
198
296
|
|
|
199
|
-
###
|
|
297
|
+
### Power Pages — Site Management (Power Platform API)
|
|
298
|
+
> Requires the **Power Platform API** delegated permission on the app registration (see [App Registration](#microsoft-entra-app-registration)) and a Power Pages / Power Platform admin role.
|
|
200
299
|
|
|
201
|
-
|
|
300
|
+
| Tool | Description |
|
|
301
|
+
|------|-------------|
|
|
302
|
+
| `list_powerpages_websites` | List hosted websites (status, public URL, data model, type) |
|
|
303
|
+
| `get_powerpages_website` | Get a website's hosting details |
|
|
304
|
+
| `create_powerpages_website` | Provision a new website (asynchronous; `confirm` required) |
|
|
305
|
+
| `delete_powerpages_website` | Delete a website (`confirm` required) |
|
|
306
|
+
| `restart_powerpages_website` | Restart a website to apply Dataverse config changes (the API equivalent of the studio "Sync") |
|
|
202
307
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
```
|
|
308
|
+
### Environment Administration
|
|
309
|
+
> Requires **Power Platform Admin**, **Dynamics 365 Admin**, or **Global Admin** role.
|
|
206
310
|
|
|
207
|
-
|
|
311
|
+
| Tool | Description |
|
|
312
|
+
|------|-------------|
|
|
313
|
+
| `list_environments` | List all environments |
|
|
314
|
+
| `get_environment` | Get environment details |
|
|
315
|
+
| `create_environment` | Create a new environment |
|
|
316
|
+
| `delete_environment` | Delete an environment |
|
|
317
|
+
| `copy_environment` | Copy an environment |
|
|
318
|
+
| `reset_environment` | Reset an environment |
|
|
319
|
+
| `backup_environment` | Create a backup |
|
|
320
|
+
| `restore_environment` | Restore from backup |
|
|
321
|
+
|
|
322
|
+
### DLP Policies
|
|
323
|
+
> Requires **Power Platform Admin**, **Dynamics 365 Admin**, or **Global Admin** role.
|
|
208
324
|
|
|
209
|
-
|
|
325
|
+
| Tool | Description |
|
|
326
|
+
|------|-------------|
|
|
327
|
+
| `list_dlp_policies` | List data loss prevention policies |
|
|
328
|
+
| `get_dlp_policy` | Get policy details |
|
|
329
|
+
| `create_dlp_policy` | Create a new DLP policy |
|
|
330
|
+
| `update_dlp_policy` | Update an existing policy |
|
|
331
|
+
| `delete_dlp_policy` | Delete a policy |
|
|
332
|
+
| `list_policy_connectors` | List connectors by policy group |
|
|
333
|
+
|
|
334
|
+
### Solutions ALM
|
|
335
|
+
| Tool | Description |
|
|
336
|
+
|------|-------------|
|
|
337
|
+
| `list_solutions` | List Dataverse solutions |
|
|
338
|
+
| `get_solution` | Get solution details |
|
|
339
|
+
| `export_solution` | Export a solution |
|
|
340
|
+
| `import_solution` | Import a solution |
|
|
341
|
+
| `list_solution_components` | List components in a solution |
|
|
342
|
+
| `add_solution_component` | Add a component to a solution |
|
|
210
343
|
|
|
211
|
-
|
|
344
|
+
### Managed Environments & Capacity
|
|
345
|
+
> Requires **Power Platform Admin**, **Dynamics 365 Admin**, or **Global Admin** role.
|
|
212
346
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
347
|
+
| Tool | Description |
|
|
348
|
+
|------|-------------|
|
|
349
|
+
| `enable_managed_environment` | Enable managed environment |
|
|
350
|
+
| `disable_managed_environment` | Disable managed environment |
|
|
351
|
+
| `get_governance_settings` | Get governance configuration |
|
|
352
|
+
| `get_tenant_capacity` | Get tenant-level capacity |
|
|
353
|
+
| `get_capacity_alerts` | Get capacity alert notifications |
|
|
216
354
|
|
|
217
355
|
## Security
|
|
218
356
|
|
|
219
|
-
This server implements defense-in-depth security:
|
|
357
|
+
This server implements defense-in-depth security hardened through 3 rounds of penetration testing:
|
|
220
358
|
|
|
221
359
|
- **Secure Token Storage**: DPAPI (Windows), Keychain (macOS), libsecret on Linux when available, with a 0o600 file-cache fallback when it is not
|
|
222
|
-
- **
|
|
223
|
-
- **
|
|
224
|
-
- **
|
|
225
|
-
- **
|
|
226
|
-
- **
|
|
227
|
-
- **
|
|
228
|
-
- **
|
|
229
|
-
- **
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
```bash
|
|
234
|
-
# Clone and install
|
|
235
|
-
git clone https://github.com/rcb0727/powerautomate-mcp.git
|
|
236
|
-
cd powerautomate-mcp
|
|
237
|
-
npm install
|
|
238
|
-
|
|
239
|
-
# Build
|
|
240
|
-
npm run build
|
|
241
|
-
|
|
242
|
-
# Build in watch mode
|
|
243
|
-
npm run dev
|
|
244
|
-
|
|
245
|
-
# Test with MCP Inspector
|
|
246
|
-
npm run inspect
|
|
247
|
-
```
|
|
360
|
+
- **SSRF Prevention**: Comprehensive private host detection covering IPv4, IPv6, IPv6-mapped/compatible IPv4, octal/hex/decimal notation, ULA, link-local ranges, domain allowlists
|
|
361
|
+
- **OData Injection Protection**: Tautology detection across all comparison operators, parenthesized forms, arithmetic/function-based bypasses, Unicode NFC normalization, ASCII-only enforcement
|
|
362
|
+
- **Path Traversal Prevention**: NFKC Unicode normalization, bidi control character stripping, zero-width character removal, null byte rejection, URL double-encoding defense
|
|
363
|
+
- **Input Validation**: GUID validation on all IDs, field list validation, environment ID format checks, SharePoint hostname allowlist
|
|
364
|
+
- **Injection Prevention**: Power Automate expression injection blocking (`@{`/`}@`), command injection prevention (`execFile` over `exec`), prototype pollution defense
|
|
365
|
+
- **Error Sanitization**: Recursive sensitive key redaction (tokens, passwords, secrets), PII removal, stack trace suppression
|
|
366
|
+
- **Log Redaction**: Deep wildcard Pino redaction for auth headers, tokens, API keys
|
|
367
|
+
- **HTTP Transport Security**: Localhost-only binding, session-based Streamable HTTP, timing-safe API key comparison
|
|
368
|
+
- **Resource Limits**: 2MB input size limit, 20-level depth limit, 50MB JSON response limit, 100MB binary download limit
|
|
369
|
+
- **Config Hardening**: File permissions (0o600), symlink rejection, world-readable warnings
|
|
370
|
+
- **Auth Safety**: Token refresh mutex, MSAL PII filtering, MSAL verbose/trace suppression, silent-only mode in server
|
|
248
371
|
|
|
249
372
|
## Architecture
|
|
250
373
|
|
|
251
374
|
```
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
375
|
+
AI Client <--stdio/http--> powerautomate-mcp
|
|
376
|
+
(Claude, VS Code, |
|
|
377
|
+
Cursor, Gemini) ├── Power Automate Flow Management API
|
|
378
|
+
├── Power Apps API (canvas/model-driven apps)
|
|
379
|
+
├── Power Platform Admin API (environments, DLP, capacity)
|
|
380
|
+
├── Microsoft Graph API (SharePoint, OneDrive, Excel)
|
|
381
|
+
├── Dataverse Web API (tables, rows, solutions)
|
|
382
|
+
├── MSAL Auth (browser popup / device code)
|
|
383
|
+
├── SQLite Schema Cache (400+ connectors)
|
|
384
|
+
└── Secure Token Storage (OS keychain)
|
|
260
385
|
```
|
|
261
386
|
|
|
262
387
|
## License
|
|
263
388
|
|
|
264
389
|
MIT
|
|
265
390
|
|
|
266
|
-
##
|
|
391
|
+
## A Note of Thanks
|
|
392
|
+
|
|
393
|
+
Thank you for using this project — it is truly appreciated. Every install, bug report, and suggestion makes this a better tool, and I'm committed to fixing any issue that arises so we have the best Power Automate MCP server possible. If something isn't working for you, please open an issue. I read every one, and a solid reproduction gets a fast fix.
|
|
394
|
+
|
|
395
|
+
## Support
|
|
267
396
|
|
|
268
|
-
|
|
397
|
+
For issues and feature requests, please [open an issue](https://github.com/rcb0727/powerautomate-mcp-docs/issues) in this repository. Upgrading? See [Updating safely](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/INSTALL.md#updating) and the [Changelog](https://github.com/rcb0727/powerautomate-mcp-docs/blob/main/CHANGELOG.md).
|