Skip to content

Add Start-FinOpsMultitool cmdlet — interactive GUI for tenant-wide FinOps scanning#2155

Draft
z-larsen wants to merge 29 commits into
microsoft:devfrom
z-larsen:feature/finops-multitool
Draft

Add Start-FinOpsMultitool cmdlet — interactive GUI for tenant-wide FinOps scanning#2155
z-larsen wants to merge 29 commits into
microsoft:devfrom
z-larsen:feature/finops-multitool

Conversation

@z-larsen
Copy link
Copy Markdown

@z-larsen z-larsen commented May 19, 2026

🛠️ Description

Adds the Azure FinOps Multitool to the
FinOps toolkit. Discussed with @MSBrett, who suggested contributing the tool into the official
toolkit.

The Multitool scans an Azure tenant for cost optimization, governance, and FinOps insights —
cost trends, orphaned resources, idle VMs, tag hygiene, reservation/savings-plan utilization,
AHB opportunities, budgets, anomaly alerts, and policy compliance. All scans are read-only
(Reader / Cost Management Reader) and ground their findings in the customer's live resource state.

This PR delivers three interfaces over one shared scanner engine, so the same scan logic is
reused everywhere:

Interface Entry point Platform Best for
GUI Start-FinOpsMultitool (WPF) Windows Interactive dashboard, exports (Excel/CSV/JSON/Power BI)
TUI Invoke-FinOpsMultitool Windows, macOS, Linux Terminal-only / cross-platform, CI-friendly, no GUI deps
MCP server Start-McpServer.ps1 Any (stdio JSON-RPC) AI agents (GitHub Copilot, etc.) calling scans as tools

Shared scanner modules (modules/)

24 modular scanners (one per category): orphaned resources, idle VMs, storage tier advice, AHB,
tag inventory/recommendations, policy inventory/recommendations, cost data/trend/by-tag,
resource costs, reservation advice, commitment utilization, savings realized, budget status,
anomaly alerts, Advisor optimization advice, billing structure, contract info, tenant hierarchy.
When a FinOps Hub is present, tag and cost-by-tag scans read pre-exported FOCUS data from Hub
storage instead of the Cost Management API (faster, no throttling).

MCP server + agent skills

Start-McpServer.ps1 exposes the scanners as 21 read-only MCP tools (20 scan_* plus
run_full_scan) over the 2024-11-05 MCP protocol via stdio. .vscode/mcp.json registers the
server for VS Code, and Test-McpServer.ps1 provides protocol-level unit tests.

A companion agent-skill ecosystem (src/templates/agent-skills/) teaches AI agents to use
the server proactively and to route findings into the wider FinOps practice. The
finops-multitool skill acts as the hub, handing off to 11 FinOps-adjacent skills:

power-bi-finops, cost-allocation, azure-policy-governance, unit-economics,
finops-reporting, azure-workbooks-finops, forecasting-budgeting, anomaly-investigation,
focus-data-quality, sustainability-carbon, and rate-optimization-portfolio.

Files added / changed

Path Purpose
src/powershell/Public/Start-FinOpsMultitool.ps1 Public cmdlet — thin launcher for the WPF GUI
src/powershell/Private/FinOpsMultitool/Start-FinOpsMultitool.ps1 WPF application
src/powershell/Private/FinOpsMultitool/Invoke-FinOpsMultitool.ps1 + FinOpsMultitool.psm1 Cross-platform TUI
src/powershell/Private/FinOpsMultitool/Start-McpServer.ps1 MCP server — 21 read-only tools
src/powershell/Private/FinOpsMultitool/Test-McpServer.ps1 MCP protocol unit tests
src/powershell/Private/FinOpsMultitool/modules/ 24 shared scanner modules
src/powershell/Private/FinOpsMultitool/gui/ WPF XAML, app icon, Power BI template
src/templates/agent-skills/finops-multitool/ Hub skill for the MCP server
src/templates/agent-skills/{power-bi-finops, cost-allocation, …}/ 11 FinOps-adjacent skills
.vscode/mcp.json MCP server registration for VS Code
src/powershell/Tests/Unit/Start-FinOpsMultitool.Tests.ps1 Pester unit tests

📷 Screenshots

Screenshots of the GUI and TUI are in the public repo README.

📋 Checklist

🔬 How did you test this change?

  • 🤏 Lint tests
  • 🤞 PS -WhatIf / az validate
  • 👍 Manually deployed + verified
  • 💪 Unit tests (GUI + MCP protocol)
  • 🙌 Integration tests

📦 Deploy to test?

N/A — standalone PowerShell tooling (GUI / TUI / MCP server), not a template deployment.

🙋‍♀️ Do any of the following that apply?

  • 🚨 This is a breaking change.
  • 🤏 The change is less than 20 lines of code.

📑 Did you update docs/changelog.md?

  • ✅ Updated changelog (required for dev PRs)
  • ➡️ Will add log in a future PR (feature branch PRs only)
  • ❎ Log not needed (small/internal change)

📖 Did you update documentation?

  • ➡️ Will add docs in a future PR (feature branch PRs only)
  • ❎ Docs not needed (small/internal change)

… GUI

Adds the Azure FinOps Multitool as a new PowerShell cmdlet in the FinOps toolkit. The Multitool is a WPF-based GUI that scans an Azure tenant for cost optimization, governance, and FinOps insights including cost trends, orphaned resources, idle VMs, tag hygiene, reservation/savings plan utilization, AHB opportunities, budgets, anomaly alerts, and policy compliance.

- Public/Start-FinOpsMultitool.ps1: thin launcher cmdlet with comment-based help

- Private/FinOpsMultitool/: full implementation (24 scanner modules, WPF GUI, Power BI template)

- Tests/Unit/Start-FinOpsMultitool.Tests.ps1: Pester unit tests

Windows-only (requires WPF support).
@microsoft-github-policy-service microsoft-github-policy-service Bot added Needs: Documentation 📝 PR needs a changelog entry, public docs, or internal docs before it can be closed Needs: Review 👀 PR that is ready to be reviewed labels May 19, 2026
@microsoft-github-policy-service microsoft-github-policy-service Bot added the Tool: PowerShell PowerShell scripts and automation label May 19, 2026
@z-larsen
Copy link
Copy Markdown
Author

@microsoft-github-policy-service agree company="Microsoft"

@flanakin
Copy link
Copy Markdown
Collaborator

@z-larsen This is exciting! I don't know much about the tool, but would love to learn more. Can you join us at the contributor sync next Wednesday to share?

https://aka.ms/ftk/contrib-sync

@z-larsen
Copy link
Copy Markdown
Author

Thanks, Michael! Would love to join.

Zac Larsen added 15 commits May 26, 2026 22:11
…info

- Add contract-aware cost access warning banner (EA/MCA/CSP) on Overview tab
- Add contract-specific billing tab messages when billing access unavailable
- Add MG hierarchy unavailable info node in tree view with role guidance
- Fix tag cost queries: use TagKey grouping type (not Tag/Dimension)
- Add batched TagKey+TagValue query attempt with per-tag fallback
- Clear skipSubs between batched and per-tag strategies
- Add throttle pacing (2s every 2 queries) to avoid 429s
- Add EA/MCA cost access detection in Get-CostData
- Add runspace pool for API call parallelization
Zac Larsen added 13 commits May 28, 2026 16:18
Add 11 FinOps-adjacent agent skills that route through the finops-multitool MCP server: power-bi-finops, cost-allocation, azure-policy-governance, unit-economics, finops-reporting, azure-workbooks-finops, forecasting-budgeting, anomaly-investigation, focus-data-quality, sustainability-carbon, and rate-optimization-portfolio. Add a skill-ecosystem hub table to the finops-multitool skill and include the MCP server, tests, and mcp.json config.
…istory throttle fix, Power BI template

Rotate 'Crunching numbers/Fetching numbers/Organizing costs' during 429 backoff in REST and Resource Graph retries. Budget History reuses Cost Trend per-sub monthly data to avoid redundant throttled Cost Management queries. Includes accumulated multitool module updates and the New-PowerBITemplate generator.
@microsoft-github-policy-service
Copy link
Copy Markdown

@@z-larsen, I noticed you said you would update the changelog in a future PR, but this PR is going into the dev branch. All dev branch PRs must have changelog entries to be ready for the next release. Either update the PR to target a feature branch or add a changelog entry to this PR.

@microsoft-github-policy-service
Copy link
Copy Markdown

@@z-larsen, I noticed you said you would update documentation in a future PR, but this PR is going into the dev branch. All dev branch PRs must have applicable documentation updated to be ready for the next release. Either update the PR to target a feature branch or update the documentation in this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Needs: Documentation 📝 PR needs a changelog entry, public docs, or internal docs before it can be closed Needs: Review 👀 PR that is ready to be reviewed Tool: PowerShell PowerShell scripts and automation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants