MCPInstall

setup

Set up Power Automate CLI prerequisites. Use when the user is new, something isn't working, or they need help getting started.

Installs
150
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/microsoft/power-platform-skills --skill setup
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads setup automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

First-Time Setup Guide

You are helping a non-technical user get the Power Automate plugin working for the first time. Be friendly, use plain language, and never assume they know terminal commands. Walk them through each step one at a time.

Step 1: Check Node.js

Run silently:

node --version 2>&1
  • If it works (prints something like v18.x.x or higher): Tell them "Node.js is installed" and move on.
  • If it fails or version is below 18: Tell them they need Node.js 18 or newer. Ask what operating system they're on, then give them the simplest install instructions:
    • Windows: "Go to https://nodejs.org, download the LTS version, and run the installer. Click Next through everything."
    • Mac: "Open Terminal and run: brew install node" (or direct them to nodejs.org)
    • After they've installed it, re-check with node --version.

Step 2: Check Azure CLI

Run silently:

az --version 2>&1
  • If it works: Tell them "Azure CLI is installed" and move on.
  • If it fails: Tell them they need the Azure CLI. Ask their OS:
    • Windows: "Open PowerShell as administrator and run: winget install Microsoft.AzureCLI" or direct them to https://aka.ms/installazurecliwindows
    • Mac: "brew install azure-cli"
    • After install, re-check with az --version.

Step 3: Azure Login

Check if they're already logged in:

az account show --output json 2>&1
  • If it works (shows account info): Tell them who they're logged in as (show the user.name field) and ask if that's the right account.
  • If it fails: Tell them "Let's sign you into Azure." Then run:
    az login
    
    This will open their browser. Tell them: "A browser window should open. Sign in with your work account — the one you use for Power Automate." After login completes, confirm it worked by running az account show again.

Verify token access — this catches permission issues early.

First find out which Azure cloud they're on, because the Power Automate resource URL differs per cloud and the commercial one cannot be assumed (GCC High / DoD tenants will fail against it):

az cloud show --query name -o tsv
az cloud showPower Automate resource
AzureCloud (commercial)https://service.flow.microsoft.com
AzureCloud + GCC tenanthttps://gov.service.flow.microsoft.us
AzureUSGovernment (GCC High)https://high.service.flow.microsoft.us
AzureUSGovernment (DoD)Operator-verified PA_FLOW_RESOURCE value required; no built-in audience

az cloud show cannot distinguish commercial from GCC, or GCC High from DoD — for those, set PA_CLOUD=gcc / PA_CLOUD=dod explicitly.

DoD endpoint hosts use appsplatform.us, but that does not establish the token audience (App ID URI). With PA_CLOUD=dod, FlowAgent requires an explicit, operator-verified PA_FLOW_RESOURCE and fails configuration otherwise. Do not copy a guessed audience from a hostname; obtain the correct value for the tenant.

Then request a token for the matching resource, e.g. for commercial:

az account get-access-token --resource https://service.flow.microsoft.com --output json 2>&1

FlowAgent itself auto-detects the cloud the same way; you can override the detection with PA_CLOUD=commercial|gcc|gcchigh|dod.

  • If it works: Move on.
  • If it fails with "AADSTS": The user's account may not have Power Automate access. Tell them: "Your Azure account doesn't seem to have access to Power Automate. Check with your IT admin that you have a Power Automate license."
  • If it fails with other errors: Show the error and suggest they contact IT support.
  • If they're on a sovereign cloud and connection-management commands fail: keep the original error and inspect its code. AADSTS650057 can indicate an invalid resource or missing app authorization; AADSTS65001 can require admin consent. An app-not-found or consent failure may require an appropriately authorized public-client registration and PA_CLIENT_ID=<app-id>. Network, tenant-selection and expired-session errors need different remediation. Do not infer missing preauthorization from the cloud name or classify every other code as unrelated.

Signing in to a specific account

Connection management authenticates separately from az — it uses its own MSAL session with its own on-disk token cache, so az login / az account set do not switch the account it uses.

Three tools cover this:

ToolUse it to
list_accountsSee the cached-account inventory, effectiveConnectivityIdentity, and nextSignIn settings. Inactive tenant caches do not count as identity mismatches. Acquires no token.
switch_accountSave a preferred username, or omit it to clear the preference. Check preferencePersisted and nextSignIn: environment overrides still apply.
whoami / doctorCompare the effective Connectivity username and tenant with Azure CLI, including different users in the same tenant.

When a connection tool fails with ServiceToServiceEnvironmentNotFound, check identity before assuming the environment is missing. list_accounts distinguishes the effective account from historical cached accounts. A different username or tenant on the effective account indicates a mismatch; an unused tenant's cache alone does not. switch_account clears the cached sign-in and records the preferred username for reauthentication. It does not prove that the subsequent sign-in succeeded or that environment permissions are correct.

switch_account does not change the Azure CLI identity. az is yours to set; where the two disagree, the tool says so rather than silently re-pointing one. reconnect keeps a recorded preference — it drops credentials, and the preference is a stated intent rather than a credential. It waits for pending token acquisition and cache cleanup, then clears in-memory tokens for all Azure CLI resources as well as Connectivity. A cleanup failure is an error, not a completed switch: fix the cache access problem and retry. Do not continue under the assumption that credentials changed when reset failed.

On interactive sign-in FlowAgent forces the account picker by default, so the browser's currently-signed-in account is never used silently. Two overrides:

VariableEffect
PA_LOGIN_HINT=<upn>Pre-select that account. Suppresses the picker, since the account is already targeted.
PA_NO_ACCOUNT_PICKER=1Restore plain browser SSO. For single-account users who don't want the extra click.

Precedence, most specific first: PA_LOGIN_HINT, then a switch_account preference, then PA_NO_ACCOUNT_PICKER, then the picker. For example, switch_account with username B still targets A if PA_LOGIN_HINT=A is set. Omitting the username clears only the stored preference; it does not override PA_LOGIN_HINT or PA_NO_ACCOUNT_PICKER. The response reports the effective settings instead of promising a picker in those cases.

Step 4: Check the FlowAgent tools are wired

The plugin talks to Power Automate through the FlowAgent MCP server, which is registered as flowagent in the plugin's .mcp.json and started automatically. .mcp.json loads the bundled server/mcp.mjs through a small Node bootstrap that resolves the plugin's installation directory (PLUGIN_ROOT, else CLAUDE_PLUGIN_ROOT, else the current directory) and prints an actionable error if the bundle can't be found.

  • If flowagent-* / mcp__flowagent__* tools appear in your tool list: tell them "The Power Automate tools are connected" and move on.

  • If they're missing: the MCP server isn't registered. Fix it automatically:

    1. Locate the installed plugin's MCP bundle. This only matches a bundle inside a power-automate plugin directory, so it can't pick up another plugin's MCP server:

      node -e "const fs=require('fs'),p=require('path'),d=p.join(process.env.HOME||process.env.USERPROFILE,'.copilot','installed-plugins');const find=(dir)=>{let out=[];for(const e of fs.readdirSync(dir,{withFileTypes:true})){const f=p.join(dir,e.name);if(e.isDirectory()){try{out=out.concat(find(f))}catch{}}else if(e.name==='mcp.mjs'&&p.basename(p.dirname(dir))==='power-automate'){out.push(dir)}}return out};try{const hits=find(d);if(hits.length===1)console.log(JSON.stringify({found:true,serverDir:hits[0],mcpMjs:p.join(hits[0],'mcp.mjs')}));else if(hits.length>1)console.log(JSON.stringify({found:false,reason:'multiple power-automate bundles',candidates:hits}));else console.log(JSON.stringify({found:false}))}catch(e){console.log(JSON.stringify({found:false,error:e.message}))}"
      

      If it reports multiple power-automate bundles, show the candidates and ask the user which one to register rather than guessing.

    2. If exactly one was found, read ~/.copilot/mcp-config.json, add the flowagent MCP entry, and write it back:

      node -e "const fs=require('fs'),p=require('path');const home=process.env.HOME||process.env.USERPROFILE;const cfgPath=p.join(home,'.copilot','mcp-config.json');let cfg;try{cfg=JSON.parse(fs.readFileSync(cfgPath,'utf8'))}catch{cfg={mcpServers:{}}};if(!cfg.mcpServers)cfg.mcpServers={};if(cfg.mcpServers.flowagent){console.log('already registered');process.exit(0)}const d=p.join(home,'.copilot','installed-plugins');const find=(dir)=>{let out=[];for(const e of fs.readdirSync(dir,{withFileTypes:true})){const f=p.join(dir,e.name);if(e.isDirectory()){try{out=out.concat(find(f))}catch{}}else if(e.name==='mcp.mjs'&&p.basename(p.dirname(dir))==='power-automate'){out.push(dir)}}return out};const hits=find(d);if(hits.length!==1){console.log(hits.length?'ambiguous: '+JSON.stringify(hits):'mcp.mjs not found');process.exit(1)}const mcpPath=p.join(hits[0],'mcp.mjs');cfg.mcpServers.flowagent={command:'node',args:[mcpPath]};fs.writeFileSync(cfgPath,JSON.stringify(cfg,null,2)+'\n');console.log('registered flowagent MCP at '+mcpPath)"
      
    3. Tell the user to restart the agent (Copilot CLI: /restart, Claude Code: restart the process). After restart, flowagent-* tools should appear.

    4. If not found (plugin not installed at all): tell them to install the plugin first:

      /plugin marketplace add microsoft/power-platform-skills
      

      Then select power-automate and run /setup again.

Step 5: Smoke Test

Verify everything works end-to-end by listing the user's environments:

  • Preferred: call the list_environments tool.

  • If MCP tools aren't available: run node <path-to-plugin>/server/mcp.mjs to confirm the bundled MCP server starts cleanly, then fix the plugin install or .mcp.json wiring before retrying.

  • If it returns environments: Success! Tell them:

    • "Everything is working! Here are your Power Automate environments:"
    • Show the environments in a simple table (name, location).
    • If there are multiple, ask which one they mainly use and suggest setting it as the default (the set_current_env tool, or ask "set my default environment to <name>").
    • Tell them about the available skills:
      • /browse-flows — Browse your flows
      • /create-flow — Create a new flow
      • /debug-flow — Fix a broken flow
  • If it fails: Check the error. Common issues:

    • Auth error → go back to Step 3
    • Tools not found → go back to Step 4
    • Network error → ask if they're behind a corporate proxy/VPN

Tone Guidelines

  • Use "we" language: "Let's check if Node.js is installed"
  • Celebrate small wins: "Great, Node.js is ready!"
  • Don't dump all steps at once — do one at a time and confirm before moving on
  • If something fails, don't panic — explain what went wrong in plain English and what to do
  • Never show raw JSON errors to the user without explaining what they mean

FAQ

What does the setup skill do?

Set up Power Automate CLI prerequisites. Use when the user is new, something isn't working, or they need help getting started.

How do I install setup?

Run npx skills add https://github.com/microsoft/power-platform-skills --skill setup in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/setup/ (personal) or .claude/skills/setup/ (project).

Which AI agents can use setup?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is setup safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains setup?

It is published by microsoft in microsoft/power-platform-skills. It has 150 recorded installs.

More from microsoft/power-platform-skills

View all →

add-sharepoint

microsoft/power-platform-skills

Adds SharePoint Online connector to a Power Apps code app. Use when reading lists, managing documents, or integrating with SharePoint sites. Can also create new SharePoint lists.

Official337 installs

create-code-app

microsoft/power-platform-skills

Creates Power Apps code apps using React and Vite. Use when building code apps, scaffolding projects, or deploying to Power Platform.

OfficialFrontend & Design308 installs

add-dataverse

microsoft/power-platform-skills

Adds Dataverse tables to a Power Apps code app with generated TypeScript models and services. Can also create new Dataverse tables. Use when connecting to Dataverse, adding tables, creating schema, or querying Dataverse data.

OfficialCode Quality & Workflow304 installs

configure-canvas-mcp

microsoft/power-platform-skills

Configure the Canvas Authoring MCP server for the current coauthoring session. Use before starting to edit a canvas app with the /canvas-app skill if not already connected. 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".

OfficialAI & Agents296 installs

add-office365

microsoft/power-platform-skills

Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.

Official289 installs

canvas-app

microsoft/power-platform-skills

Creates or edits a Power Apps Canvas App through the Canvas Authoring MCP coauthoring session. Handles staged experience design, direct and partitioned targeted edits, planned multi-screen changes, responsive layout, and compile-error convergence. Trigger on requests to create, build, generate, modify, update, change, fix, or edit a Canvas App or .pa.yaml files.

OfficialFrontend & Design284 installs

Popular productivity & automation skills

View category →

agent-browser

vercel-labs/agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.

OfficialProductivity & Automation1.3M installs

lark-doc

open.feishu.cn

飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。

lark-base

open.feishu.cn

飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。

lark-drive

open.feishu.cn

飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。

lark-shared

open.feishu.cn

Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.

lark-im

open.feishu.cn

飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。