Power-platform-skills configure-canvas-mcp
Configure the Canvas Authoring MCP server for Claude Code, VS Code Copilot, or GitHub Copilot CLI. 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". DO NOT USE WHEN prerequisites are missing — direct the user to install .NET 10 SDK first.
git clone https://github.com/microsoft/power-platform-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/microsoft/power-platform-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/canvas-apps/skills/configure-canvas-mcp" ~/.claude/skills/microsoft-power-platform-skills-configure-canvas-mcp && rm -rf "$T"
plugins/canvas-apps/skills/configure-canvas-mcp/SKILL.mdConfigure the Canvas Authoring MCP Server
This skill registers the Canvas Authoring MCP server with Claude Code, VS Code Copilot, or GitHub Copilot CLI using the user's Power Platform environment ID.
Instructions
0. Check prerequisites
Verify that .NET 10 SDK or higher is installed
dotnet --list-sdks
If a version 10.x.y or higher is not listed, tell the user:
⚠️ .NET 10 SDK is required to run the Canvas Authoring MCP server. It looks like you don't have it installed. Please install it first to use this skill. https://dotnet.microsoft.com/download/dotnet/10.0
Then wait for the user to install it before continuing. If they say it's installed, run the command again to confirm. If it's still not found, repeat the message until they have it installed.
1. Determine which tool to configure
Determine whether the user needs to configure MCP for VS Code Copilot, GitHub Copilot CLI, or Claude Code:
- If explicitly mentioned in prompt, use that.
- Otherwise, determine which tool the user is running from the context.
- Only if choosing based on the context is impossible, ask the user:
Which tool would you like to configure the Canvas Authoring (canvas-authoring) MCP server for?
- VS Code Copilot
- GitHub Copilot CLI
- Claude
Based on the result, set the
TOOL_TYPE variable to vscode-copilot, copilot, or claude. Store this for use in all subsequent steps.
2. Determine the MCP scope
Choose the configuration scope based on the tool. Use the scope explicitly mentioned by the user, or ask the user to choose.
If TOOL_TYPE is
:vscode-copilot
There is only one configuration path:
.vscode/mcp.json (relative to the current working directory).
Set
CONFIG_PATH = .vscode/mcp.json. No scope selection is needed.
Store this path for use in steps 4 and 5.
If TOOL_TYPE is
:copilot
The options are:
- Globally (default, available in all projects)
- Project-only (available only in this project)
Based on the scope, set the
CONFIG_PATH variable:
- Global:
(use the user's home directory)~/.copilot/mcp-config.json - Project:
(relative to the current working directory).mcp/copilot/mcp.json
Store this path for use in steps 4 and 5.
If TOOL_TYPE is
:claude
The options are:
- User (available in all projects for this user)
- Project (default, available only in this project)
- Local (scoped to current project directory)
Based on the scope, set the
CLAUDE_SCOPE variable:
- User:
=CLAUDE_SCOPEuser - Project:
=CLAUDE_SCOPEproject - Local:
=CLAUDE_SCOPElocal
Store this value for use in step 5.
3. Ask for the studio URL
Ask the user:
What is the URL of your canvas app studio session?
Copy the URL from the browser address bar while your app is open in Power Apps Designer (it should look like
).https://make.powerapps.com/e/Default-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/canvas/?action=edit&app-id=...Make sure coauthoring is enabled in the app (Settings → Updates → Coauthoring).
Then extract from the URL:
- ENV_ID: the path segment between
and the next/e/
(e.g./
).Default-91bee3d9-0c15-4f17-8624-c92bb8b36ead - APP_ID: URL-decode the
query parameter value, then take the last segment after the finalapp-id
(e.g./
)6fc3e3d1-292b-4281-8826-577f78512e56 - MAKER_HOSTNAME: the hostname of the URL (e.g.
)make.powerapps.com - CLUSTER_CATEGORY: determined from MAKER_HOSTNAME (see table below)
Determine CLUSTER_CATEGORY from MAKER_HOSTNAME:
| MAKER_HOSTNAME | CLUSTER_CATEGORY |
|---|---|
| |
| |
| Any other hostname | |
Example:
Example URL:
https://make.powerapps.com/e/Default-91bee3d9-0c15-4f17-8624-c92bb8b36ead/canvas/?action=edit&app-id=%2Fproviders%2FMicrosoft.PowerApps%2Fapps%2F6fc3e3d1-292b-4281-8826-577f78512e56
- ENV_ID →
Default-91bee3d9-0c15-4f17-8624-c92bb8b36ead - APP_ID →
6fc3e3d1-292b-4281-8826-577f78512e56 - MAKER_HOSTNAME →
make.powerapps.com - CLUSTER_CATEGORY →
prod
Store these as
ENV_ID, APP_ID, and CLUSTER_CATEGORY for use in step 4.
4. Register the MCP server
If TOOL_TYPE is
:
Run the following command to register the server with Claude Code:claude
claude mcp add --scope {CLAUDE_SCOPE} canvas-authoring \ -e CANVAS_ENVIRONMENT_ID={ENV_ID} \ -e CANVAS_APP_ID={APP_ID} \ -e CANVAS_CLUSTER_CATEGORY={CLUSTER_CATEGORY} \ -- dnx Microsoft.PowerApps.CanvasAuthoring.McpServer --yes --prerelease --source https://api.nuget.org/v3/index.json
If the command fails because
canvas-authoring is already registered, remove it first, then re-add:
claude mcp remove canvas-authoring claude mcp add --scope {CLAUDE_SCOPE} canvas-authoring \ -e CANVAS_ENVIRONMENT_ID={ENV_ID} \ -e CANVAS_APP_ID={APP_ID} \ -e CANVAS_CLUSTER_CATEGORY={CLUSTER_CATEGORY} \ -- dnx Microsoft.PowerApps.CanvasAuthoring.McpServer --yes --prerelease --source https://api.nuget.org/v3/index.json
If TOOL_TYPE is
or vscode-copilot
:copilot
-
Ensure the parent directory exists:
- If
isCONFIG_PATH
, run:.vscode/mcp.jsonmkdir -p .vscode - If
isCONFIG_PATH
, run:.mcp/copilot/mcp.jsonmkdir -p .mcp/copilot - If
is the globalCONFIG_PATH
, no directory creation is needed.~/.copilot/mcp-config.json
- If
-
Read the existing configuration file at
, or create a new empty config if it doesn't exist:CONFIG_PATH{} -
Determine which top-level key to use:
- If the config already has
, or if the TOOL_TYPE is"servers"
, use thatvscode-copilot - Otherwise, use
"mcpServers"
- If the config already has
-
Add or update the server entry:
{ "mcpServers": { "canvas-authoring": { "type": "stdio", "command": "dnx", "args": [ "Microsoft.PowerApps.CanvasAuthoring.McpServer", "--yes", "--prerelease", "--source", "https://api.nuget.org/v3/index.json" ], "env": { "CANVAS_ENVIRONMENT_ID": "{ENV_ID}", "CANVAS_APP_ID": "{APP_ID}", "CANVAS_CLUSTER_CATEGORY": "{CLUSTER_CATEGORY}" } } } } -
Write the updated configuration back to
with proper JSON formatting (2-space indentation).CONFIG_PATH
Important notes:
- Do NOT overwrite other entries in the configuration file
- Preserve the existing structure and formatting
5. Confirm and provide next steps
If TOOL_TYPE is
claude:
Tell the user:
✅ Canvas Authoring MCP server configured (
, scope:canvas-authoring).{CLAUDE_SCOPE}Restart Claude Code to activate it. Remember to use
to resume this session without losing context.claude --continueAfter restarting, verify the setup:
should appear in the MCP server listcanvas-authoring- Ask Claude: "List available Canvas App controls" — should invoke
list_controls
If TOOL_TYPE is
vscode-copilot:
Tell the user:
✅ Canvas Authoring MCP server configured (
, configPath:canvas-authoring).{CONFIG_PATH}After saving, verify the setup:
should appear in the MCP server listcanvas-authoring- Ask Copilot: "List available Canvas App controls" — should invoke
list_controls
If TOOL_TYPE is
copilot:
Tell the user:
✅ Canvas Authoring MCP server configured (
, configPath:canvas-authoring).{CONFIG_PATH}Restart GitHub Copilot CLI to activate it.
After restarting, verify the setup:
should appear in the MCP server listcanvas-authoring- Ask Copilot: "List available Canvas App controls" — should invoke
list_controls