microsoft/infopath-to-canvas
Migrate a Microsoft InfoPath form (.xsn) to a Power Apps Canvas app. USE WHEN the user wants to convert, port, or migrate an InfoPath form/template to Canvas Apps, or asks for help moving off of InfoPath.
npx skills add https://github.com/microsoft/power-cat-skills --skill infopath-to-canvas
Migrate the InfoPath form described below:
$ARGUMENTS
A .xsn is a CAB archive containing manifest.xsf (rules, views, data connections),
schema*.xsd (data schema), template.xml (defaults), and XSL views. This skill runs three
phases: extract → inventory → hand off to generate-canvas-app. Pause for user approval
after the inventory.
From $ARGUMENTS, resolve a .xsn path. If the user gave a folder, Glob for *.xsn
inside; ask if there are multiple or none.
If a sibling xsn_extracted/ already contains manifest.xsf, reuse it. Otherwise extract to
<source_dir>/xsn_extracted/:
& "$env:SystemRoot\System32\expand.exe" "<form>.xsn" -F:* "<xsn_extracted>" via PowerShellcabextract -d <xsn_extracted> <form>.xsnVerify manifest.xsf and schema1.xsd exist; abort if not.
Spawn a general-purpose Agent to write infopath-inventory.md covering:
schema1.xsd + template.xml dfs:dataFields: decoded name, type(Text, Date, Number, Choice, multi-Choice, Person, NoteEnhanced/rich-text, Lookup, …),
constraints (maxLength, pattern, enumeration, minOccurs/nillable), default.
Decode URL-encoded names: _x0020_=space, _x0028_=(, _x0029_=), _x002d_=-,
_x0023_=#, _x0026_=&.
manifest.xsf: schema-required fields, xsf:errorCondition (field +XPath translated to plain English + message), xsf:ruleSet/xsf:domEventHandler (trigger,
condition, action), xsf:submit destination.
schema*.xsd schema: source name + columns used.After the agent returns, surface counts (fields / rules / connections / sections) and ask:
App.OnStart (default), or wire to real SharePoint?Wait for answers.
If the user wants to wire to real SharePoint, strongly suggest they add the SharePoint
list(s) as a data source in the app *before* generation — Canvas can't bind to a connection
that doesn't exist in the app. Tell them the steps (Power Apps Studio → Data → Add data →
SharePoint → pick site/list) and that this skill can verify the schema once it's done.
When they confirm, call mcp__canvas-authoring__list_data_sources to see what's connected,
then mcp__canvas-authoring__get_data_source_schema for each list. Diff against the
inventory: every InfoPath field should map to a SharePoint column of compatible type. Report
any missing columns, type mismatches (e.g. InfoPath Date vs. SP Text), or
extra-required columns the form doesn't populate. Pause and let the user reconcile
(rename columns, add missing ones, or trim the inventory) before Phase 2.
generate-canvas-appWrite canvas-app-prompt.md containing:
skill maps to Power Fx).
seeded from enumerations / lookup tables.
DisplayMode.Disabled on Save buttons) — an intentionalupgrade from InfoPath's flag-but-don't-block behavior; flag this as a deliberate change.
Then invoke generate-canvas-app via the Skill tool, passing the prompt as args. If
that skill isn't available, instruct the user to run /generate-canvas-app against
canvas-app-prompt.md.
Take microsoft/infopath-to-canvas from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.