Cloud Cost Management
Overview
Cloud cost management here means two things: catching spend that changed
unexpectedly, and finding spend that shouldn't exist at all (a resource
nobody is using but that's still billing). Both are about protecting margin
on infrastructure that's easy to lose track of once it's provisioned — this
skill treats "the bill went up" and "we're paying for something idle" as
related but distinct findings, and reports them separately.
This is spend on the infrastructure substrate itself (compute, storage,
managed databases, networking). It is not PSA/contract billing
reconciliation (see finance-pack) — this skill is about what the cloud
platform itself is charging, not what the MSP bills the client for it.
Anti-triggers
- Azure retail pricing and inventory lookups — meter rates, quota
headroom, and subscription/resource-group listings are the connector's own
read-only surface; use
azure-mcp-cost-and-capacity. This skill consumes
those numbers to find anomalies and reclaimable spend.
- The raw metric or log query behind a spend signal — use
azure-mcp-observability for the monitor and log surface itself.
Discovering available tools first
Never assume which cloud platform is connected:
- Call
conduit__search_tools with a query like "cost", "pricing",
"billing", or "list droplets" to discover which cloud platform
connector(s) are live and their actual tool names (e.g.
azure-mcp__pricing, azure-mcp__monitor, azure-mcp__group_resource_list,
digitalocean__list_droplets, digitalocean__list_databases,
digitalocean__list_volumes, digitalocean__list_load_balancers).
- More than one cloud platform can be connected — cover all of them.
- Only call concrete tools that discovery actually returned. Not every
connected platform exposes a first-class billing API through its MCP
surface — where cost data isn't directly available, build the cost view
from resource inventory and known pricing (
azure-mcp__pricing) instead,
and say explicitly that it's a derived estimate, not a billed figure.
Key Concepts
Cost spikes vs. normal variance
Apply the same discipline as capacity planning: a spend increase driven by a
known, intentional change (a new resource provisioned, a planned scale-up) is
not an anomaly — it's expected cost. Flag as an anomaly only spend growth
that:
- Doesn't correspond to a visible inventory change (resource count and
sizing look the same, but the bill went up) — this is the strongest
anomaly signal, since it points at either a pricing/tier change, a usage
spike (egress, API calls, storage growth within existing resources), or a
billing error.
- Exceeds a reasonable period-over-period threshold (in the absence of a
documented client policy, flag month-over-month growth beyond roughly 20%
for review — state this as a default, not a tuned threshold).
- Is concentrated in a single resource or service rather than spread evenly
across the whole environment — concentrated spikes are easier to root-cause
and usually more actionable than broad, gradual growth.
Orphaned and idle resources — the reclaimable-spend hunt
These are resources that cost money but provide no value, and they're the
highest-confidence savings finding because reclaiming them has no
functional downside (unlike right-sizing, which requires judgment about
headroom). Check for, per platform:
| Category |
Azure |
DigitalOcean |
| Unattached storage |
Managed disks not attached to any VM (via azure-mcp__group_resource_list filtered to disk resources, cross-referenced against VM attachments) |
Unattached volumes (via digitalocean__list_volumes, cross-referenced against Droplet attachments) |
| Idle load balancers / gateways |
Load balancers or app gateways with no healthy backend pool members, or minimal-to-no traffic in azure-mcp__monitor |
Load balancers with no attached Droplets or near-zero traffic |
| Stopped-but-billing compute |
VMs stopped but not deallocated (still billing for reserved compute) — check power state distinctly from "stopped/deallocated" via resource health/monitor |
Droplets powered off but not destroyed still bill for reserved disk/resources — flag long-powered-off Droplets |
| Idle managed databases |
Databases provisioned with no recent connection activity in azure-mcp__monitor |
Databases (digitalocean__list_databases) with no recent connection activity |
| Orphaned network resources |
Unused public IPs, NICs not attached to any VM |
Reserved IPs not attached to any Droplet |
For each candidate, distinguish "confirmed idle" (clear evidence of no use
over a meaningful window) from "likely idle, needs confirmation" (e.g., a
resource with sparse but non-zero activity, or a standby/DR resource that's
supposed to be idle) — never recommend deleting something without stating
the confidence level and evidence.
Building a monthly cost trend view
- Discover what billing/usage data each connected platform actually
exposes through the gateway — this varies by platform, and not every
connector surfaces itemized billing.
- Where usable cost/usage data exists, build a month-over-month view scoped
to whatever history is available, broken out by resource/service category
where the data supports it.
- Where cost data isn't directly exposed, build a resource-inventory-based
proxy (current resource count/sizing × platform list pricing) and label
it explicitly as an estimate, not an actual bill.
- Always state the data source and window behind the trend view so the
reader knows whether they're looking at billed actuals or an estimate.
Common Workflows
Cost anomaly report for a window
- Discover connected cloud platforms via
conduit__search_tools.
- Pull cost/usage data (or the inventory-based proxy, if billing data isn't
exposed) for the requested window and the prior comparable window.
- Apply the spike-detection logic above; rank anomalies by dollar impact
(largest absolute change first).
- Separately, run the orphaned/idle-resource hunt across all connected
platforms and rank by reclaimable monthly cost.
- Return both sections — anomalies and reclaimable spend — clearly
separated, since they call for different actions (investigate vs.
decommission).
Reclaimable-spend sweep only
- Discover connected platforms.
- Run the orphaned/idle-resource checks above across all resource
categories the connected platform(s) expose.
- Rank findings by estimated monthly reclaimable cost, with confidence
level per finding.
Error Handling
No cloud platform connector discovered
Say so explicitly: "No cloud platform connector (Azure, DigitalOcean) is
available through the gateway, so there's no cost data to report." Do not
fabricate spend figures.
Platform connected but no billing/cost data exposed
Fall back to the inventory-based cost estimate described above and label it
as an estimate. Never present an estimate as a billed actual.
Ambiguous or ambiguous-confidence idle-resource finding
Report it with its confidence level and evidence rather than omitting it or
overstating certainty — a "likely idle, needs confirmation" finding is still
useful if labeled honestly.
Related Skills
1---2name: cloud-cost-management3description: Cloud spend anomaly detection and reclaimable-spend hunting on whatever platforms (Azure, DigitalOcean) are connected: the signals that make a spend increase an anomaly rather than expected cost, the per-platform orphaned/idle resource catalog (unattached storage, idle load balancers, stopped-but-not-deallocated compute, idle managed databases, orphaned network resources), and how to build a monthly cost trend view — or a clearly labeled inventory-and-list-pricing estimate when a platform exposes no billing data.4---56# Cloud Cost Management78## Overview910Cloud cost management here means two things: catching spend that changed11unexpectedly, and finding spend that shouldn't exist at all (a resource12nobody is using but that's still billing). Both are about protecting margin13on infrastructure that's easy to lose track of once it's provisioned — this14skill treats "the bill went up" and "we're paying for something idle" as15related but distinct findings, and reports them separately.1617This is spend on the infrastructure substrate itself (compute, storage,18managed databases, networking). It is not PSA/contract billing19reconciliation (see `finance-pack`) — this skill is about what the cloud20platform itself is charging, not what the MSP bills the client for it.2122## Anti-triggers2324- **Azure retail pricing and inventory lookups** — meter rates, quota25 headroom, and subscription/resource-group listings are the connector's own26 read-only surface; use `azure-mcp-cost-and-capacity`. This skill consumes27 those numbers to find anomalies and reclaimable spend.28- **The raw metric or log query behind a spend signal** — use29 `azure-mcp-observability` for the monitor and log surface itself.3031## Discovering available tools first3233Never assume which cloud platform is connected:34351. Call `conduit__search_tools` with a query like `"cost"`, `"pricing"`,36 `"billing"`, or `"list droplets"` to discover which cloud platform37 connector(s) are live and their actual tool names (e.g.38 `azure-mcp__pricing`, `azure-mcp__monitor`, `azure-mcp__group_resource_list`,39 `digitalocean__list_droplets`, `digitalocean__list_databases`,40 `digitalocean__list_volumes`, `digitalocean__list_load_balancers`).412. More than one cloud platform can be connected — cover all of them.423. Only call concrete tools that discovery actually returned. Not every43 connected platform exposes a first-class billing API through its MCP44 surface — where cost data isn't directly available, build the cost view45 from resource inventory and known pricing (`azure-mcp__pricing`) instead,46 and say explicitly that it's a derived estimate, not a billed figure.4748## Key Concepts4950### Cost spikes vs. normal variance5152Apply the same discipline as capacity planning: a spend increase driven by a53known, intentional change (a new resource provisioned, a planned scale-up) is54not an anomaly — it's expected cost. Flag as an anomaly only spend growth55that:56571. Doesn't correspond to a visible inventory change (resource count and58 sizing look the same, but the bill went up) — this is the strongest59 anomaly signal, since it points at either a pricing/tier change, a usage60 spike (egress, API calls, storage growth within existing resources), or a61 billing error.622. Exceeds a reasonable period-over-period threshold (in the absence of a63 documented client policy, flag month-over-month growth beyond roughly 20%64 for review — state this as a default, not a tuned threshold).653. Is concentrated in a single resource or service rather than spread evenly66 across the whole environment — concentrated spikes are easier to root-cause67 and usually more actionable than broad, gradual growth.6869### Orphaned and idle resources — the reclaimable-spend hunt7071These are resources that cost money but provide no value, and they're the72highest-confidence savings finding because reclaiming them has no73functional downside (unlike right-sizing, which requires judgment about74headroom). Check for, per platform:7576| Category | Azure | DigitalOcean |77|---|---|---|78| Unattached storage | Managed disks not attached to any VM (via `azure-mcp__group_resource_list` filtered to disk resources, cross-referenced against VM attachments) | Unattached volumes (via `digitalocean__list_volumes`, cross-referenced against Droplet attachments) |79| Idle load balancers / gateways | Load balancers or app gateways with no healthy backend pool members, or minimal-to-no traffic in `azure-mcp__monitor` | Load balancers with no attached Droplets or near-zero traffic |80| Stopped-but-billing compute | VMs stopped but not deallocated (still billing for reserved compute) — check power state distinctly from "stopped/deallocated" via resource health/monitor | Droplets powered off but not destroyed still bill for reserved disk/resources — flag long-powered-off Droplets |81| Idle managed databases | Databases provisioned with no recent connection activity in `azure-mcp__monitor` | Databases (`digitalocean__list_databases`) with no recent connection activity |82| Orphaned network resources | Unused public IPs, NICs not attached to any VM | Reserved IPs not attached to any Droplet |8384For each candidate, distinguish "confirmed idle" (clear evidence of no use85over a meaningful window) from "likely idle, needs confirmation" (e.g., a86resource with sparse but non-zero activity, or a standby/DR resource that's87supposed to be idle) — never recommend deleting something without stating88the confidence level and evidence.8990### Building a monthly cost trend view91921. Discover what billing/usage data each connected platform actually93 exposes through the gateway — this varies by platform, and not every94 connector surfaces itemized billing.952. Where usable cost/usage data exists, build a month-over-month view scoped96 to whatever history is available, broken out by resource/service category97 where the data supports it.983. Where cost data isn't directly exposed, build a resource-inventory-based99 proxy (current resource count/sizing × platform list pricing) and label100 it explicitly as an estimate, not an actual bill.1014. Always state the data source and window behind the trend view so the102 reader knows whether they're looking at billed actuals or an estimate.103104## Common Workflows105106### Cost anomaly report for a window1071081. Discover connected cloud platforms via `conduit__search_tools`.1092. Pull cost/usage data (or the inventory-based proxy, if billing data isn't110 exposed) for the requested window and the prior comparable window.1113. Apply the spike-detection logic above; rank anomalies by dollar impact112 (largest absolute change first).1134. Separately, run the orphaned/idle-resource hunt across all connected114 platforms and rank by reclaimable monthly cost.1155. Return both sections — anomalies and reclaimable spend — clearly116 separated, since they call for different actions (investigate vs.117 decommission).118119### Reclaimable-spend sweep only1201211. Discover connected platforms.1222. Run the orphaned/idle-resource checks above across all resource123 categories the connected platform(s) expose.1243. Rank findings by estimated monthly reclaimable cost, with confidence125 level per finding.126127## Error Handling128129### No cloud platform connector discovered130131Say so explicitly: "No cloud platform connector (Azure, DigitalOcean) is132available through the gateway, so there's no cost data to report." Do not133fabricate spend figures.134135### Platform connected but no billing/cost data exposed136137Fall back to the inventory-based cost estimate described above and label it138as an estimate. Never present an estimate as a billed actual.139140### Ambiguous or ambiguous-confidence idle-resource finding141142Report it with its confidence level and evidence rather than omitting it or143overstating certainty — a "likely idle, needs confirmation" finding is still144useful if labeled honestly.145146## Related Skills147148- [Cloud Capacity Planning](../cloud-capacity-planning/SKILL.md) — resource149 right-sizing and forecasting; a related but distinct judgment from cost150 anomaly detection151- [Network Health Sweep](../network-health-sweep/SKILL.md) — device/network152 health, a different infrastructure axis entirely