plugins/mobile-apps/skills/set-app-registration-native/SKILL.md
Use when the user wants to wire a Power Apps Wrap mobile app to an Entra ID app registration by opening the Power Apps Wrap app-registration page, pasting the resulting client ID, and updating auth.config.json.
npx skillsauth add microsoft/power-platform-skills set-app-registration-nativeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Shared instructions: shared-instructions.md — read first.
Wire auth.config.json to an Entra ID app registration for a Power Apps Wrap mobile app.
This skill is manual by design:
auth.config.json.auth.config.json -> 6. Validate JSON -> 7. SummaryFrom the current directory, verify a generated mobile app root:
test -f auth.config.json && test -f app.config.js && test -f power.config.json
If this fails, stop and tell the user to run /create-mobile-app first or open the generated app folder.
Use the same environment selected by the generated app. Prefer .resolved-environment.json, then auth.config.json.environment, then power.config.json + resolver:
ENV_ID=$(node -e "console.log(require('./power.config.json').environmentId || '')")
TENANT_ID=$(node -e "try { const j=require('./.resolved-environment.json'); console.log(j.tenantId || '') } catch { console.log('') }" 2>/dev/null)
if [ -z "$TENANT_ID" ]; then
TENANT_ID=$(node -e "try { const j=require('./auth.config.json'); console.log((j.environment && j.environment.tenantId) || '') } catch { console.log('') }" 2>/dev/null)
fi
if [ -z "$TENANT_ID" ] && [ -n "$ENV_ID" ]; then
node "${PLUGIN_ROOT}/scripts/resolve-environment.js" "$ENV_ID" > .resolved-environment.json
TENANT_ID=$(node -e "const j=require('./.resolved-environment.json'); console.log(j.tenantId || '')")
fi
echo "$ENV_ID"
echo "$TENANT_ID"
If ENV_ID is empty, stop: power.config.json is not initialized.
If TENANT_ID is empty, stop: environment resolution failed. Do not guess the tenant and do not use a stale msal.tenantId as the authority source.
Print the public Power Apps Wrap URL for the active environment:
https://make.powerapps.com/environments/<environment-id>/wraps#create-app-registration
Tell the user:
Open the Power Apps Wrap app-registration page for this environment:
https://make.powerapps.com/environments/<environment-id>/wraps#create-app-registration
Create/register the app there, then paste the Application (client) ID here.
The Wrap page configures the native registration. Do not add redirect URIs or
API permissions manually; tenant-wide admin consent is not required.
If you already have a client ID, paste it directly.
If you cannot configure auth now, type skip.
Ask:
Paste the Entra ID app registration client ID for tenant <tenant-guid> (GUID format), or type skip:
skip, leave msal.clientId blank, ensure msal.tenantId is set to the resolved tenant, preserve/add the environment cache, print the skip warning in Step 7, and stop.auth.config.jsonUpdate auth.config.json:
msal.clientId = pasted client IDmsal.tenantId = resolved tenant ID from Step 2environment object.environment is missing and .resolved-environment.json exists, copy the non-secret resolved environment fields into top-level environment.Use structured JSON editing. Do not store tokens, secrets, or current-user Dataverse identity fields.
Example target shape:
{
"msal": {
"clientId": "<client-id>",
"tenantId": "<tenant-guid>"
},
"environment": {
"environmentId": "<environment-id>",
"environmentUrl": "https://org.crm.dynamics.com",
"tenantId": "<tenant-guid>",
"cachedAt": "<iso timestamp>"
}
}
Do not touch src/playerConfig.ts; auth identifiers live in auth.config.json only.
node -e "JSON.parse(require('fs').readFileSync('auth.config.json','utf8')); console.log('auth.config.json OK')"
If dependencies are installed, optionally run:
npx tsc --noEmit
Do not run npm install or native builds from this skill.
If a client ID was written:
App registration wired.
Client ID : <client-id>
Tenant : <tenant-guid>
Config : auth.config.json
If skipped:
Auth client ID was not configured.
Tenant was preserved in auth.config.json: <tenant-guid>
The app will fail to sign in until a client ID is added.
Run /set-app-registration-native later, or paste a client ID into auth.config.json.
tools
Adds Work IQ (M365 Copilot Search) to a Power Apps code app via the Work IQ Copilot MCP connector (shared_a365copilotchatmcp), then wires up a production-ready McpSession wrapper for AI-powered, knowledge-grounded search and chat. Use when integrating Microsoft 365 Copilot search/chat. The CopilotChat tool searches internal Microsoft 365 content (documents, emails, chats, sites, files) across your organization — prefer workload-specific tools (SharePoint, OneDrive, Teams, Mail) when the workload is explicit; do not use it for general knowledge, news, public web, or external information.
tools
Use when the user wants to preview generated screens in a browser without starting Metro / a simulator — for example after /create-mobile-app finishes or after /edit-app regenerates a screen.
development
Use when the user wants to iterate on an existing generated Power Apps mobile app after /create-mobile-app: update the plan, data model, native capabilities, design, screens, generated app code, and preview without restarting the full project flow.
development
Creates and manages the brand design system for a Power Apps mobile app. Generates brand/design-system.md (source of truth), brand/tokens.ts (importable Tamagui tokens), and brand/design-system.html (visual gallery). Triggered at Step 6.5 of /create-mobile-app, or standalone via /design-system.