add-data-source
Guide the user to add a data source, connection, or API connector to a Canvas App via Power Apps Studio, then verify and…
Deploy the dispatcher PCF for a third-party `.ppmplugin` control to a Power Platform environment via `pac pcf push`. The dispatcher PCF is the Studio-side control that dispatches the composite key `<name>/<receiver>` over the wrap shell's `SendMessagePlugin` bridge to the
Claude Code
$ npx -y skills add microsoft/power-platform-skills --skill publish-pcf-companion --agent claude-code
Codex
$ npx skills add microsoft/power-platform-skills --skill publish-pcf-companion -a codex -y
Cursor
$ npx skills add microsoft/power-platform-skills --skill publish-pcf-companion -a cursor -y
Gemini CLI
$ npx skills add microsoft/power-platform-skills --skill publish-pcf-companion -a gemini-cli -y
GitHub Copilot
$ npx skills add microsoft/power-platform-skills --skill publish-pcf-companion -a github-copilot -y
OpenCode
$ npx skills add microsoft/power-platform-skills --skill publish-pcf-companion -a opencode -y
Windsurf
$ npx skills add microsoft/power-platform-skills --skill publish-pcf-companion -a windsurf -y
name: publish-pcf-companion description: Deploy the dispatcher PCF for a third-party `.ppmplugin` control to a Power Platform environment via `pac pcf push`. The dispatcher PCF is the Studio-side control that dispatches the composite key `<name>/<receiver>` over the wrap shell's `SendMessagePlugin` bridge to the control's native module. Verifies deploy prereqs (Node.js 20+ with npm, .NET SDK, and active `pac auth`), then three confirmation gates — publisher prefix (2–8 chars; defaults to `pamext` or the last-used value from `.extension-state.md`), version bump (patch / minor / major / no-bump), target environment URL (from `pac org who`). Builds the PCF if needed, then pushes. Decoupled from /generate-pcf-companion so the engineer can scaffold and customize locally, then deploy when ready. Updates `.extension-state.md` with deployment history (timestamp, env URL, version, prefix used). allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Skill model: sonnet
On-demand deployment of the **dispatcher PCF** for a third-party `.ppmplugin` control to a Power Platform environment. The dispatcher PCF is the Studio-side control that dispatches the composite key `<name>/<receiver>` over the wrap shell's `SendMessagePlugin` bridge to the control's native module. Runs `pac pcf push` against the user's active `pac auth` profile. Decoupled from `/generate-pcf-companion` — the engineer scaffolds locally, customizes / iterates, then deploys when ready.
---
1. Read [`shared/shared-instructions.md`](../../shared/shared-instructions.md), [`shared/naming-conventions.md`](../../shared/naming-conventions.md). 2. Apply the **per-skill minimal prereq policy** ([`shared-instructions.md §1.5`](../../shared/shared-instructions.md)). This skill needs Node.js 20+ with npm, `pac` CLI, .NET SDK, and an active `pac auth` profile. It does not need pnpm.
**Print the prereq status as a visible block per `shared-instructions.md §9.2`** before continuing:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Prereq check — /publish-pcf-companion
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 ✓ Node.js 20+ and npm installed (for npm install / npm run build)
🟢 ✓ pac CLI installed (for pac pcf push)
🟢 ✓ .NET SDK installed (solution build runs inside pac pcf push)
🟢 ✓ pac auth profile active (target env: <env URL from pac org who>)
🟢 4 checks passed. Ready to proceed.Fix table for failures:
| Missing | `→ Fix:` line in the failure block | |---|---| | Node.js / npm | Install Node.js 20 LTS from `https://nodejs.org`, then verify with `node -v` and `npm -v` | | `pac` CLI | `dotnet tool install -g Microsoft.PowerApps.CLI.Tool` (chains on .NET SDK first if also missing) | | .NET SDK | `brew install dotnet` (mac) / `winget install Microsoft.DotNet.SDK.10` (win) / package manager (linux) | | No active `pac auth` | `pac auth create --environment <your-env-url>` (interactive browser flow; use an identity with access to the target Power Platform environment). **Do not reach for `--deviceCode` first** — it's a headless-shell fallback that commonly fails under Conditional Access. |
Run the `/publish-pcf-companion` check from [`prereq-check.md`](../../shared/prereq-check.md). Per the auto-fix policy (shared-instructions §1.5): a missing `pac` CLI is auto-fixable when .NET is present — **offer `dotnet tool install -g Microsoft.PowerApps.CLI.Tool` and continue on `yes`**; no active `pac auth` → **initiate `pac auth create --environment <url>`** (browser) and verify after. If an auth attempt *fails*, walk the variant ladder in [`prereq-check.md`](../../shared/prereq-check.md) (browser → device code only if headless → back to browser with `--environment` → `pac auth clear`) — change a variable each step and never re-run a variant that already failed. A missing **.NET SDK** hard-stops (system-wide install — print the command). 3. Read `./PRD.md`. Required — the skill derives the PCF folder name (`pcf/<Pascal>PCF/`) and publisher prefix from PRD §2. If PRD is missing, STOP with `BLOCKED: PRD.md missing — cannot determine PCF folder name`. 4. Read `./.extension-state.md` if present. The state file is informational; this skill works without it but uses Phase info to surface "scaffold-pcf hasn't happened yet" early.
---
Build a status dashboard so the user sees what was detected before any action.
**Discover the PCF folder robustly** — don't assume the exact nesting depth. Use Glob to find `pcf/**/ControlManifest.Input.xml` and select the first match. `pac pcf init` normally produces `pcf/<Pascal>PCF/<Pascal>PCF/ControlManifest.Input.xml`, but case differences and manual restructuring should not break discovery. If `pcf/` is absent, stop with `BLOCKED: no pcf/ directory — PCF has not been scaffolded. Run /generate-pcf-companion first.` If `pcf/` exists but the manifest is absent, list the relevant files with Glob and stop with `BLOCKED: pcf/ exists but no ControlManifest.Input.xml was found.`
Derive the PCF project root from the manifest path by moving up two directory levels. Use Glob to check whether `<PCF_PROJECT_ROOT>/out/` exists. Use Read to extract the `<control version="X.Y.Z">` value from the manifest and the latest deployment version from `.extension-state.md`. Run `pac org who` to retrieve the active environment because that is a real toolchain command.
Print:
PCF deploy status ───────────────── Repo: <cwd> PCF project root: <PCF_PROJECT_ROOT from find> Manifest: <MANIFEST path> Built (out/): <yes | no — will build now> Current manifest version: <CURRENT_VERSION> Last deployed version: <LAST_DEPLOYED or "none — first deploy"> Publisher prefix: <LAST_PREFIX from .extension-state.md, else `pamext` default — confirmed in Step 3.0> Active pac auth env: <
Plugins from Microsoft that teach AI assistants, such as GitHub Copilot and Claude Code, to build on Power Platform.
Guide the user to add a data source, connection, or API connector to a Canvas App via Power Apps Studio, then verify and…
Creates or edits a Power Apps Canvas App through the Canvas Authoring MCP coauthoring session. Handles staged experience design,…
Configure the Canvas Authoring MCP server for the current coauthoring session. Use before starting to edit a canvas app with the…
Use this skill when the user wants to "report a bug", "file an issue", "report an issue", "submit a bug report", or report any…
Adds Azure DevOps connector to a Power Apps code app. Use when querying work items, creating bugs, managing pipelines, or making…
Adds any Power Platform connector to a Power Apps code app. Generic fallback for connectors not covered by a specific skill.
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.