We validated all 91 SKILL.md files in microsoft/azure-skills. 6 have no frontmatter.
We pinned microsoft/azure-skills and checked every SKILL.md. 85 of 91 carry a name and description, 6 phase docs carry none, and the Claude Code marketplace install passed on public npm.
By David Discua
Measured in the lab
- 91
- skill files validated
- 85
- with name + description
- 6
- allowlisted without frontmatter
- 5
- tests passed
- vendor pinned at 9bb168c3
- validate-all-skills OK, 91 SKILL.md
- azure-prepare installed into .claude/skills only
- bun test 5 pass, 0 fail
- no .agents/skills or .cursor/skills mirror
From reports/lab.json. microsoft/azure-skills pinned at 9bb168c3; skills@1.7.2; no Azure credentials; marketplace E2E from the README test table, not in lab.json
How it is wired
01/03We pin the upstream plugin repo at one commit.
microsoft/azure-skills is Microsoft's agent plugin of skills and MCP server configurations for Azure work, from preparing and deploying apps to quotas, compliance and Kubernetes. We pinned it at one commit, validated every SKILL.md in the tree, installed azure-prepare into .claude/skills/, and ran the upstream Claude Code marketplace install test without Microsoft's npm registry override. 85 of the 91 files carry a name and description, and the other 6 carry no frontmatter at all. The validator passes only because we allowlist those 6 by path.
The catch
The 6 files are nested azure-app-onboard phase docs for deploy, prepare and scaffold, and each one appears twice, once in the plugin tree and once in the root skills/ mirror. They are plain markdown. A check that requires frontmatter on every SKILL.md fails on them, so scripts/validate-all-skills.sh names all 6 at this pin and checks that each has a non-empty H1 instead. A new upstream commit that adds a seventh file without frontmatter fails the lab, which is how we want it to fail.
The 91 is a file count across both trees, the plugin tree under .github/plugins and the root skills/ folder, so read it as files on disk.
Upstream CI installs through a Microsoft npm registry. Our end-to-end script forces https://registry.npmjs.org, pins @anthropic-ai/claude-code@2.1.296, and runs the Claude plugin commands under an isolated HOME. We never touch Azure itself, so the live MCP tools and their credentials stay out of scope, and AZURE_MCP_COLLECT_TELEMETRY=false turns off upstream telemetry for every run.
What we ran (keyless)
cp .env.example .env
bun install
bash scripts/vendor-upstream.sh
bash scripts/validate-all-skills.sh
DISABLE_TELEMETRY=1 bun --bun x skills@1.7.2 add \
./vendor/azure-skills/.github/plugins/azure-skills/skills \
--skill azure-prepare -a claude-code -y --copy
bun test
bash scripts/upstream-e2e-claude.sh
From reports/lab.json, run on October 13, 2026:
| Step | Result | Time |
|---|---|---|
vendor (pin 9bb168c3) | pass | 1,108 ms |
| validate-all-skills (91 SKILL.md, 85 with frontmatter, 6 allowlisted) | pass | 9,769 ms |
check:skills (azure-prepare, lab skill) | pass | 50 ms |
| bun test (5 tests, 25 expect calls, 0 fail) | pass | 10,116 ms |
The marketplace end-to-end run is in the README test table, outside lab.json. It added, installed and enabled 6 plugins from the pinned clone on public npm. bun audit found no vulnerabilities, and osv-scanner 2.7.0 found no issues in landing-page/package-lock.json.
How it is wired
The plugin ships skills and MCP configs together. Claude Code adds the repo as a marketplace and installs plugins from it, while the skills CLI copies a single skill such as azure-prepare into .claude/skills/, the one path both Claude Code and Cursor read in our setup. CI fails if a .agents/skills or .cursor/skills mirror appears, so the agent never reads two copies of the same skill.
Minilab (open source)
The lab pins microsoft/azure-skills at 9bb168c3 (1,570 stars, MIT, Shell, as of October 14, 2026). Run bun install && bun run report to rebuild reports/lab.json, and run bash scripts/upstream-e2e-claude.sh separately for the marketplace install.
Run it yourself
SkilledDragonCorp/minilab-azure-skills-plugin
Clone, install and run the report with no API keys. The numbers above are what that run writes.
bun install && bun run reportSkilledDragon is not affiliated with Microsoft or microsoft/azure-skills. Numbers are from our own keyless lab run; re-run the report before relying on them. Marks belong to their owners.
All labs