-
Notifications
You must be signed in to change notification settings - Fork 237
Add Start-FinOpsMultitool cmdlet β interactive GUI for tenant-wide FinOps scanning #2155
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Changes from all commits
3c89c43
1a63159
8db8eaa
981e4c9
d3d7c1f
a5fd3e3
54129e2
35790a6
9455685
e65b62d
f09870d
c735364
a5e4190
c976654
1fbc9c0
92d17d9
caf4cb2
62e27b8
e730754
74127a7
af92edf
5215c38
a8654bf
0d2c2d5
0be59a2
3febeda
53f9b86
f57b4a9
10fc88b
cb593b3
4f4fee9
26d8c1e
9b4e761
c779195
285239d
4802b27
e8b1f12
9ee96a4
ad4d9b6
94d31ce
a409555
3c8eaa1
7d6b5e3
78c90ac
423735c
d4ee137
83af32c
6263227
b7f7867
151a223
687bfe9
b550f15
44c1118
8290178
3e6df7c
ead35b3
20474c0
e58931b
532b176
1ef543e
3ba8107
ca47281
ae181d7
0540b94
a13b7a0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| { | ||
| "servers": { | ||
| "finops-multitool": { | ||
| "type": "stdio", | ||
| "command": "pwsh", | ||
| "args": ["-NoProfile", "-File", "${workspaceFolder}/src/powershell/Private/FinOpsMultitool/Start-McpServer.ps1"], | ||
| "env": { | ||
| "FINOPS_WRITE_MODE": "ReadOnly" | ||
| } | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| --- | ||
| title: FinOps Multitool commands | ||
| description: Learn about PowerShell commands in the FinOpsToolkit module that scan an Azure environment for cost optimization, governance, and FinOps insights. | ||
| author: z-larsen | ||
| ms.author: zlarsen | ||
| ms.date: 07/02/2026 | ||
| ms.topic: reference | ||
| ms.service: finops | ||
| ms.subservice: finops-toolkit | ||
| ms.reviewer: micflan | ||
| #customer intent: As a FinOps user, I want to understand what FinOps Multitool commands are available in the FinOpsToolkit module. | ||
| --- | ||
|
|
||
| # FinOps Multitool commands | ||
|
|
||
| The FinOps Multitool scans an Azure environment for cost optimization, governance, and FinOps insights and grounds its findings in your live resource state. It surfaces cost trends, orphaned resources, idle VMs, tag hygiene, reservation and savings plan utilization, Azure Hybrid Benefit opportunities, budgets, anomaly alerts, and policy compliance. | ||
|
|
||
| The Multitool delivers the same scan engine through two interfaces: | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] "The Multitool delivers the same scan engine through two interfaces" overstates parity between the TUI and MCP server. The TUI's |
||
|
|
||
| - **Terminal UI (TUI)** β An interactive, cross-platform terminal experience launched with [Start-FinOpsMultitool](start-finopsmultitool.md). | ||
| - **MCP server** β A Model Context Protocol server (`Start-McpServer.ps1`) that exposes the scans as tools for AI agents like GitHub Copilot. | ||
|
|
||
| <br> | ||
|
|
||
| ## Commands | ||
|
|
||
| - [Start-FinOpsMultitool](start-finopsmultitool.md) β Launch the interactive FinOps Multitool terminal UI. | ||
|
|
||
| <br> | ||
|
|
||
| ## Scan coverage | ||
|
|
||
| The Multitool includes 30 scan modules across the following categories: | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] This "Scan coverage" list is stale/incomplete against the actual 40 tools in
Also, "Analysis scans are read-only and use Reader or Cost Management Reader access" below this list has the same permission-role gap noted on
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] This "Scan coverage" list is stale/incomplete against the actual 40 tools in
Also, "Analysis scans are read-only and use Reader or Cost Management Reader access" below this list has the same permission-role gap noted on |
||
|
|
||
| - **Optimization** β Orphaned resources, idle VMs, storage tier advice, and Azure Hybrid Benefit opportunities. | ||
| - **Governance** β Tag inventory and recommendations, and policy inventory and recommendations. | ||
| - **Cost analysis** β Cost data, cost trend, cost by tag, and top resources by cost. | ||
| - **Commitments** β Reservation advice, commitment utilization, and realized savings. | ||
| - **Monitoring** β Budget status and anomaly alerts. | ||
| - **Advisor** β Azure Advisor cost recommendations. | ||
| - **Account** β Billing structure, contract info, and tenant hierarchy. | ||
|
|
||
| Analysis scans are read-only and use Reader or Cost Management Reader access. | ||
|
|
||
| <br> | ||
|
|
||
| ## FinOps Hub data paths | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] "FinOps Hub" (capital H) here vs. "FinOps hub" (sentence case, the established convention per
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] "FinOps Hub" (capital H) here vs. "FinOps hub" (sentence case, the established convention per |
||
|
|
||
| When a [FinOps hub](../../hubs/finops-hubs-overview.md) is present, cost scans read from the hub and choose the path automatically: | ||
|
|
||
| - **Kusto database (recommended for large environments)** β When the hub has an Azure Data Explorer or Microsoft Fabric cluster, the Multitool discovers it through Azure Resource Graph and pushes aggregation into the engine, returning only summarized results. This scales to large datasets without loading raw cost rows into PowerShell. To query a local hub on your own hardware, set the `FINOPS_HUB_KUSTO_URI` environment variable to a local Kusto endpoint (optionally set `FINOPS_HUB_KUSTO_DB`, which defaults to `Hub`). | ||
| - **Storage reader (small-dataset fallback)** β When no Kusto cluster is reachable, the Multitool reads the hub's storage export and aggregates in PowerShell. Use this for smaller datasets. | ||
|
|
||
| If no hub is available, cost scans use the live Cost Management API. | ||
|
|
||
| <br> | ||
|
|
||
| ## MCP server for AI agents | ||
|
|
||
| `Start-McpServer.ps1` exposes the scan engine as 40 tools over the Model Context Protocol (`2024-11-05`) via stdio: 36 read-only analysis tools (including `run_full_scan` and `detect_cost_data_source`) and four write/remediation tools. The write tools are dry-run by default, gated by a configurable write-safety policy, and disabled unless the `FINOPS_WRITE_MODE` environment variable is setβthe server defaults to `ReadOnly`, which blocks all writes. | ||
|
|
||
| A companion set of agent skills teaches AI agents to use the server and route findings into the wider FinOps practice. The `finops-multitool` skill acts as the hub and hands off to FinOps-adjacent skills for reporting, allocation, governance, unit economics, and more. | ||
|
|
||
| <br> | ||
|
|
||
| ## Give feedback | ||
|
|
||
| Let us know how we're doing with a quick review. We use these reviews to improve and expand FinOps tools and resources. | ||
|
|
||
| <!-- prettier-ignore-start --> | ||
| > [!div class="nextstepaction"] | ||
| > [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20the%20FinOps%20toolkit%20PowerShell%20module%3F/cvaQuestion/How%20valuable%20are%20the%20FinOps%20toolkit%20PowerShell%20module%3F/surveyId/FTK/bladeName/PowerShell/featureName/Multitool) | ||
| <!-- prettier-ignore-end --> | ||
|
|
||
| If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes. | ||
|
|
||
| <!-- prettier-ignore-start --> | ||
| > [!div class="nextstepaction"] | ||
| > [Vote on or suggest ideas](https://github.com/microsoft/finops-toolkit/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22Tool%3A%20PowerShell%22%20sort%3A"reactions-%2B1-desc") | ||
| <!-- prettier-ignore-end --> | ||
|
|
||
| <br> | ||
|
|
||
| ## Related content | ||
|
|
||
| Related solutions: | ||
|
|
||
| - [FinOps toolkit PowerShell module](../powershell-commands.md) | ||
| - [FinOps hubs](../../hubs/finops-hubs-overview.md) | ||
|
|
||
| <br> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| --- | ||
| title: Start-FinOpsMultitool command | ||
| description: Launch the FinOps Multitool interactive terminal UI to scan an Azure environment for cost optimization, governance, and FinOps insights. | ||
| author: z-larsen | ||
| ms.author: zlarsen | ||
| ms.date: 07/02/2026 | ||
| ms.topic: reference | ||
| ms.service: finops | ||
| ms.subservice: finops-toolkit | ||
| ms.reviewer: micflan | ||
| #customer intent: As a FinOps user, I want to understand how to use the Start-FinOpsMultitool command in the FinOpsToolkit module. | ||
| --- | ||
|
|
||
| # Start-FinOpsMultitool command | ||
|
|
||
| The **Start-FinOpsMultitool** command launches the FinOps Multitool interactive terminal UI (TUI). The tool authenticates to Azure, discovers accessible subscriptions, and runs the scan modules you selectβcovering cost trends, orphaned resources, idle VMs, tag hygiene, reservation and savings plan utilization, Azure Hybrid Benefit opportunities, budgets, anomaly alerts, and policy compliance. | ||
|
|
||
| Results are rendered in the terminal with export options for Excel, CSV, JSON, and Power BI. The scan modules are read-only. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] "Results are rendered in the terminal with export options for Excel, CSV, JSON, and Power BI" overstates what the TUI actually exports. The export code in
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] "Results are rendered in the terminal with export options for Excel, CSV, JSON, and Power BI" overstates what the TUI actually exports. The export code in |
||
|
|
||
| The command runs on PowerShell 7+ (cross-platform) and requires the `Az.Accounts`, `Az.ResourceGraph`, and `Az.Storage` modules with at least Reader access on the target scope. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] Two smaller accuracy gaps in this line:
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. π€ [AI][Claude Code] Two smaller accuracy gaps in this line:
|
||
|
|
||
| <br> | ||
|
|
||
| ## Syntax | ||
|
|
||
| ```powershell | ||
| Start-FinOpsMultitool ` | ||
| [-SubscriptionId <string>] ` | ||
| [-OutputPath <string>] ` | ||
| [<CommonParameters>] | ||
| ``` | ||
|
|
||
| <br> | ||
|
|
||
| ## Parameters | ||
|
|
||
| | Name | Description | | ||
| | ----------------- | -------------------------------------------------------------------------------------------------------------- | | ||
| | `βSubscriptionId` | Optional. Scopes the scan to a single subscription. When omitted, all accessible subscriptions are discovered. | | ||
| | `βOutputPath` | Optional. Directory for exported result files. Defaults to the tool's working folder. | | ||
|
|
||
| <br> | ||
|
|
||
| ## Examples | ||
|
|
||
| The following examples demonstrate how to use the Start-FinOpsMultitool command. | ||
|
|
||
| ### Launch the Multitool | ||
|
|
||
| ```powershell | ||
| Start-FinOpsMultitool | ||
| ``` | ||
|
|
||
| Launches the terminal UI. You're prompted to authenticate, select a tenant if needed, and choose the subscriptions and modules to scan. | ||
|
|
||
| ### Scope to a single subscription | ||
|
|
||
| ```powershell | ||
| Start-FinOpsMultitool -SubscriptionId '00000000-0000-0000-0000-000000000000' | ||
| ``` | ||
|
|
||
| Launches the terminal UI scoped to a single subscription. | ||
|
|
||
| ### Set an output path for exports | ||
|
|
||
| ```powershell | ||
| Start-FinOpsMultitool -OutputPath './finops-results' | ||
| ``` | ||
|
|
||
| Launches the terminal UI and writes exported result files to the specified directory. | ||
|
|
||
| <br> | ||
|
|
||
| ## FinOps Hub data paths | ||
|
|
||
| When a [FinOps hub](../../hubs/finops-hubs-overview.md) is present, choosing the **FinOps Hub** data source prefers the hub's Azure Data Explorer or Microsoft Fabric Kusto databaseβaggregation is pushed into the engine and only summarized results are returned, so large hubs are never loaded into PowerShell. To query a local hub on your own hardware, set `FINOPS_HUB_KUSTO_URI` to a local Kusto endpoint. When no Kusto cluster is reachable, the Multitool falls back to reading the hub storage export, which is intended for smaller datasets. For more information, see [FinOps Multitool commands](finops-multitool-commands.md). | ||
|
|
||
| <br> | ||
|
|
||
| ## Related content | ||
|
|
||
| Related solutions: | ||
|
|
||
| - [FinOps Multitool commands](finops-multitool-commands.md) | ||
| - [FinOps toolkit PowerShell module](../powershell-commands.md) | ||
| - [FinOps hubs](../../hubs/finops-hubs-overview.md) | ||
|
|
||
| <br> | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π€ [AI][Claude Code]β οΈ Should fix
"The Multitool delivers the same scan engine through two interfaces" overstates parity between the TUI and MCP server. The TUI's
$scanModulesarray wires only 26 of the 30 scan capabilities βscan_vm_cost_breakdown,scan_allocate_shared_cost,scan_billing_account, andscan_usage_allocationare MCP-only and never surfaced in the TUI. Worth softening this claim or noting the TUI/MCP coverage difference explicitly.