BCDR DR Plan Assistant
Helps a BCDR Champ produce a service's DR plan (Minimal DRP) document without
leaving VS Code. It detects your service's ServiceTree ID from the repo, checks
the BCDR assessment due status, runs read-only hygiene / DHE data-quality
pre-checks, and generates the pre-filled Minimal DRP .docx — optionally reusing
the §7/§8 content from a previously approved plan.
Read-only and advisory: it reads Service Tree + BCDR Manager (Kusto) and writes a
document. It never submits, approves, or mutates anything.
Features
- Auto-detects the ServiceTree ID from repo markers (see below); falls back to a
picker when none is found.
- Assessment status — shows whether the service's BCDR assessment is due / due soon.
- Data-quality pre-check — surfaces open BCDR hygiene issues and Service Tree DHE
(Data Handling Exception) violations before you generate.
- Generates the Minimal DRP
.docx — pre-filled from Service Tree + BCDR Manager
dependencies (the §2 Resiliency Overview auto-sorted into Platform Managed / Service
Controlled-Configured / One Instance), then auto-opens it.
- Prior-plan reuse (optional) — point it at a previously approved DR plan
(SharePoint link or local
.docx) to reuse the §7 recovery/validation and §8 failback
steps. Fresh test evidence is always required and never reused.
Commands
Open the Command Palette (⇧⌘P) and run:
| Command |
What it does |
| BCDR: Generate DR Plan Document |
Generates the Minimal DRP .docx and opens it. |
| BCDR: Check DR Assessment Status |
Shows the assessment due status for the service. |
| BCDR: Select Service (ServiceTree ID) |
Manually set/override the ServiceTree ID. |
ServiceTree ID detection
The extension auto-detects the ID from these files (highest confidence first):
| File |
Field |
agency.json / catalog.json |
.serviceTreeId |
Ev2 ServiceModel.json |
.serviceMetadata.serviceIdentifier |
es-metadata.yml / .yaml |
accountableOwners.service |
*.bicep / ARM template |
a serviceTreeId-style tag |
azure.yaml / azure.yml |
serviceTreeId: |
If none is found (or the folder isn't a service repo), it asks you to pick the service.
Requirements
- Python 3 — the extension shells out to shared Python scripts.
- Sign-in — a Microsoft work-account sign-in (Accounts menu) or
az login for the
Kusto / Service Tree lookups.
- The shared
scripts/ folder — bundled with the plugin, not inside the .vsix.
When installed from a .vsix, set bcdr.scriptsPath (see below).
- Prior-plan reuse (optional) — Playwright (
pip install playwright) + signed-in
Edge to download a SharePoint plan. Sensitivity-labeled (MIP-encrypted) docs can't be
parsed — save an unprotected copy and select it as a local .docx.
BCDR Manager MCP setup (optional, Windows)
The MCP server can retrieve a prior DR-plan URL that the Kusto export redacts.
It requires Windows for MSAL's native token broker (WAM), Node.js, access to the
internal AAET npm feed, and BCDR Manager API authorization. macOS/Linux continue to
use Kusto. Contact bcdrmanagerdev@microsoft.com
if API calls return 403.
Run these steps in PowerShell under your normal Windows account (no administrator
session required). Keep credentials in your user-level npm configuration, never
in the repository.
- Install the Azure Artifacts authentication helper,
configure only the BCDR scope, and authenticate to the feed:
npm.cmd install --global vsts-npm-auth
npm.cmd config set '@bcdrmanager:registry' 'https://msazure.pkgs.visualstudio.com/_packaging/AzureAsiaEngineeringTeam/npm/registry/' --location=user
vsts-npm-auth -config "$env:USERPROFILE\.npmrc"
Use your configured corporate npm mirror where required; do not disable TLS
verification if direct access to the public registry is blocked.
- Install the server in a stable directory.
--save-exact pins the resolved version;
rerun this command only when deliberately installing/upgrading the server:
npm.cmd install --prefix "$env:USERPROFILE\.bcdrmanager\runtime" --save-exact @bcdrmanager/mcp-server@latest
- Sign in to production through WAM. Complete any account/MFA prompts yourself:
node "$env:USERPROFILE\.bcdrmanager\runtime\node_modules\@bcdrmanager\mcp-server\dist\index.js" login prod
- For Copilot, the workspace MCP configuration launches the
installed server with
node. Run MCP: List Servers, select bcdr, and start
it after reviewing the trust prompt. Use Show Output for diagnostics.
After fixing an earlier extension lookup failure, run Developer: Reload Window
to reset its session-level MCP fallback flag.
The extension also launches this same installed entry point directly. It never runs
npx or installs packages during a lookup: feed credentials are required only for
installation/upgrades, not reconnection. An npm E401 during installation means
feed authentication needs refreshing; it does not establish whether API access is
granted. A successful initialize/tool listing verifies the local server, while a
successful read-only tool call is needed to verify API authorization.
For a custom install, set BCDR_MCP_SERVER_PATH in the extension process environment
and update the Copilot configuration to the same entry point. BCDR_API_BASE_URL
(or the Python script's --base-url) can select another environment; the WAM login
environment must match. Copilot's env is separate from the extension's process
environment. Production is the default. Avoid login --force unless intentionally
clearing cached credentials.
The full upstream instructions are in the
BCDR MCP Server README.
Settings
| Setting |
Default |
Description |
bcdr.autoRun |
true |
Auto-detect the service and check status on repo open / active-file change. |
bcdr.dueSoonThresholdDays |
30 |
Show a "due soon" warning when the assessment is due within this many days. |
bcdr.pythonPath |
(auto) |
Path to the Python 3 interpreter. When empty, auto-detects py -3 / python / python3 (Windows) or python3 / python (macOS/Linux). |
bcdr.scriptsPath |
"" |
Path to the shared scripts/ folder. Required for a .vsix install (the scripts aren't bundled); when empty, resolved relative to the install location. |
bcdr.useBcdrManagerMcp |
true |
Try the pre-installed Windows BCDR Manager MCP for prior-plan URLs; fall back to Kusto when unavailable. See the setup steps above. |
Privacy & telemetry
This extension collects anonymous usage telemetry to improve reliability, sent via
@vscode/extension-telemetry.
It honors your VS Code telemetry setting — set telemetry.telemetryLevel to off to
turn off all collection.
- Collected: which BCDR commands run and their step outcomes, coarse error categories,
and operation durations.
- Not collected: file contents, ServiceTree IDs / other GUIDs (redacted to
[GUID_REDACTED]), access tokens, or personal data.
Data is handled per the Microsoft Privacy Statement.
Notes
- Installed from a
.vsix? The Python scripts/ live in the plugin, not the package —
set bcdr.scriptsPath to …/bcdr-presubmit-validator/scripts.
- If commands keep prompting for sign-in, run
az login once (the CLI caches a
long-lived token that the scripts reuse).