From canvas-apps
Configures Canvas Authoring MCP server for Claude Code, VS Code Copilot, or GitHub Copilot CLI, verifying .NET 10 SDK and setting tool-specific config paths.
npx claudepluginhub microsoft/power-platform-skills --plugin canvas-appsThis skill is limited to using the following tools:
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.
Acquire memory dumps from live systems/VMs and analyze with Volatility 3 for processes, networks, DLLs, injections in incident response or malware hunts.
Provides x86-64/ARM disassembly patterns, calling conventions, control flow recognition for static analysis of executables and compiled binaries.
Identifies anti-debugging checks like IsDebuggerPresent, NtQueryInformationProcess in Windows binaries; suggests bypasses via patches/hooks/scripts for malware analysis, CTFs, authorized RE.
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.
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.
Determine whether the user needs to configure MCP for VS Code Copilot, GitHub Copilot CLI, or Claude Code:
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.
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:
Based on the scope, set the CONFIG_PATH variable:
~/.copilot/mcp-config.json (use the user's home directory).mcp/copilot/mcp.json (relative to the current working directory)Store this path for use in steps 4 and 5.
If TOOL_TYPE is claude:
The options are:
Based on the scope, set the CLAUDE_SCOPE variable:
CLAUDE_SCOPE = userCLAUDE_SCOPE = projectCLAUDE_SCOPE = localStore this value for use in step 5.
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:
/e/ and the next / (e.g. Default-91bee3d9-0c15-4f17-8624-c92bb8b36ead).app-id query parameter value, then take the last segment after the final / (e.g. 6fc3e3d1-292b-4281-8826-577f78512e56)make.powerapps.com)Determine CLUSTER_CATEGORY from MAKER_HOSTNAME:
| MAKER_HOSTNAME | CLUSTER_CATEGORY |
|---|---|
make.powerapps.com | prod |
make.preview.powerapps.com | prod |
| Any other hostname | test |
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
Default-91bee3d9-0c15-4f17-8624-c92bb8b36ead6fc3e3d1-292b-4281-8826-577f78512e56make.powerapps.comprodStore these as ENV_ID, APP_ID, and CLUSTER_CATEGORY for use in step 4.
If TOOL_TYPE is claude:
Run the following command to register the server with Claude Code:
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 vscode-copilot or copilot:
Ensure the parent directory exists:
CONFIG_PATH is .vscode/mcp.json, run: mkdir -p .vscodeCONFIG_PATH is .mcp/copilot/mcp.json, run: mkdir -p .mcp/copilotCONFIG_PATH is the global ~/.copilot/mcp-config.json, no directory creation is needed.Read the existing configuration file at CONFIG_PATH, or create a new empty config if it doesn't exist:
{}
Determine which top-level key to use:
"servers", or if the TOOL_TYPE is vscode-copilot, use that"mcpServers"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 CONFIG_PATH with proper JSON formatting (2-space indentation).
Important notes:
If TOOL_TYPE is claude:
Tell the user:
✅ Canvas Authoring MCP server configured (
canvas-authoring, scope:{CLAUDE_SCOPE}).Restart Claude Code to activate it. Remember to use
claude --continueto resume this session without losing context.After restarting, verify the setup:
canvas-authoringshould appear in the MCP server list- 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 (
canvas-authoring, configPath:{CONFIG_PATH}).After saving, verify the setup:
canvas-authoringshould appear in the MCP server list- Ask Copilot: "List available Canvas App controls" — should invoke
list_controls
If TOOL_TYPE is copilot:
Tell the user:
✅ Canvas Authoring MCP server configured (
canvas-authoring, configPath:{CONFIG_PATH}).Restart GitHub Copilot CLI to activate it.
After restarting, verify the setup:
canvas-authoringshould appear in the MCP server list- Ask Copilot: "List available Canvas App controls" — should invoke
list_controls