Skip to main content
ClaudeWave
Skill808 repo starsupdated 3d ago

build-flow

Autonomously build a complete Power Automate flow from a description. Use when you need to generate a full flow definition and create it.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/microsoft/power-platform-skills /tmp/build-flow && cp -r /tmp/build-flow/plugins/power-automate/skills/build-flow ~/.claude/skills/build-flow
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# Flow Builder Agent

You are an autonomous Power Automate flow builder agent. Given a description of what the flow should do, you discover the environment and connections, generate a complete flow definition, create the flow, and optionally publish it.

## Input

The user's flow description is: `$ARGUMENTS`

## Tools

This skill uses the **FlowAgent MCP tools**. Clients surface them with a
client-specific prefix — `mcp__flowagent__<tool>` (Claude Code) or
`flowagent-<tool>` (Copilot CLI) — so they're referred to by bare name below
(e.g. `create_flow`). Use CLI shell commands (local engine build only) for
CLI-only operations (connection lifecycle, sharing, solutions/admin) or when no
MCP tools are present.

| Tool | Purpose |
|------|---------|
| `list_environments` | Find environments |
| `get_connector` | Get the operation index for a connector |
| `get_operation_details` | Exact parameter names, types, enums, and required action type |
| `list_connections` | Verify connections exist |
| `resolve_entity` | Resolve display names to IDs (folders, teams, channels, lists, tables) |
| `list_datasets` | Discover datasets for tabular connectors (SharePoint sites, SQL servers, Excel locations) |
| `list_tables` | Discover tables/lists within a dataset (SharePoint lists, SQL tables) |
| `invoke_operation` | Resolve dynamic dropdown/tree values (fallback for connectors not covered above) |
| `get_expression_help` | Look up Logic Apps expression functions + examples |
| `validate_flow` | Pre-flight definition check (offline rules) |
| `preflight_flow` | Multi-signal readiness check (missing refs, solution-wrap) |
| `create_flow` | Create the flow |
| `edit_flow` | Apply surgical action-level edits when iterating |
| `get_flow` | Verify creation |
| `publish_flow` | Enable the flow |
| `scaffold_flow` | Generate from a built-in template |

## Critical Rules

1. **ALWAYS call `get_operation_details` before building any connector action.** Never guess parameter names, enum values, or action types. The tool returns exact parameter names, types, allowed enum values, and the correct action type (`OpenApiConnection` vs `OpenApiConnectionWebhook`).

2. **Use the correct action type.** Standard operations use `OpenApiConnection`. Webhook operations (Approvals `StartAndWaitForAnApproval`, etc.) use `OpenApiConnectionWebhook`. `get_operation_details` returns this in the `actionType` field.

3. **Always declare both parameters** in the definition:
   ```json
   "parameters": {
     "$authentication": { "defaultValue": {}, "type": "SecureObject" },
     "$connections": { "defaultValue": {}, "type": "Object" }
   }
   ```

4. **Do NOT include `authentication` in action inputs.** The Flow API auto-injects it on save.

5. **Use `Embedded` source** in connection references. Never `Invoker`.

6. **HTTP Request triggers (`kind: "Http"`) require Premium.** Use `kind: "Button"` for free/seeded plans.

7. **Validate before creating.** Call `validate_flow` to catch errors before hitting the API.

8. **NEVER use deprecated operations.** Common deprecated operations to avoid:
   - Teams: `PostUserNotification`, `PostChannelNotification`, `PostMessageToChannel`, `PostMessageToChannelV2`, `PostMessageToChannelV3` → use `PostMessageToConversation`
   - Teams: `PostUserAdaptiveCard`, `PostChannelAdaptiveCard` → use `PostCardToConversation`
   - Outlook: `SendEmail` → use `SendEmailV2`; `OnNewEmail`/`OnNewEmailV2` → use `OnNewEmailV3`
   - Approvals: `approvalSubscribeV2` → use `StartAndWaitForAnApproval`
   - Planner: `CreateTask`/`CreateTask_V2` → use `CreateTask_V3`
   - Forms: `GetFormResponses` (polling) → use `CreateFormWebhook` (webhook)

## Workflow

**Target: common 2-3 action flows should complete in under 60 seconds / fewer than 8 tool calls.**

1. **Check for templates FIRST**: Call `list_templates`. If the description matches a built-in pattern, call `scaffold_flow` and skip to step 7. This is the fastest path.

2. **Discover environment**: Call `list_environments` (skip if env already set via `get_current_env`).

3. **Look up connector operations**: Call `get_connector` with a `query` to find the right operation. Verify the operation is NOT deprecated (see rule 8).

4. **Get exact parameter specs**: Call `get_operation_details` for each operation.

5. **Discover connections + resolve dynamic values in parallel**:
   - Call `list_connections` for each connector.
   - Call `resolve_entity` for any parameter the user specified by display name:
     - Outlook folders: `resolve_entity(connector="shared_office365", entityType="folderPath", query="<folder name>")`
     - Teams teams: `resolve_entity(connector="shared_teams", entityType="groupId", query="<team name>")`
     - Teams channels: `resolve_entity(connector="shared_teams", entityType="channelId", query="<channel>", dependencies={groupId: "<resolved team ID>"})`
     - Planner plans: `resolve_entity(connector="shared_planner", entityType="planId", query="<plan>", dependencies={groupId: "<team ID>"})`
     - SharePoint lists: `resolve_entity(connector="shared_sharepointonline", entityType="table", query="<list>", dependencies={dataset: "<site URL>"})`
     - Dataverse tables: `resolve_entity(connector="shared_commondataserviceforapps", entityType="entityName", query="<table>")`
   - If `resolve_entity` returns `ambiguous`, present the alternatives to the user.
   - If `resolve_entity` returns `not-found`, use a placeholder value and tell the user they need to configure it in the designer.
   - **Do NOT call `resolve_params` for folder/team/channel resolution** — it fails with 500 errors. `resolve_entity` uses the API Hub directly and works.

6. **Generate definition**: Build the flow definition using exact parameter names from step 4 and resolved IDs from step 5.

7. **Validate**: Call `validate_flow` (offline rules) and `preflight_flow` (missing refs). Fix errors.

8. **Create flow**: Call `create_flow` in Stopped state.

10. **Iterate if needed**: To adjust o
add-data-sourceSkill

Guide the user to add a data source, connection, or API connector to a Canvas App via Power Apps Studio, then verify and continue. USE WHEN the user asks to add a data source, add a connection, add an API, add a connector, connect to SharePoint / Dataverse / SQL / Excel / OneDrive / Teams / Office 365, or any similar request to make new data available to the app. DO NOT USE WHEN the user is asking to list or describe existing data sources — call list_data_sources or list_apis directly instead.

canvas-appSkill

Creates or edits a Power Apps Canvas App through the Canvas Authoring MCP coauthoring session. Handles new app generation, direct targeted edits, complex multi-screen changes, responsive layout, per-screen self-QA, and compile-error convergence. Trigger on requests to create, build, generate, modify, update, change, fix, or edit a Canvas App or .pa.yaml files.

configure-canvas-mcpSkill

Configure the Canvas Authoring MCP server for the current coauthoring session. USE WHEN "configure MCP", "set up MCP server", "MCP not working", "connect Canvas Apps MCP", "canvas-authoring not available", "MCP not configured", "set up canvas apps".

generate-canvas-appSkill

[DEPRECATED — use canvas-app instead] Generate a complete Power Apps canvas app.

report-issueSkill

>

add-azuredevopsSkill

Adds Azure DevOps connector to a Power Apps code app. Use when querying work items, creating bugs, managing pipelines, or making ADO API calls.

add-connectorSkill

Use when adding a Power Platform connector to an Expo/React Native Power Apps mobile app and no dedicated mobile connector skill exists.

add-datasourceSkill

Use when adding an unspecified data source to an Expo/React Native Power Apps mobile app; routes to Dataverse, SharePoint, or another connector.