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 CHANGED
@@ -1,6 +1,19 @@
1
1
  # Power Automate MCP Server
2
2
 
3
- An MCP (Model Context Protocol) server that connects Claude to Microsoft Power Automate. Create, manage, and deploy Power Automate flows using natural language.
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
- ### Prerequisites
37
+ ```bash
38
+ npm install -g powerautomate-mcp
39
+ powerautomate-mcp --setup
40
+ ```
18
41
 
19
- - Node.js 20+
20
- - Microsoft 365 work account with Power Automate access
21
- - **Linux only**: libsecret for secure token storage
22
- ```bash
23
- # Ubuntu/Debian runtime
24
- sudo apt-get install libsecret-1-0 gnome-keyring
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
- # Fedora/RHEL runtime
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
- If setup fails with `libsecret-1.so.0: cannot open shared object file`, the
31
- runtime package above is missing.
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
- ### Installation
60
+ ---
34
61
 
35
- ```bash
36
- npm install -g powerautomate-mcp
37
- ```
62
+ ## Microsoft Entra App Registration
38
63
 
39
- ### First-Time Setup
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
- ```bash
42
- powerautomate-mcp --setup
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
- This interactive wizard will:
46
- 1. Sign you in via browser
47
- 2. Discover your Power Automate environments
48
- 3. Create the configuration file
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
- ### Register with Claude
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
- Add to your Claude configuration:
99
+ 3. After creation, go to **Authentication** and enable:
100
+ - **Allow public client flows**: Yes
53
101
 
54
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
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
- ```json
59
- {
60
- "mcpServers": {
61
- "powerautomate": {
62
- "command": "powerautomate-mcp"
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
- Restart Claude. The Power Automate tools will appear automatically.
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
- What connectors are available for working with SharePoint?
172
+ ```
173
+ Upload this month's report to the Shared Documents library
82
174
  ```
83
175
 
176
+ ### Dataverse
84
177
  ```
85
- Help me write an expression to format a date as "January 1, 2024"
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 (63 total)
211
+ ## Available Tools (121 total)
89
212
 
90
213
  ### Core Flow Operations
91
214
  | Tool | Description |
92
215
  |------|-------------|
93
- | `list_flows` | List flows in an environment |
94
- | `get_flow` | Get full flow definition |
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
- ## Microsoft Entra App Registration (Required)
146
-
147
- Before using this MCP server, an Microsoft Entra app registration must be configured in your tenant. This requires **Global Administrator** or **Application Administrator** role.
148
-
149
- ### Who Needs to Do This?
150
-
151
- | Role | Action Required |
152
- |------|-----------------|
153
- | IT Admin / Global Admin | Create app registration, grant admin consent |
154
- | End Users | Just run `powerautomate-mcp --setup` after admin completes setup |
155
-
156
- ### Option 1: PowerShell Script (Recommended)
157
-
158
- ```powershell
159
- # Requires: Azure CLI (https://aka.ms/installazurecli)
160
- # Requires: Global Admin or Application Administrator role
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
- 5. Click **Grant admin consent for [Your Tenant]** (requires admin role)
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
- ### Admin Consent
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
- After creating the app, admin consent is required for users to authenticate:
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
- https://login.microsoftonline.com/common/adminconsent?client_id=YOUR_CLIENT_ID
205
- ```
308
+ ### Environment Administration
309
+ > Requires **Power Platform Admin**, **Dynamics 365 Admin**, or **Global Admin** role.
206
310
 
207
- Replace `YOUR_CLIENT_ID` with the Application (client) ID from your app registration.
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
- ### Update the MCP Server
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
- After creating your app registration, update `src/setup/published-app.ts` with your client ID and rebuild:
344
+ ### Managed Environments & Capacity
345
+ > Requires **Power Platform Admin**, **Dynamics 365 Admin**, or **Global Admin** role.
212
346
 
213
- ```bash
214
- npm run build
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
- - **Input Validation**: GUID validation on all IDs, OData injection protection (ASCII-only), path traversal blocking (including URL-encoded), SharePoint hostname allowlist
223
- - **SSRF Prevention**: Domain allowlists on Dataverse URLs, resource links, and token resources
224
- - **Injection Prevention**: Power Automate expression injection blocking (`@{`/`}@`), OData filter sanitization, command injection prevention (`execFile` over `exec`)
225
- - **Log Redaction**: Deep wildcard Pino redaction for tokens, passwords, secrets, API keys, refresh/ID tokens, connection names
226
- - **Error Sanitization**: PII, file paths, GUIDs, bearer tokens, and JWTs stripped from error messages
227
- - **HTTP Transport Security**: Localhost-only binding, timing-safe API key comparison, header-only auth (no query params), CORS restricted
228
- - **Resource Limits**: 50MB streaming JSON response limit, 100MB binary download limit, 4MB upload pre-check
229
- - **Auth Safety**: Token refresh mutex (prevents race conditions), MSAL PII filtering, silent-only mode in server
230
-
231
- ## Development
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
- Claude <--stdio/http--> powerautomate-mcp
253
- |
254
- ├── Power Automate Flow Management API
255
- ├── Microsoft Graph API (SharePoint, OneDrive, Excel)
256
- ├── Dataverse Web API (tables, rows, solutions)
257
- ├── MSAL Auth (browser popup / device code)
258
- ├── SQLite Schema Cache (400+ connectors)
259
- └── Secure Token Storage (OS keychain)
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
- ## Contributing
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
- PRs welcome! See [CLAUDE.md](./CLAUDE.md) for development workflow.
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).