Skip to content

Commit aa1d028

Browse files
Priyanshu AgrawalPriyanshu Agrawal
authored andcommitted
Merge remote-tracking branch 'origin/main' into users/suyashpatel/server-logic-skill
2 parents 23395fe + 56645ed commit aa1d028

16 files changed

Lines changed: 1213 additions & 13 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,22 @@
3434
]
3535
},
3636
{
37-
"name": "code-apps",
37+
"name": "canvas-apps",
38+
"source": "./plugins/canvas-apps",
39+
"description": "Build Power Apps Canvas Apps using the Canvas Authoring MCP server",
40+
"category": "development",
41+
"tags": [
42+
"power platform",
43+
"power apps",
44+
"canvas apps",
45+
"pa-yaml",
46+
"msapp",
47+
"connectors",
48+
"microsoft"
49+
]
50+
},
51+
{
52+
"name": "code-apps-preview",
3853
"source": "./plugins/code-apps",
3954
"description": "Build and deploy Power Apps code apps using React, Vite, and Power Platform connectors",
4055
"category": "development",
@@ -51,4 +66,3 @@
5166
}
5267
]
5368
}
54-

.claude/settings.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11
{
2+
"extraKnownMarketplaces": {
3+
"anthropic-agent-skills": {
4+
"source": {
5+
"source": "github",
6+
"repo": "anthropics/skills"
7+
}
8+
}
9+
},
10+
"enabledPlugins": {
11+
"document-skills@anthropic-agent-skills": true
12+
},
213
"permissions": {
314
"allow": [
415
"Bash(pac *)",

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ body:
88
label: Plugin
99
description: Which plugin is this bug related to?
1010
options:
11+
- canvas-apps
1112
- code-apps
1213
- model-apps
1314
- power-pages

.github/ISSUE_TEMPLATE/feature_request.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ body:
88
label: Plugin
99
description: Which plugin is this feature request for?
1010
options:
11+
- canvas-apps
1112
- code-apps
1213
- model-apps
1314
- power-pages
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: validate-plugin-names
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
jobs:
10+
validate-plugin-names:
11+
name: validate-plugin-names
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: checkout
15+
uses: actions/checkout@v4
16+
17+
- name: validate-kebab-case-plugin-names
18+
shell: bash
19+
run: |
20+
python3 <<'PY'
21+
import json
22+
import re
23+
from pathlib import Path
24+
25+
KEBAB_CASE_PATTERN = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$")
26+
27+
28+
def validate_name(name, source):
29+
if KEBAB_CASE_PATTERN.fullmatch(name):
30+
return None
31+
return f"{source}: '{name}' is not kebab-case"
32+
33+
34+
errors = []
35+
36+
marketplace_path = Path(".claude-plugin/marketplace.json")
37+
marketplace = json.loads(marketplace_path.read_text())
38+
for index, plugin in enumerate(marketplace.get("plugins", [])):
39+
error = validate_name(plugin["name"], f"{marketplace_path} plugins[{index}].name")
40+
if error:
41+
errors.append(error)
42+
43+
for plugin_manifest_path in sorted(Path("plugins").glob("*/.claude-plugin/plugin.json")):
44+
plugin_manifest = json.loads(plugin_manifest_path.read_text())
45+
error = validate_name(plugin_manifest["name"], f"{plugin_manifest_path} name")
46+
if error:
47+
errors.append(error)
48+
49+
if errors:
50+
print("Found plugin names that are not kebab-case:")
51+
for error in errors:
52+
print(f"- {error}")
53+
raise SystemExit(1)
54+
55+
print("All plugin names are kebab-case.")
56+
PY

README.md

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ If you prefer to install manually, run these commands inside a Claude Code or Gi
4747
/plugin install power-pages@power-platform-skills
4848
/plugin install model-apps@power-platform-skills
4949
/plugin install code-apps@power-platform-skills
50+
/plugin install canvas-apps@power-platform-skills
5051
```
5152

5253
## Available Plugins
@@ -69,6 +70,12 @@ Build and deploy Power Apps code apps connected to Power Platform via connectors
6970

7071
**Stack**: React + Vite + TypeScript, deployed via PAC CLI
7172

73+
### [Canvas Apps](plugins/canvas-apps/AGENTS.md) (`plugins/canvas-apps`)
74+
75+
Author Power Apps Canvas Apps using the Canvas Authoring MCP server.
76+
77+
**Stack**: PA YAML (`.pa.yaml`) authored via `CanvasAuthoringMcpServer`, requires .NET 10 SDK
78+
7279
## Local Development
7380

7481
To develop and test plugins locally, follow these steps:
@@ -80,6 +87,7 @@ To develop and test plugins locally, follow these steps:
8087
claude --plugin-dir /path/to/power-platform-skills/plugins/power-pages
8188
claude --plugin-dir /path/to/power-platform-skills/plugins/model-apps
8289
claude --plugin-dir /path/to/power-platform-skills/plugins/code-apps
90+
claude --plugin-dir /path/to/power-platform-skills/plugins/canvas-apps
8391
```
8492

8593
## Running Without Interruption
@@ -159,18 +167,23 @@ power-platform-skills/
159167
│ │ ├── shared/
160168
│ │ └── skills/
161169
│ ├── model-apps/ # Model Apps plugin
170+
│ | ├── .claude-plugin/
171+
│ │ └── plugin.json
172+
│ | ├── commands/
173+
│ | ├── skills/
174+
│ | ├── shared/ # Shared references + samples
175+
│ | └── github/ # GitHub Copilot instructions
176+
│ ├── code-apps/ # Code Apps plugin
177+
│ │ ├── .claude-plugin/
178+
│ │ │ └── plugin.json
179+
│ │ ├── agents/
180+
│ │ ├── skills/
181+
│ │ └── shared/ # Shared instructions + references
182+
│ └── canvas-apps/ # Canvas Apps plugin
162183
│ ├── .claude-plugin/
163184
│ │ └── plugin.json
164-
│ ├── commands/
165-
│ ├── skills/
166-
│ ├── shared/ # Shared references + samples
167-
│ └── github/ # GitHub Copilot instructions
168-
│ └── code-apps/ # Code Apps plugin
169-
│ ├── .claude-plugin/
170-
│ │ └── plugin.json
171-
│ ├── agents/
172-
│ ├── skills/
173-
│ └── shared/ # Shared instructions + references
185+
│ ├── references/ # Technical + design guides
186+
│ └── skills/
174187
├── AGENTS.md # Development guidelines
175188
└── README.md
176189
```
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "canvas-apps",
3+
"version": "1.0.1",
4+
"description": "Build Power Apps Canvas Apps using the Canvas Authoring MCP server.",
5+
"author": {
6+
"name": "Microsoft",
7+
"url": "https://www.microsoft.com"
8+
},
9+
"homepage": "https://github.com/microsoft/power-platform-skills/",
10+
"repository": "https://github.com/microsoft/power-platform-skills/",
11+
"license": "MIT",
12+
"keywords": [
13+
"canvas-apps",
14+
"power-apps",
15+
"canvas",
16+
"pa-yaml",
17+
"msapp"
18+
]
19+
}

plugins/canvas-apps/AGENTS.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# AGENTS.md — Canvas Apps Plugin
2+
3+
This file provides guidance to AI Agents when working with the **canvas-apps** plugin.
4+
5+
## What This Plugin Is
6+
7+
A plugin for authoring Power Apps Canvas Apps. The Canvas Authoring MCP server (`CanvasAuthoringMcpServer`) exposes tools and prompts that Claude uses directly — no skill orchestration layer is needed. Claude calls the MCP tools in conversation to generate, validate, and compile Canvas App YAML files (`.pa.yaml`) in conjunction with a running coauthoring studio session
8+
9+
## Local Development
10+
11+
Test this plugin locally:
12+
13+
```bash
14+
claude --plugin-dir /path/to/plugins/canvas-apps
15+
```
16+
17+
## Architecture
18+
19+
```
20+
.claude-plugin/plugin.json ← Plugin metadata (name, version, keywords)
21+
AGENTS.md ← Plugin guidance for AI agents (this file)
22+
CLAUDE.md ← Symlink → AGENTS.md
23+
references/
24+
TechnicalGuide.md ← YAML syntax, control selection, layout strategies, Power Fx patterns
25+
DesignGuide.md ← Aesthetic guidelines, anti-patterns, design process
26+
skills/
27+
configure-canvas-mcp/
28+
SKILL.md ← Registers the Canvas Authoring MCP server with Claude Code
29+
generate-canvas-app/
30+
SKILL.md ← Generates pa.yaml source files for a described Canvas App
31+
edit-canvas-app/
32+
SKILL.md ← Edits pa.yaml source files for an existing Canvas App
33+
```
34+
35+
## Skills
36+
37+
| Skill | Description |
38+
|-------|-------------|
39+
| `/configure-canvas-mcp` | Register the Canvas Authoring MCP server with Claude Code |
40+
| `/generate-canvas-app` | Generate a complete Canvas App from a natural language description |
41+
| `/edit-canvas-app` | Edit an existing Canvas App from a natural language description of changes |
42+
43+
## MCP Tools
44+
45+
The `canvas-authoring` MCP server exposes the following tools:
46+
47+
| Tool | Description |
48+
|------|-------------|
49+
| `compile_canvas` | Validates canvas app YAML files in a directory using the Power Apps authoring service |
50+
| `describe_api` | Gets detailed information about a specific API (connector) including its operations and parameters |
51+
| `describe_control` | Gets detailed information about a specific Power Apps control including properties, variants, and metadata |
52+
| `get_data_source_schema` | Gets the schema (columns and their Power Fx types) for a specific data source in the current authoring session |
53+
| `list_apis` | Lists all available APIs (connectors) in the current authoring session |
54+
| `list_controls` | Lists all available Power Apps controls in the current authoring session |
55+
| `list_data_sources` | Lists all available data sources in the current authoring session |
56+
| `sync_canvas` | Syncs the current coauthoring session state from the server to a local directory, writing all YAML files |
57+
58+
## Prerequisites
59+
60+
Before the MCP server will start, you need:
61+
62+
**.NET 10 SDK**[Download from Microsoft](https://dotnet.microsoft.com/download/dotnet/10.0)

plugins/canvas-apps/CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
AGENTS.md

plugins/canvas-apps/README.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Canvas Apps Plugin
2+
3+
Build Power Apps Canvas Apps with your coding agent as coauthor. This plugin connects AI coding assistants to the Power Apps authoring service over stdio, enabling them to validate .pa.yaml files, browse available controls and their properties, discover APIs/connectors and data sources, and sync app state from live coauthoring sessions.
4+
5+
> **Preview:** This plugin is currently in [preview](https://www.microsoft.com/en-us/business-applications/legal/supp-powerplatform-preview/). These features are available before official release for customers to provide feedback.
6+
7+
## Prerequisites
8+
9+
- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
10+
11+
## Installation
12+
13+
### From the marketplace
14+
15+
```bash
16+
/plugin marketplace add microsoft/power-platform-skills
17+
/plugin install canvas-apps@power-platform-skills
18+
```
19+
20+
### From a local clone
21+
22+
```bash
23+
claude --plugin-dir /path/to/power-platform-skills/plugins/canvas-apps
24+
```
25+
26+
## Skills
27+
28+
### `/configure-canvas-mcp`
29+
30+
Register the Canvas Authoring MCP server with Claude Code or GitHub Copilot.
31+
32+
**Usage:** Invoke directly with `/configure-canvas-mcp`, or use any of the keywords below to trigger the skill automatically:
33+
34+
- `Configure MCP for Canvas Apps`
35+
- `Set up the Canvas Authoring MCP server`
36+
- `Connect Canvas Apps MCP`
37+
38+
### `/generate-canvas-app`
39+
40+
Generate a complete Canvas App from a natural language description.
41+
42+
**Usage:** Invoke directly with `/generate-canvas-app`, or use any of the keywords below to trigger the skill automatically:
43+
44+
- `Create a Canvas App for managing inventory`
45+
- `I need a Canvas App for tracking employee time off`
46+
47+
### `/edit-canvas-app`
48+
49+
Edit an existing Canvas App from a natural language description of changes.
50+
51+
**Usage:** Invoke directly with `/edit-canvas-app`, or use any of the keywords below to trigger the skill automatically:
52+
53+
- `Modify the form in my existing Canvas App to include validation`
54+
- `Edit my Canvas App to add a new screen for reports`
55+
56+
## MCP Tools
57+
58+
The `canvas-authoring` MCP server exposes the following tools:
59+
60+
| Tool | Description |
61+
|------|-------------|
62+
| `compile_canvas` | Validates canvas app YAML files in a directory using the Power Apps authoring service |
63+
| `describe_api` | Gets detailed information about a specific API (connector) including its operations and parameters |
64+
| `describe_control` | Gets detailed information about a specific Power Apps control including properties, variants, and metadata |
65+
| `get_data_source_schema` | Gets the schema (columns and their Power Fx types) for a specific data source in the current authoring session |
66+
| `list_apis` | Lists all available APIs (connectors) in the current authoring session |
67+
| `list_controls` | Lists all available Power Apps controls in the current authoring session |
68+
| `list_data_sources` | Lists all available data sources in the current authoring session |
69+
| `sync_canvas` | Syncs the current coauthoring session state from the server to a local directory, writing all YAML files |
70+
71+
## Security
72+
73+
Your credentials are always handled securely through the official Azure Identity SDK - we never store or manage tokens directly.
74+
75+
MCP is a new and developing standard. As with all new technology standards, you should review the security of any systems that integrate with MCP servers, such as MCP hosts, clients, agents, AI applications, and models and confirm that they comply with system requirements, standards, and expectations. You should follow Microsoft security guidance for MCP servers, including enabling Entra ID authentication, secure token management, and network isolation. Refer to Microsoft Security Documentation for details.
76+
77+
78+
## License
79+
See the [LICENSE](../../LICENSE) file for license information.

0 commit comments

Comments
 (0)