Ppds core
PPDS Skills — knowledge layer teaching AI coding agents to drive the Power Platform Developer Suite
npx -y skills add joshsmithxrm/ppds-skills --skill ppds-coreAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Install, authenticate, and safely operate the Power Platform Developer Suite (PPDS) CLI and MCP server against Microsoft Dataverse — auth profiles, environment selection, the environment-safety model, and error interpretation. Use when the user wants to connect to Dataverse with PPDS, set up `ppds` or `ppds-mcp-server`, manage auth profiles or environments, decide between the PPDS CLI and MCP surfaces, or interpret a PPDS error or exit code. Load this skill first before any other ppds-* skill.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.3 KB, as published. Nobody here has run it
PPDS Core — connect, select, stay safe
PPDS (Power Platform Developer Suite) is a single .NET global tool giving you a typed CLI, an MCP server, a TUI, and NuGet libraries over Microsoft Dataverse. One install, no Python, no PAC CLI dependency. Docs: https://joshsmithxrm.github.io/ppds-docs/
dotnet tool install -g PPDS.Cli # CLI: `ppds` (update: dotnet tool update -g PPDS.Cli)
dotnet tool install -g PPDS.Mcp # MCP server: `ppds-mcp-server`
Verify: ppds --version. These skills target the 1.2.0 surface (flag
tables generated from 1.2.0 stable). If the installed major/minor differs,
prefer live --help.
Surface routing (applies to every ppds-* skill)
The CLI is the primary surface for terminal agents. Use the MCP server instead when either holds:
- The host has no shell (an MCP-only client), or
- You want protocol-level session safety the shell cannot give you —
--read-only(all DML rejected for the session) and--allowed-env(environment switching locked to an allowlist). Setup: references/mcp-server.md.
Where an MCP tool mirrors a CLI command this package names it, e.g.
ppds env list ↔ ppds_env_list. The released server (1.0.0) exposes 41
tools — the authoritative list is
references/mcp-tools.md. The CLI surface is wider;
anything without an MCP tool routes to the CLI.
Authentication profiles
Profiles are stored per-machine and shared by CLI, MCP server, and TUI. All methods and exact flags: references/cli-auth.md.
ppds auth create --name dev # interactive browser (default)
ppds auth create --name dev --deviceCode # headless / SSH / containers
ppds auth create --name ci --applicationId <app-id> --clientSecret <secret> --tenant <tenant-id>
Also supported: certificate file/store (--certificateDiskPath /
--certificateThumbprint), --managedIdentity, and workload identity
federation (--githubFederated, --azureDevOpsFederated).
Manage: ppds auth list, ppds auth select --index <n> (or --name <n>),
ppds auth who, ppds auth update, ppds auth delete, ppds auth clear.
Environment selection
A profile has one selected environment; commands accept per-call overrides. Exact flags: references/cli-env.md.
ppds env list --filter contoso # discover (name/URL/ID, partial ok)
ppds env select --environment <url-or-name>
ppds env who # identity + selected environment
Per-call override on most commands: --environment <url> (alias -env) and
--profile <name> (-p). ppds org ... is an alias for ppds env ....
The safety model — hard rules
These rules are not style; agents must follow them.
-
Know your target before any mutation. Run
ppds env who(CLI) orppds_auth_who(MCP) and state the environment to the user before the first write of a session. Environments have a configuredEnvironmentConfig.Type:Production,Sandbox,Development,Test,Trial, orUnknown. Production gets blocked-by-default DML that requires confirmation with a preview; treatUnknownwith the same suspicion. -
Multi-environment confirmation. When a session has touched more than one environment, or a command carries an explicit
--environmentoverride, restate the exact target (URL, not nickname) and get the user's confirmation before executing any mutation. Cross-environment DML defaults to read-only (cross_env_dml_policy: ReadOnly); a Production target always prompts even when the policy isAllow. -
Preview before you execute. Most PPDS mutation surfaces have a
--dry-runpreview: use it, show the user the result, then execute.ppds query sql --dry-run(DML plan),ppds plugins deploy --dry-run,ppds plugintraces delete --dry-run, and friends. Only add--confirm/--forceafter a human has seen the preview. Where no--dry-runexists — notablyppds data import,ppds data copy,ppds solutions import— import into a sandbox first and lean on the rule 1–2 confirmation gates; for data moves,ppds data analyze --schema <schema.xml>previews dependencies. -
MCP sessions get pinned. Launch
ppds-mcp-serverwith--read-onlyfor analysis sessions, and--allowed-env <url>(repeatable) when switching must be possible. No--allowed-envflags meansppds_env_selectis disabled — that is a feature, not a bug. -
Never bypass a refusal. Exit code 9 (Forbidden), exit code 11 (ConfirmationRequired),
Query.DmlBlocked,Safety.ShakedownActive— these are answers, not obstacles. Surface them to the user.
Reading PPDS output
- stdout is data, stderr is status. Pipe-safe by design. Parse stdout; show stderr to humans.
- Machine-readable: add
-f json(--output-format Json); CSV is-f csv. - Quiet/verbose:
-qwarnings+errors only;-vdebug;--debugtrace. - Non-zero exits carry a structured JSON error envelope on stderr with an
error.codelikeConnection.Throttled. Exit codes 0–11 and per-code agent actions: references/error-codes.md.
Common mistakes (do not invent these)
| Wrong | Correct |
|---|---|
ppds env select <name> (positional) | ppds env select --environment <name> — the flag is required |
ppds auth select 1 | ppds auth select --index 1 |
ppds auth login / ppds login | ppds auth create (first time) or ppds auth select (existing) |
ppds env switch | ppds env select --environment <name> |
--format json / --json | -f json / --output-format Json |
pac auth create patterns (e.g. --url) | PPDS is not PAC CLI — check references/cli-auth.md |
Where to go next
| Need | Skill |
|---|---|
| SQL / FetchXML queries, DML, explain, history | ppds-query |
| Plugin registration, deployment, trace debugging | ppds-plugins |
| Solutions, import jobs, env vars, connection refs | ppds-solutions-alm |
| Tables, columns, relationships, keys, choices, views, forms | ppds-metadata |
| Bulk data export/import/copy/load/delete | ppds-data |
| Web resources pull/push/publish | ppds-webresources |
| Users, roles, diagnostics | references/cli-users.md, references/cli-roles.md, references/cli-logs.md |
| Model-driven apps, data sources/providers, flows | no dedicated skill yet — ppds model-driven-app, ppds data-sources, ppds data-providers, ppds flows, or ppds api request |
| Anything else (raw Web API escape hatch) | ppds api request — prefer a typed command when one exists |