maf-doctor
1.5.0
dotnet tool install --global maf-doctor --version 1.5.0
dotnet new tool-manifest
dotnet tool install --local maf-doctor --version 1.5.0
#tool dotnet:?package=maf-doctor&version=1.5.0
nuke :add-package maf-doctor --version 1.5.0
MAF Doctor
One install — a .NET global tool, an MCP server, and an IDE plugin — for Microsoft Agent Framework (MAF).
Diagnose, explain, prescribe, and verify MAF agents and workflows: an A–F health letter, deterministic Roslyn auto-fixes, fan-out/fan-in silent-failure detection, compiler-ground-truth CS0618 hunts, and a self-updating obsolete-API registry.

Install
dotnet tool install --global maf-doctor # first time
dotnet tool update --global maf-doctor # upgrade later
Then, in any MAF repo:
maf-doctor doctor . # instant A–F health grade + the top fixes (add --all for every finding)
maf-doctor autofix-all . # apply every deterministic Roslyn rewriter
maf-doctor init # wire the MCP server + MAF steering into this repo
init is non-destructive — it attaches and updates only
Running maf-doctor init never overwrites or merges into your own files. It only:
- Adds its own MCP server entry to VS Code (
.vscode/mcp.json) and Claude Code (.mcp.json) — existing entries are left untouched. - Drops MAF steering as self-contained sidecars in each tool's convention directory —
.github/instructions/(Copilot),.claude/plus a one-line import inCLAUDE.md(Claude Code), and a clearly-delimited managed block inAGENTS.md. - These sidecars are regenerated on every re-run, so re-initializing after an upgrade is always safe and idempotent — your hand-authored instructions are never edited.
Uninstall is just as clean: dotnet tool uninstall --global maf-doctor, then delete the sidecars.
What you get
- MCP server — 27 tools, 7 resources, and 10 prompts for GitHub Copilot / Claude Code / Cursor.
- CLI —
doctor,autofix-all,new agent,migrate-scan,init, and more. - Plugin — 14 bundled skills + 8 specialist agents wired into Copilot's and Claude's agentic loops.
- A companion maf-doctor.Analyzers package — 3 Roslyn analyzers (MAF001 / MAF002 / MAF003) for IDE write-time enforcement.
Highlights
- 🔍 Catches bugs that compile clean — fan-out/fan-in silent failures where a workflow exits successfully but produces no output. Zero build signal.
- 🩺 Compiler ground-truth for CS0618 — obsolete-API usage mapped to its exact replacement pattern. Deterministic fixes, not hallucinated ones.
- 🆕 Confidence triage (1.4.0) — every finding carries a
confidence(certain/high/heuristic); the heuristic ones (likely false positives) are flagged "⚠ verify it's real first", indoctor,--plan, and--json. - 🆕
maf-remediate— fix it all (1.4.0) — an MCP prompt that grades, plans, runsautofix-all, then works each semantic finding confirming heuristic ones before editing, building + re-grading. Backed by themaf-remediation-playbookskill.doctor --plan --jsongives an automatable manifest. - 🆕
doctor --all— list every finding (not just the top 3), grouped by rule and ordered by impact, each with a one-line why and the offending source line. Full triage in one pass. - 🆕
autofix-allis human-readable — a per-rule breakdown + changed files + next step by default (--jsonfor the machine shape); the deterministic fixes turn the findings into an ordered, checkboxed remediation plan viadoctor --plan. - 📖 It updates itself — a weekly GitHub Actions watcher refreshes the migration guide, compatibility matrix, and obsolete-API registry as new MAF versions ship, so you don't pin to a MAF version or wait on a maintainer release.
- 🔐 Security-hardened — closes the named MCP attack lattice (path-escape, annotation drift, scaffold code-injection, prompt-injection, workflow-dispatch input injection). Cisco mcp-scanner: all tools SAFE, 0 findings.
Full docs
📖 github.com/joslat/maf-doctor — 3-minute quickstart, init reference, usage guide (prompts / tools / agents + natural-language steering), hands-on workshop, and security docs.
MIT licensed.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.0 | 0 | 6/25/2026 |
| 1.4.0 | 41 | 6/24/2026 |
| 1.3.0 | 108 | 6/20/2026 |
| 1.2.11 | 111 | 6/18/2026 |
| 1.2.10 | 90 | 6/18/2026 |
| 1.2.9 | 109 | 6/16/2026 |
| 1.2.8 | 96 | 6/16/2026 |
| 1.2.7 | 106 | 6/16/2026 |
| 1.2.6 | 104 | 6/14/2026 |
| 1.2.5 | 94 | 6/14/2026 |
| 1.2.4 | 90 | 6/14/2026 |
| 1.2.3 | 98 | 6/14/2026 |
| 1.2.2 | 95 | 6/14/2026 |
| 1.2.1 | 93 | 6/14/2026 |