Before every flight, pilots run a preflight checklist — a systematic verification that everything is ready before committing to takeoff. PowerPreFlight runs one for Dynamics 365 and Power Platform, and ships the two MCP servers that came out of building it. One scores, the other explains. They are the same sign-in and the same Dataverse layer, so the environment you just scored is the one you can then ask questions of.
Reads DLP policy, connectors, pipelines and workload configuration to safely deploy a workload or roll out Copilot Studio, benchmarked against Microsoft’s Success by Design practices. Same environment, same version, same scorecard — no model in the path, which is what makes it evidence.
npx powerpreflightdataverse-local-mcp hands the same environment to
Claude, VS Code, or any MCP client: explore the schema, chase a finding
down to the rows behind it, and write with guardrails — every
mutating tool previews by default and carries the ETag. The scanner
registers it for you, in whichever config file your client wants.
npx powerpreflight mcp vscode <url>Node.js 22 or later · nothing to install · no app registration · one work account, one machine
A local listener on 127.0.0.1 opens your browser and
authenticates through Microsoft’s pre-authorised first-party
Dataverse client. No app registration, no consent prompt, no Global
Administrator.
Every environment your account can already reach is listed. The scan is read-only and carries exactly your access.
Findings come back scored and ordered by what blocks go-live, each mapped to its Success by Design practice. Export the scorecard or the environment profile.
The first-party Dataverse public client is pre-authorised in every tenant. Your client approves nothing.
You still need your own account and security role in the environment. Nothing is escalated.
In memory behind a per-run session token, and never written to disk. Closing the tool is signing out.
This origin serves the app, the steps and the solution library, and receives no environment data.
127.0.0.1 only, and every
request carries a session token generated fresh for that run.There is nothing to install permanently and nothing to
configure to get started. npx fetches the current build
each time you run it, so you are always on the latest version. The one
prerequisite is Node.js 22 or later
(winget install OpenJS.NodeJS.LTS, or brew install
node, or nodejs.org).
The same local-only architecture, pointed at a model
instead of a checklist. dataverse-local-mcp puts a Dataverse
environment in front of Claude — or any MCP client — so you
can explore the schema, run queries and saved views, and write with
guardrails: every mutating tool previews by default and carries the ETag,
so a stale write fails rather than overwriting someone. An annotation
store accumulates what your team learns about the environment instead of
each person rediscovering it.
Same sign-in as the scanner — your own work account
through the pre-authorised first-party client, under
the same limits on what it can touch. One difference
worth knowing: an MCP client relaunches the server on every start, so this
one keeps its token cache under ~/.dataverse-mcp/ instead of
in memory. Deleting that file signs it out.
One command writes the right block to the right file. Both the file and its top-level key differ per client — which is the usual reason a hand-copied config silently does nothing at all:
npx powerpreflight mcp vscode https://yourorg.crm.dynamics.com --write
Swap vscode for claude-code or
claude-desktop. Without --write it prints the
exact change and touches nothing; it merges into an existing config rather
than replacing it, and refuses rather than overwriting an entry that is
already there. You need Node.js 22 or later and your
environment URL — the one in the browser address bar when you use the
app.
Claude Desktop — add this to
claude_desktop_config.json and restart the app. That file is
in ~/Library/Application Support/Claude/ on macOS, or
%APPDATA%\Claude\ on Windows:
{
"mcpServers": {
"dataverse": {
"command": "npx",
"args": ["-y", "dataverse-local-mcp", "https://yourorg.crm.dynamics.com"]
}
}
}
VS Code — Copilot agent mode reads
.vscode/mcp.json, and its top-level key is
servers, not mcpServers, so the block above does
not carry across unchanged:
{
"servers": {
"dataverse": {
"command": "npx",
"args": ["-y", "dataverse-local-mcp", "https://yourorg.crm.dynamics.com"]
}
}
}
For Claude Code, npx powerpreflight mcp claude-code writes a project-scoped .mcp.json that you can commit for the team; claude mcp add is the native alternative if you would rather keep a personal entry out of the repository. Any other MCP client takes the same command and argument in whatever shape it expects — it is an ordinary stdio MCP
server. The first tool call opens a Microsoft sign-in in
your browser — pick the work account for that environment, and an
account picker is always shown so you can switch. The full tool reference
is on
npm.
The Power Automate half. Cloud flows are stored in
Dataverse, and Microsoft documents the Dataverse Web API — not
api.flow.microsoft.com, which it states is unsupported —
as the way to work with them in code. So this needs no second sign-in and
no extra consent: it is the same token, the same local-only architecture.
List and inspect flows, read their definitions, check run history, and author new ones. Every write previews first, and a definition is validated before it is sent — Dataverse will accept a flow that saves, opens the designer on an error, and cannot run, which looks like success and is worse than a refusal. New flows are always created switched off.
Migrating from Scribe Online? Point it at a map export and it converts each map to a cloud flow — queries, loops, conditions, lookups, upserts and field formulas — and reports whether each map should be a flow at all. That second half matters: a full-table refresh converts cleanly and still costs three Dataverse calls per source row, which the report puts a number on so the answer is arithmetic rather than opinion. Anything it cannot translate faithfully is marked in place rather than dropped.
Same command, with --server flows:
npx powerpreflight mcp vscode https://yourorg.crm.dynamics.com --server flows --write
It ships as a second command inside the same
powerpreflight package rather than as its own download, so
there is one version to track instead of two. Writing the block by hand
needs the -p flag, because the command is not the package's
default:
{
"mcpServers": {
"flows": {
"command": "npx",
"args": ["-y", "-p", "powerpreflight", "powerpreflight-flows", "https://yourorg.crm.dynamics.com"]
}
}
}
Both servers can be registered at once — they use different keys and do different jobs: one is the data plane, the other is Power Automate.
The content settings are editable inside the app. These environment variables exist for scripting a machine, not the normal path.
PREFLIGHT_CONTENT_URL | Origin publishing steps and solutions. Defaults to https://powerpreflight.app/api/content. off runs on bundled content alone. |
|---|---|
PREFLIGHT_CONTENT_TOKEN | Read token for that content origin, if it needs one. Also settable in the app. |
PREFLIGHT_CLIENT_ID | Your own public-client registration, for tenants whose conditional access blocks first-party clients. |
PREFLIGHT_REDIRECT_URI | Override the loopback redirect when a registration requires a specific one. |
PREFLIGHT_OUT | Output directory for exported scorecards and profiles. Defaults to ./preflight-output. |
npx powerpreflight