Ppds core
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.From its SKILL.md
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.
3 things to look at
- reads credentialsReads from 1 credential source: `--clientSecret`.
- 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.
- runs commandsInstructs the agent to run 5 commands, including `dotnet tool install -g PPDS.Cli` and 4 more.
What its file declares
Copied from the file, not written here
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, ~1.8k tokens by cl100k_base, 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 |
What ships with it: 8 files
35.1 KB alongside SKILL.md
references/
- cli-auth.md5.2 KB
- cli-env.md4.4 KB
- cli-logs.md1.4 KB
- cli-roles.md3.9 KB
- cli-users.md3.1 KB
- error-codes.md5.7 KB
- mcp-server.md2.1 KB
- mcp-tools.md9.4 KB
Gives 0 of the 12 instructions most mcp tooling skills give in ~1.8k tokens
Counted across 780 of the 1,136 authors here whose files we hold, read 2026-09-06
- Use Zod for input validationin 34 of 780, across 21 files
- Use stdio for local clientsin 27 of 780, across 10 files
- Restart Claude Code after configurationin 26 of 780, across 23 files
- Verify MCP server connection before using toolsin 23 of 780, across 17 files
- Define input schemas for every toolin 20 of 780, across 11 files
- Use Streamable HTTP for remote clientsin 18 of 780, across 8 files
- Pin SDK version in package.jsonin 17 of 780, across 6 files
- Keep server logic independent of transportin 16 of 780, across 6 files
- Verify SDK methods against official documentationin 15 of 780, across 5 files
- Format evaluation results as an XML filein 15 of 780, across 12 files
- Test servers using the MCP Inspectorin 15 of 780, across 14 files
- Create ten complex and independent evaluation questionsin 14 of 780, across 11 files
Said here and by no other author read
- Load this skill before any other ppds skill
- Verify installation with ppds --version
- Use CLI for terminal agents
- Use MCP server for shell-less hosts or session safety
- Run ppds env who before the first write
- State the environment to the user before mutation
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.