Skip to main content
Glama
chaandannn

nable (finops-mcp)

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_connected_providersA

List all configured cloud and SaaS providers with their connection status. Shows which connectors are active, which need credentials, and the active plan.

check_connector_healthA

Actively test every configured connector with a real API call. Reports health status, last successful data time, and fix instructions for failures.

Examples: - "Are all my connectors healthy?" - "Which connectors are broken or stale?" - "Why am I not getting data from Datadog?"

get_cost_summaryA

Get total spend summarized by service, account, and region.

Args: provider: Provider name (e.g. "aws", "datadog"). None = all. category: "cloud" or "saas". None = all. start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. granularity: "DAILY" or "MONTHLY". account: Named AWS account from accounts.yaml. Uses default when omitted.

Examples: - "How much did we spend last month?" - "Give me an AWS cost summary for January" - "What did the production account spend this month?"

get_costs_by_serviceA

Cost breakdown by service, optionally filtered to a keyword.

Args: service_filter: Case-insensitive substring (e.g. "compute", "storage"). provider: Specific provider. None = all. category: "cloud" or "saas". None = all. start_date: ISO date. Defaults to 30 days ago. end_date: ISO date. Defaults to today. account: Named AWS account from accounts.yaml.

Examples: - "How much did compute cost us?" - "Show me all Datadog product costs" - "What did the staging account spend on EC2?"

get_top_cost_driversA

Return the top N most expensive services across all configured providers.

Args: limit: Number of top services to return (default 10). provider: Specific provider. None = all. category: "cloud" or "saas". None = all. start_date: ISO date. Defaults to 30 days ago. end_date: ISO date. Defaults to today. account: Named AWS account from accounts.yaml.

Examples: - "What are our biggest cost drivers this month?" - "Top 5 most expensive things in AWS" - "Top cost drivers in the staging account"

compare_providersA

Side-by-side cost comparison across all configured providers.

Args: category: "cloud" or "saas". None = all. start_date: ISO date. Defaults to 30 days ago. end_date: ISO date. Defaults to today.

Examples: - "Which cloud are we spending the most on?" - "Compare our SaaS tool spending" - "How does AWS compare to Azure and GCP?"

get_cost_trendsA

Cost trends over time broken down by day or month.

Args: provider: Specific provider. None = all. category: "cloud" or "saas". None = all. days: Look-back window in days (default 30). granularity: "DAILY" or "MONTHLY".

Examples: - "Is our AWS spend trending up or down?" - "Show daily cloud costs for the last 2 weeks" - "What did we spend each month this quarter?"

list_accountsA

List all cloud accounts, subscriptions, and SaaS org IDs that are accessible.

Args: provider: Specific provider. None = all.

list_aws_accountsA

List all AWS accounts configured in ~/.finops-mcp/accounts.yaml.

Shows each account's name, account ID, region, and auth method. Use account names as the 'account' parameter in cost tools like get_cost_summary.

Examples: - "What AWS accounts do I have configured?" - "List all my AWS accounts" - "Which account is the default?"

get_cost_summary_all_accountsA

Fan out cost queries across ALL configured AWS accounts and return a combined view sorted by total spend. Shows each account's total and top services.

Args: start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. granularity: "DAILY" or "MONTHLY".

Examples: - "Show costs across all my AWS accounts" - "What is each client account spending this month?" - "Compare spend across production and staging accounts"

get_saas_spend_summaryA

Dedicated summary of all SaaS tool spending (Datadog, Snowflake, GitHub, etc.). Useful for understanding your software vendor bill separate from cloud infrastructure.

Examples: - "How much are we spending on SaaS tools?" - "What's our total software vendor spend?" - "Break down our SaaS costs by tool"

get_total_spend_all_sourcesA

Grand total across ALL connected sources, cloud infrastructure + SaaS tools combined. The true "total technology spend" number.

Examples: - "What is our total tech spend this month?" - "How much are we spending on everything combined?" - "Give me our full cloud + software cost picture"

set_alert_policyA

Set a custom alert policy for anomaly detection on a specific provider or service.

Use this to:

  • Mute noisy services you don't care about (e.g. DataTransfer, Tax)

  • Raise the threshold for services that are naturally volatile

  • Set a minimum $ delta to ignore tiny fluctuations

Supports glob patterns: "DataTransfer*", "Transfer", "EC2*"

Args: provider: "aws", "azure", "gcp", or "" for all providers service_pattern: Exact service name or glob pattern (e.g. "DataTransfer", "*") muted: If True, all anomalies matching this rule are silenced min_pct_change: Only alert if change exceeds this % (overrides default 20%) min_usd_change: Only alert if absolute change exceeds this $ amount note: Why this policy exists (shown in list_alert_policies)

Examples: - "Mute DataTransfer anomalies, they're always noisy" - "Only alert on EC2 if it changes by more than 40%" - "Ignore AWS Tax service anomalies" - "Only alert on changes over $500, ignore tiny fluctuations" - "Set a 50% threshold for Support charges"

list_alert_policiesA

List all custom alert policies for anomaly detection.

Shows which services are muted, which have custom thresholds, and why.

Examples: - "What alert policies do I have?" - "Which services are muted from anomaly detection?" - "Show my alert thresholds"

delete_alert_policyA

Remove a custom alert policy. The service will revert to the default threshold.

Args: policy_id: The ID from list_alert_policies()

Examples: - "Delete alert policy 3" - "Remove the mute on DataTransfer"

get_anomaliesA

Return active (unacknowledged) cost anomalies detected from historical baselines.

Args: provider: Filter to a specific provider. None = all. severity: "high", "medium", or "low". None = all severities. limit: Max anomalies to return (default 20). account: Named AWS account from accounts.yaml to filter results.

Examples: - "Are there any cost anomalies I should know about?" - "Show me high-severity cost spikes" - "What spiked in AWS this week?" - "Any anomalies in the production account?"

Note: Anomalies require at least 7 days of snapshot history. Run 'finops snapshot' or wait for the daily job to accumulate data.

acknowledge_anomalyA

Mark an anomaly as acknowledged (dismissed). It will no longer appear in active anomalies.

Args: anomaly_id: The ID from get_anomalies().

Examples: - "Dismiss anomaly 42, it was a planned migration" - "Acknowledge that spike, it was expected"

get_cost_historyA

Return historical daily cost data for a specific provider + service. Used for trend analysis and understanding anomaly context.

Args: provider: e.g. "aws" service: e.g. "Amazon EC2" account_id: The account/subscription ID days: Look-back window in days (default 30)

Examples: - "Show me 30 days of history for AWS EC2" - "What did Datadog cost each day this month?"

take_snapshot_nowA

Manually trigger a cost snapshot right now (fetches yesterday's costs from all providers). Normally this runs automatically at 01:00 UTC daily.

Examples: - "Take a cost snapshot now" - "Update the cost history with today's data"

get_costs_by_teamA

Return cloud costs broken down by engineering team, using tag attribution rules.

Requires:

  • Tag rules configured in ~/.finops/tag_rules.yaml (run 'uvx finops-mcp setup' → tags)

  • Cloud providers that support tag-based cost grouping (AWS, Azure, GCP)

Args: start_date: ISO date. Defaults to 30 days ago. end_date: ISO date. Defaults to today. provider: Filter to a specific provider.

Examples: - "How much is the data team spending?" - "Show me cloud costs by team this month" - "Which team has the highest AWS bill?"

run_attribution_nowA

Fetch tagged cost data from AWS/Azure/GCP and store team attributions. Run this after setting up tag_rules.yaml to populate team cost data.

Args: start_date: ISO date. Defaults to 30 days ago. end_date: ISO date. Defaults to today.

Examples: - "Run tag attribution now" - "Update team cost data"

send_onboarding_emailA

Send an onboarding email to a specific address.

Variants: welcome → "Here's how easy setup is", sent on email capture day7 → Nudge for users who haven't connected a provider yet trial_end → Trial expiring in N days, soft upgrade prompt

Args: to_email: Recipient email address variant: "welcome", "day7", or "trial_end" days_left: For trial_end variant, days until trial expires

Examples: - "Send the welcome email to john@example.com" - "Send a day 7 nudge to user@company.com" - "Send the trial ending email to someone@corp.com with 3 days left"

send_digest_nowA

Manually trigger a cost digest to Slack and/or Teams right now. Normally this sends automatically at 09:00 UTC daily.

Examples: - "Send the daily cost digest to Slack" - "Push the current cost summary to Teams"

check_notification_configA

Check which notification channels (Slack, Teams) are configured and active.

Examples: - "Is Slack configured for alerts?" - "Where are cost alerts being sent?"

list_vault_credentialsA

List the names of credentials stored in the encrypted vault (never the values).

Examples: - "What credentials are stored in the vault?" - "Which providers have been configured via setup?"

get_rightsizing_recommendationsA

Analyze EC2 instances with low CPU utilization over the past 14 days and return rightsizing recommendations with projected monthly savings.

Args: avg_cpu_threshold: Flag instances with average CPU below this % (default 20%) max_cpu_threshold: Flag instances whose peak CPU never exceeded this % (default 50%)

Examples: - "Which EC2 instances are over-provisioned?" - "How much could we save by rightsizing?" - "Find underutilized instances we should downsize"

get_savings_summaryA

Show the realized-savings dashboard: how much nable has recommended, how much has been acted on, and how much has been verified as actually saved.

Tracks the full lifecycle of every recommendation: open → acted on → verified (change confirmed in AWS/Azure/GCP) open → dismissed (won't fix)

Examples: - "How much have we saved from recommendations so far?" - "Show me our realized savings" - "Which recommendations have we actually acted on?" - "What's our total potential savings sitting open?"

generate_account_dashboardA

Generate a cost dashboard for the account and open it in your browser.

Shows total spend this month vs last month, projected spend, top cost drivers by service, open optimization opportunities, realized savings, and budget status. Outputs a self-contained HTML file.

Args: account_id: AWS account ID to scope the dashboard. Auto-detected from your configured credentials when omitted. open_browser: Open the HTML file in the default browser (default True). push_to_notion: Also push a summary to your configured Notion page (requires NOTION_API_KEY and NOTION_PAGE_ID env vars).

Use when: - "Show me a dashboard" - "Give me a summary of my costs" - "Generate the account dashboard" - "What does my cost health look like?"

export_cost_reportA

Export a cost report as HTML (printable to PDF) and/or CSV. Saved to ~/.finops/exports/. No Claude Desktop required to open.

Args: title: Report title. Defaults to "Cloud Cost Report ". sections: Sections to include: cost_summary, services, anomalies, rightsizing, savings, budgets. Default: all. formats: ["html", "csv"]. Default: both. start_date: ISO date. Defaults to 30 days ago. end_date: ISO date. Defaults to today. open_file: Open HTML in browser after export (default True).

Examples: - "Export a cost report for this month" - "Give me a CSV export of anomalies and rightsizing" - "Make a weekly cost report for the team"

list_savings_recommendationsA

List tracked recommendations with their current status.

Args: status: Filter by status: "open", "acted_on", "verified", "dismissed", "expired". None = all. source: Filter by source: "rightsizing", "idle", "kubernetes", "waste", "commitment". None = all. limit: Max results (default 30).

Examples: - "Show all open recommendations" - "Which recommendations have we acted on?" - "List verified savings" - "Show dismissed recommendations"

mark_recommendation_acted_onA

Mark a savings recommendation as acted on (you've implemented the change). nable will then attempt to verify the change next time verify_savings() runs.

Args: recommendation_id: The ID from list_savings_recommendations() or get_savings_summary().

Examples: - "I resized that EC2 instance, mark recommendation 42 as done" - "We shut down the idle RDS, mark it acted on" - "Mark recommendation 7 as complete"

dismiss_recommendationA

Dismiss a recommendation you've decided not to act on (won't fix, accepted risk, etc.). Dismissed recommendations won't appear in open potential savings.

Args: recommendation_id: The ID from list_savings_recommendations(). reason: Optional note on why you're dismissing it (e.g. "reserved for burst traffic").

Examples: - "Dismiss recommendation 15, we need that instance for peak load" - "Mark recommendation 8 as won't fix"

verify_savingsA

Auto-verify acted-on recommendations by checking if changes were actually implemented in AWS (EC2 instance type changes, etc.).

Moves verified recommendations from 'acted_on' to 'verified' status and records the actual measured savings.

Examples: - "Verify our savings, check if the rightsizing changes were made" - "Confirm which recommendations actually happened" - "Check if our EC2 downsizes are done"

get_savings_ledgerA

Shows a clean summary of savings found, acted on, and verified.

Use when: - "Show me the savings ledger" - "What savings have we achieved?" - "How much money has nable saved us?" - "Show me what opportunities were acted on"

Args: days: Lookback window in days (default 30). Filters by generated_at. account_id: Filter to a specific cloud account ID. None = all accounts.

get_recommendation_qualityA

The recommendation-quality flywheel: per recommendation type, how often recs get acted on and how close the predicted savings were to the measured realized savings. The verified-savings proof, and the signal for which recommendation types actually pay off.

Use when: - "Which of our recommendations actually saved money?" - "How accurate are nable's savings estimates?" - "How much have we verifiably saved, and from what?"

get_recommendation_learningA

What nable has learned about how YOU use recommendations, and how it adapts.

Per recommendation type (rightsizing, commitment, idle, spot, ...): your act-rate (how often you act on that type, vs blanket assumptions), how accurate the past savings estimates were, a COLD/WARMING/WARM confidence state, and the resulting verdict (boosted, suppressed-for-you, or neutral) with a plain-English reason.

This is the adaptive moat: instead of blanket advice, recommendations are ranked and filtered to fit your environment and your track record. It is propose-only, it changes what you see and in what order, never the cloud.

Use when: - "Why am I seeing this recommendation?" / "Why did this rank high?" - "What recommendation types did you stop showing me?" - "How is nable tailoring recommendations to us?"

list_profilesA

List all configured nable profiles (for multi-account or multi-client setups).

Profiles allow engineers who manage multiple accounts to switch context cleanly. Each profile has its own database and credential namespace.

Use when: - "What profiles do I have configured?" - "Show me my nable profiles" - "Which profile is active?"

get_commitment_analysisA

Analyze Reserved Instance and Savings Plan coverage, utilization, and waste. Coverage %, utilization, and waste figures are free. Purchase recommendations with $ amounts require a Team plan (commitment_recommendations).

Examples: - "How well are we using our Reserved Instances?" - "Should we buy more Savings Plans?" - "How much are we wasting on unused RIs?" - "What's our RI/SP coverage?"

create_anomaly_ticketsA

Create tickets in Jira, Linear, or GitHub Issues for all active high/medium anomalies that don't already have a ticket. Uses the first configured ticketing provider.

Args: limit: Max number of anomalies to process (default 20)

Examples: - "Create Jira tickets for all cost anomalies" - "File GitHub issues for the anomalies" - "Open Linear tasks for cost spikes"

create_rightsizing_ticketsA

Create tickets for rightsizing recommendations, over-provisioned EC2, RDS, and other resources that could be downsized to save money.

Args: min_monthly_savings: Only ticket recommendations above this threshold (default $100/mo) provider: Cloud provider to pull recommendations from (default: aws)

Examples: - "Create Jira tickets for all rightsizing opportunities" - "File issues for EC2 instances we should downsize" - "Open Linear tasks for $500+ monthly rightsizing savings"

create_kubernetes_waste_ticketsA

Create tickets for Kubernetes waste findings: idle nodes, over-provisioned workloads, and orphaned Helm releases.

Args: min_monthly_waste: Only ticket findings above this threshold (default $50/mo)

Examples: - "Create tickets for all Kubernetes waste" - "File Jira issues for idle K8s nodes" - "Open issues for orphaned Helm releases"

create_scorecard_ticketsB

Create tickets for scorecard dimensions scoring below a threshold. Helps teams track and remediate FinOps efficiency gaps.

Args: score_threshold: Create tickets for dimensions below this score (default 50) team: Scope to a specific team tag (optional)

Examples: - "Create tickets for all failing scorecard dimensions" - "File issues for the platform team's low scores" - "Open Jira tasks for scorecard dimensions below 40"

create_ticketA

Create a ticket in the configured ticketing system (Jira, Linear, or GitHub Issues) with a custom title and body. Use this for any finding, recommendation, or action item that doesn't fit a specific category.

Args: title: Ticket title / issue summary body: Full ticket description with context and action items priority: "low", "medium", "high", or "critical" (default: medium) labels: Optional list of labels/tags to apply (default: ["finops"])

Examples: - "Create a Jira ticket to disable Textract in non-prod environments" - "File a GitHub issue to switch LambdaClassifier from Sonnet to Haiku" - "Open a Linear task for the NAT gateway consolidation"

fetch_invoice_emailsA

Fetch unread invoice emails from the configured IMAP mailbox, extract amounts, and store them as cost entries. Solves the billing API gap for vendors like PagerDuty, New Relic, and GitHub Enterprise.

Examples: - "Parse our billing inbox for new invoices" - "How much did PagerDuty charge us this month? (after forwarding invoice)" - "Fetch and store any new vendor invoices"

push_weekly_insightA

Push a rich weekly cost intelligence summary to Slack right now.

Covers: week-over-week spend change, top cost movers, open savings pipeline, active anomalies, budget alerts, and a single recommended action.

This is the proactive format, an analyst briefing, not a metric dump. Runs automatically every Monday morning when scheduled. Use this to trigger it on demand.

Examples: - "Send a weekly cost summary to Slack" - "Push the weekly insight to the team channel" - "Send this week's cost intelligence to Slack now"

send_weekly_digest_nowA

Immediately send the weekly email digest to the configured recipient. Includes spend summary, anomalies, and top rightsizing recommendations. Works without Claude, pure standalone email.

Examples: - "Send the weekly cost digest now" - "Trigger the weekly email report"

audit_aws_wasteA

Deep AWS waste audit: scans EC2, EBS, RDS, Lambda, NAT Gateways, CloudWatch Logs, S3, and CloudTrail for waste. Returns findings sorted by monthly savings.

Args: regions: AWS regions to scan. Defaults to all opted-in regions. checks: Subset to run: ebs, snapshots, eips, nat, rds, cloudtrail, cloudwatch, s3, lambda, ec2. Defaults to all. account_id: AWS account ID (auto-discovered from STS if not provided).

Examples: - "Run a full AWS waste audit" - "Find all idle NAT gateways and unattached EBS volumes" - "Audit CloudWatch log groups for missing retention policies"

audit_gcp_wasteA

Deep GCP waste audit: scans Compute Engine across all zones/regions for unattached persistent disks, reserved-but-idle static IPs, old snapshots, and idle VMs (CPU joined from Cloud Monitoring). Returns findings sorted by estimated monthly savings.

Args: projects: GCP project IDs to scan. Defaults to GCP_PROJECT_IDS or the default project on your credentials. checks: Subset to run: disks, ips, snapshots, idle_vms. Defaults to all. idle_days: Lookback window for the idle-VM CPU check (default 14). snapshot_age_days: Flag snapshots older than this many days (default 30).

Examples: - "Run a full GCP waste audit" - "Find unattached GCP disks and idle static IPs" - "Which GCP VMs are idle this month?"

get_traffic_cost_breakdownA

Break down AWS network/data-transfer spend: how much, and where it goes.

Splits your traffic cost into INTERNAL (cross-AZ, cross-region, NAT, VPC peering, private endpoints) vs EXTERNAL (internet egress, CDN), then a per-scope breakdown and a ranked solve playbook (VPC endpoints, topology-aware routing, CDN, peering). Pulls Cost Explorer grouped by usage type; the classifier keeps only the network line items. AWS today; GCP and Azure decomposition are on the roadmap.

Args: days: Look-back window in days (default 30).

Examples: - "How much are we spending on network traffic and where is it going?" - "What's our internal vs external data transfer cost?" - "Break down our cross-AZ and egress spend"

audit_public_ipv4_addressesA

Audits public IPv4 addresses across AWS. Since Feb 2024, AWS charges $3.60/month per IP including stopped instances. Finds unattached Elastic IPs and IPs on stopped instances with release recommendations.

Args: regions: AWS regions to scan. Defaults to all opted-in regions.

Examples: - "Find unattached Elastic IPs we can release" - "How much are we spending on public IPv4?" - "Show Elastic IPs on stopped instances"

get_instance_deep_analysisA

Deep CloudWatch analysis for a specific EC2 instance. Returns CPU, network, and disk utilization percentiles, a rightsizing recommendation, and the Compute Optimizer recommendation if available.

Args: instance_id: EC2 instance ID (e.g. "i-0abc1234567890def") region: AWS region (default: us-east-1) lookback_days: Days of metrics to analyze (default: 14, max: 63)

Examples: - "Is i-0abc1234 over-provisioned?" - "Show CPU trends for i-0abc1234 over the last 30 days"

scan_cloudwatch_wasteA

Finds CloudWatch Log Groups with no retention policy (infinite retention costs $0.03/GB-month). Returns groups, estimated monthly cost, recommended retention periods by log type, and CLI commands to fix top offenders.

Args: regions: Regions to scan. Defaults to all opted-in regions.

Examples: - "Which CloudWatch log groups have no retention policy?" - "Scan for infinite log retention across all regions"

get_rds_rightsizing_recommendationsA

Detect over-provisioned RDS instances with low CPU utilization.

Uses CloudWatch CPUUtilization over 14 days. Excludes Aurora Serverless and read replicas. Returns downsizing recommendations with estimated savings.

Args: cpu_threshold: Flag instances with average CPU below this % (default 20%). regions: AWS regions to scan. Defaults to all opted-in regions.

Examples: - "Which RDS instances are over-provisioned?" - "Find oversized databases we can downsize" - "How much could we save by rightsizing RDS?"

get_idle_rds_instancesA

Find RDS instances with near-zero database connections over the past 14 days.

Zero-connection instances are likely decommissioned and can be stopped (free, preserves data) or deleted (saves full cost after final snapshot).

Args: regions: AWS regions to scan. Defaults to all opted-in regions.

Examples: - "Which RDS databases have no active connections?" - "Find idle databases we can stop to save money" - "Are there any unused RDS instances running?"

get_idle_load_balancersA

Detect ALBs, NLBs, and Classic ELBs with near-zero traffic over the past 14 days.

Idle load balancers still incur hourly LCU base charges. ALB/NLB cost ~$5.84/mo minimum; Classic ELBs cost ~$18.25/mo minimum.

Args: regions: AWS regions to scan. Defaults to all opted-in regions. request_threshold: Max requests in 14 days to flag as idle (default 100).

Examples: - "Find idle load balancers we can delete" - "Which ALBs have no traffic?" - "Are there any unused load balancers costing us money?"

get_s3_incomplete_multipart_uploadsA

Find S3 buckets with incomplete multipart uploads older than the threshold.

Incomplete uploads accumulate silently at STANDARD storage rates ($0.023/GB-month). The fix is a single S3 lifecycle rule per bucket. This tool shows which buckets need it and how much wasted storage they hold.

Args: older_than_days: Flag uploads older than this many days (default 7).

Examples: - "Which S3 buckets have incomplete multipart uploads?" - "Find wasted S3 storage from incomplete uploads" - "How much are we paying for failed S3 uploads?"

get_ecr_cleanup_recommendationsA

Find ECR repositories with old untagged container images consuming storage.

ECR charges $0.10/GB-month for images beyond the free 500MB per repo. Untagged images from old CI builds accumulate quickly. The fix is an ECR lifecycle policy that auto-expires untagged images.

Args: older_than_days: Flag untagged images older than this many days (default 90). regions: AWS regions to scan. Defaults to all opted-in regions.

Examples: - "Which ECR repos have old images wasting storage?" - "Find container image cleanup opportunities" - "How much are old ECR images costing us?"

get_ecs_rightsizing_recommendationsA

Find ECS Fargate services with over-provisioned CPU allocations.

Uses Container Insights CpuUtilized metric. Services using less than cpu_threshold% of their allocated vCPUs are candidates for downsizing. Fargate billing is per vCPU-hour, so reducing allocation directly cuts cost.

Requires Container Insights to be enabled on the ECS cluster.

Args: cpu_threshold: Flag services with average CPU below this % (default 20%). regions: AWS regions to scan. Defaults to all opted-in regions.

Examples: - "Which ECS Fargate services are over-provisioned?" - "Find oversized ECS tasks we can right-size" - "How much could we save by reducing Fargate CPU allocations?"

get_data_transfer_costsA

Identify significant data transfer cost line items from AWS Cost Explorer.

Surfaces internet egress, cross-AZ transfer, inter-region transfer, and NAT Gateway data charges. Each finding includes a specific cost-reduction recommendation (VPC endpoints, CloudFront, regional consolidation).

Args: start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. threshold_usd: Only return usage types costing more than this (default $50).

Examples: - "What are our data transfer costs?" - "How much are we paying for inter-region traffic?" - "Which data transfer charges are most expensive?" - "Are we overpaying for NAT Gateway data transfer?"

list_idle_resourcesA

Scan for idle/wasted AWS resources that are costing money but doing nothing.

Finds: unattached EBS volumes, unused Elastic IPs, old snapshots with no AMI dependency, stopped EC2 instances (still paying for EBS), load balancers with no healthy targets.

Results are sorted by monthly waste descending. Protected resources (tagged env=prod, protected=true, etc.) are flagged but never acted on.

Examples: - "Find idle resources wasting money in AWS" - "List any unattached EBS volumes older than 90 days" - "What stopped EC2 instances are we still paying for?"

cleanup_idle_resourcesA

Delete or release idle AWS resources. This is a REAL ACTION that terminates EC2 instances, releases EBS volumes, and frees Elastic IPs. Always runs in dry_run=True mode first so you can review what will be deleted. Requires explicit confirmation before setting dry_run=False.

Requires FINOPS_CLEANUP_ENABLED=true in the environment (opt-in safety gate). Every action is written to ~/.finops-mcp/cleanup_audit.jsonl for audit.

dry_run=True (default): shows what WOULD be deleted, nothing is changed. dry_run=False: actually deletes. Only set this after explicit user confirmation.

Examples: - "Clean up idle EC2 instances and unattached EBS volumes" - "Show me what I can safely delete to save money" - "Terminate the stopped instances that have been idle for 2 weeks" - "Show me what would happen if I cleaned up unattached EBS volumes" - "Delete the EBS volumes we just listed" (then confirm: dry_run=False) - "Clean up all unused Elastic IPs in us-east-1"

get_effective_rate_profileA

Auto-detect the account's effective private rates by comparing actual billed amounts against public on-demand prices.

Captures EDP discounts, MOSA/negotiated rates, and private pricing automatically from Cost Explorer or CUR, no manual input needed.

Used internally by the commitment optimizer and PR cost estimator. Useful for understanding how large your negotiated discount actually is.

Examples: - "What's our effective AWS discount?" - "Do we have private pricing on AWS?" - "How does our actual rate compare to on-demand list prices?"

list_kubernetes_contextsA

List all Kubernetes contexts available in the local kubeconfig, and show which one is currently active. Use this to discover what to pass as the 'context' argument to get_kubernetes_costs.

Examples: - "What Kubernetes clusters do I have?" - "List my kubeconfig contexts" - "Which K8s context is currently active?"

get_kubernetes_costsA

Full Kubernetes cost breakdown -- node costs attributed to namespaces, workloads, and labels. Detects wasted spend and rightsizing opportunities.

Requires: pip install finops-mcp[kubernetes] Optional: metrics-server in-cluster for actual CPU/memory usage data.

Examples: - "How much does our Kubernetes cluster cost?" - "Which namespace is spending the most?" - "Show me wasted Kubernetes spend" - "Which pods are over-provisioned?" - "What's our cluster CPU efficiency?"

get_kubernetes_namespace_breakdownA

Deep-dive cost breakdown for a single Kubernetes namespace. Shows every workload, pod count, CPU/memory efficiency, and waste.

Examples: - "Break down costs in the production namespace" - "Which services in 'data-platform' are most expensive?" - "Show me waste in the staging namespace"

get_efficiency_scorecardA

FinOps efficiency scorecard, a 0–100 score with letter grade across 5 dimensions: compute efficiency, waste reduction, commitment coverage, tag hygiene, and anomaly response. Tracked over time so you can see if you're improving.

Scope options:

  • "overall" , everything combined (default)

  • team=platform , filter by team tag

  • environment=prod , filter by environment tag

  • provider=aws , single provider view

Examples: - "What's our FinOps score?" - "Show me the efficiency scorecard for the platform team" - "How is our AWS efficiency rated?" - "What's our worst performing dimension?" - "Are we improving or getting worse on cloud efficiency?"

get_team_scorecardsA

Efficiency scorecard for every team, side by side. Teams are discovered from your cost attribution tags (team=X). Shows which teams are leading and which need help.

Examples: - "Show me efficiency scores for all teams" - "Which team has the worst FinOps score?" - "Compare cloud efficiency across teams" - "Who is leading on waste reduction?"

get_commitment_coverage_by_tagA

Estimate RI/SP commitment coverage for a specific tag slice, even when tagging is incomplete.

At 70% tag coverage we measure the tagged resources directly via Cost Explorer, then solve algebraically for the untagged 30% using account totals, producing a full-domain estimate with confidence rating.

Args: tag_key: Tag key to filter on (e.g. "domain", "team", "service") tag_value: Tag value (e.g. "payments", "platform", "checkout-api") tag_coverage_pct: How complete the tagging is for this domain (0–100). If unknown, leave at 100 and interpret results as lower bounds only.

Examples: - "What's the RI coverage for the payments domain? Tags are about 70% complete" - "How covered is team=platform under Savings Plans?" - "Estimate commitment coverage for env=prod with 85% tag coverage"

get_helm_release_costsA

Cost breakdown by Helm release, shows what each release actually costs rather than raw deployment names. Detects orphaned releases wasting money.

Works without the helm CLI, reads release state directly from cluster secrets.

Examples: - "How much does our Prometheus stack cost?" - "Which Helm releases are most expensive?" - "Do we have any orphaned Helm releases?" - "Show me waste broken down by Helm chart" - "How much is our ingress controller costing us?"

estimate_helm_diff_costA

Estimate the monthly cost impact of a helm diff or values.yaml change. Handles replicaCount, CPU/memory requests, instanceType, and nodeCount changes.

Paste the output of helm diff upgrade or a values.yaml git diff.

Examples: - "How much will this helm diff cost?" - "What's the cost impact of scaling from 3 to 10 replicas?" - "Estimate cost of upgrading this node pool instance type"

get_cluster_efficiencyA

Kubernetes cluster efficiency score (0-100) with letter grade, per-namespace breakdown, and prioritised recommendations ranked by dollar impact.

Scores across 4 dimensions:

  • CPU efficiency (30 pts), actual usage vs requests (needs metrics-server)

  • Memory efficiency (30 pts), actual usage vs requests (needs metrics-server)

  • Idle node penalty (20 pts), penalised for nodes under 10% utilisation

  • Waste ratio (20 pts), penalised for % of cost that's unrecoverable

Works without metrics-server, uses request fill-ratio against node capacity.

Examples: - "What's our Kubernetes efficiency score?" - "Grade our cluster" - "Which namespaces are dragging down our efficiency score?" - "Where should we focus to improve cluster efficiency?" - "Are we wasting money in Kubernetes?"

get_label_costsA

Aggregate Kubernetes costs by any pod label across all namespaces. Great for chargeback: see spend by team, environment, app, or any label.

Workloads without the label are grouped under 'untagged'. If tagging coverage is low, the response includes a warning with the tagged %.

Common label_key values: team, env, environment, app, component, tier, app.kubernetes.io/name, app.kubernetes.io/part-of

Examples: - "Show me Kubernetes costs by team" - "Which team is spending the most on Kubernetes?" - "Break down K8s costs by environment" - "How much is the payments team spending in the cluster?" - "Show K8s cost by app label" - "What percentage of our cluster is untagged?"

get_workload_costsA

Detailed Kubernetes workload cost breakdown with efficiency grades. Supports filtering by namespace and workload kind, sorting by cost or waste.

Args: namespace: Filter to a specific namespace (e.g. "production") kind: Filter by workload type: Deployment, StatefulSet, DaemonSet, Job sort_by: "cost" (default) | "waste" | "efficiency" (worst first) context: Kubeconfig context (default: current context) limit: Max workloads returned (default 50)

Each workload includes: cost, waste, CPU/memory requests vs actual usage, efficiency grade (A-F), and pod labels for attribution.

Examples: - "Show me all workload costs in the production namespace" - "Which Deployments are wasting the most money?" - "Show me StatefulSet costs sorted by waste" - "What are the least efficient workloads in the cluster?" - "List all DaemonSet costs" - "Show me every workload cost sorted by efficiency"

get_kubernetes_cost_trendsA

Kubernetes cost trend over time from stored daily snapshots. Shows whether cluster spend is growing, shrinking, or stable.

Snapshots are stored automatically each time get_kubernetes_costs is called. The first snapshot date is the start of your trend history.

Args: days: Lookback window in days (default 30) cluster: Filter to a specific cluster name namespace: Filter to a specific namespace granularity: "daily" or "weekly"

Examples: - "Is our Kubernetes spend growing?" - "Show me the K8s cost trend for the last 30 days" - "How has the production namespace spend changed?" - "Is the cluster getting more or less expensive?" - "Show weekly Kubernetes cost trends"

compare_kubernetes_clustersA

Compare costs and efficiency across all configured Kubernetes clusters. Useful for multi-cluster setups (prod vs staging, region vs region).

Set K8S_CONTEXTS=prod-cluster,staging-cluster to configure.

Examples: - "Compare our Kubernetes clusters" - "Which cluster is most efficient?" - "Show me spend across all clusters"

subscribe_to_reportA

Create a scheduled report subscription. Reports are delivered automatically to Slack channels and/or email addresses on the configured schedule.

Args: name: Report name (e.g. "Platform Team Weekly") sections: List of sections to include. Options: spend, anomalies, scorecard, k8s, commitments, rightsizing, budgets, teams frequency: "daily", "weekday", "weekly", "monthly" (or use cron for custom) slack_channels: List of Slack channel IDs or names (e.g. ["#finops-alerts"]) email_addresses: List of email recipients team: Scope report to a specific team tag value provider: Scope report to a specific cloud provider (aws, azure, gcp) lookback_days: How many days of history to include (default 7) cron: Custom cron expression, overrides frequency (e.g. "0 8 * * 1-5")

Examples: - "Send me a daily Slack report with spend and anomalies to #finops" - "Set up a weekly report for the platform team every Monday" - "Create a monthly rightsizing report emailed to cfo@company.com" - "Subscribe to a daily digest in #cost-alerts with spend, anomalies, and budgets"

list_report_subscriptionsA

List all active report subscriptions, their names, schedules, sections, and delivery channels.

Examples: - "What reports are scheduled?" - "Show me all active report subscriptions" - "List my scheduled reports"

send_report_nowA

Trigger a report subscription immediately, regardless of its schedule.

Args: subscription_id: ID of the subscription to run (from list_report_subscriptions)

Examples: - "Send report #3 now" - "Run the platform team report immediately" - "Trigger report subscription 1"

cancel_report_subscriptionB

Cancel (deactivate) a scheduled report subscription.

Args: subscription_id: ID of the subscription to cancel

Examples: - "Cancel report #2" - "Stop the weekly platform report" - "Disable subscription 3"

set_budgetA

Create or update a spending budget. Budgets fire Slack alerts when spend crosses alert_at_pct, and fail CI checks when it crosses block_at_pct.

Args: name: Budget name (e.g. "Platform Team Monthly") limit_usd: Spending limit in USD scope_type: What to watch, "total", "provider", "team", "service" scope_value: The specific value (e.g. "aws", "platform", "EC2") Use "*" for total account budget period: "monthly" or "weekly" alert_at_pct: Send warning alert at this % of limit (default 80) block_at_pct: Fail CI gate at this % of limit (default 100)

Examples: - "Set a $50,000 monthly budget for AWS" - "Create a $15,000 monthly budget for the platform team" - "Set a $20,000 budget for EC2 with warnings at 75%" - "Add a total monthly budget of $100,000"

check_budget_statusA

Check current spend against budgets. Shows how much has been spent, what's remaining, and whether any budgets are in warning or exceeded status.

Args: budget_name: Filter to a specific budget name (optional, shows all if empty)

Examples: - "Check all budgets" - "How are we doing against budget?" - "Is the platform team over budget?" - "Show budget status for AWS"

list_budgetsA

List all configured budgets with their limits and scopes.

Examples: - "What budgets do we have?" - "Show me all spending limits" - "List configured budgets"

delete_budgetA

Delete (deactivate) a budget by ID.

Args: budget_id: Budget ID from list_budgets

Examples: - "Delete budget #3" - "Remove the platform team budget"

sync_budgets_from_yamlA

Import budgets from a budget.yml file. Idempotent, running twice is safe. Use this to version-control your spending limits alongside your infrastructure code.

budget.yml format: budgets: - name: Platform Team Monthly scope_type: team scope_value: platform period: monthly limit_usd: 15000 alert_at_pct: 80 block_at_pct: 100

Args: yaml_path: Path to the budget.yml file

Examples: - "Load budgets from ./budget.yml" - "Sync budgets from /path/to/budget.yml" - "Import the budget configuration file"

list_org_accountsA

List all AWS Organization member accounts, discovering them via the AWS Organizations API. Syncs account metadata to local DB for future queries. Account listing is free. Detailed cost rollup across accounts requires a Team plan.

Requires: AWS credentials with organizations:ListAccounts permission (management account or delegated admin).

Examples: - "List all accounts in the AWS org" - "Show me all AWS member accounts" - "How many AWS accounts do we have?"

get_org_cost_summaryA

Get a cost rollup across all AWS Organization accounts: total spend, per-account breakdown sorted by spend, and top services per account. Requires a Team plan (org_reports).

Args: days_back: Look-back period in days (default 30)

Examples: - "Show me org-wide cloud costs" - "Which account is spending the most?" - "Give me a breakdown of costs across all accounts" - "What's our total AWS spend across the whole org?"

get_top_spending_accountsA

Show the highest-spending AWS accounts in the organization. Requires a Team plan (org_reports).

Args: limit: Number of top accounts to return (default 10) days_back: Look-back period in days (default 30)

Examples: - "Which 5 accounts are spending the most?" - "Show top spending accounts this month" - "Which teams are the biggest AWS spenders?"

get_account_anomaliesA

Detect accounts with unusual spend changes versus their prior period. Returns accounts that significantly spiked or dropped in cost. Requires a Team plan (org_reports).

Args: days_back: Look-back period to compare (default 30 vs prior 30)

Examples: - "Which accounts had unusual spend changes?" - "Are any accounts spiking this month?" - "Show me account-level anomalies"

get_ou_cost_breakdownA

Break costs down by AWS Organizational Unit (OU). When OUs map to departments or teams, this gives you a clean chargeback report. Requires a Team plan (org_reports).

Args: days_back: Look-back period in days (default 30)

Examples: - "Break down costs by business unit" - "Show OU-level cost breakdown" - "How much is each department spending in AWS?"

get_resource_cost_breakdown_awsA

Return per-resource AWS cost detail from the Cost and Usage Report (CUR) via Athena. Includes unblended cost, on-demand equivalent, and effective savings from Savings Plans or Reserved Instances.

Requires CUR delivery to S3 and an Athena database. Team plan feature.

Args: start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. service: AWS service code filter (e.g. "Amazon EC2"). None = all services. account_id: 12-digit AWS account ID filter. None = all accounts. min_cost_usd: Exclude resources below this cost threshold (default $1). limit: Maximum resources to return ordered by cost descending (default 100).

Examples: - "Show me per-resource EC2 costs from CUR" - "Which S3 buckets are costing the most this month?" - "Break down costs by resource for account 123456789012"

get_ri_waste_detailA

Identify wasted Reserved Instance spend from CUR RIFee line items.

Shows which reservations have low utilization and how much money is being wasted on unused reserved capacity. Requires CUR via Athena. Team plan feature.

Args: start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. min_waste_usd: Minimum wasted dollars to include a reservation (default $10).

Examples: - "Which Reserved Instances are underutilized?" - "How much are we wasting on unused RIs?" - "Show RI waste for this quarter"

get_tag_cost_breakdown_curA

Break AWS costs down by a resource tag using CUR line-item data via Athena.

Supports both unblended and amortized cost types. Resources missing the specified tag are grouped under "untagged". Team plan feature.

Args: tag_key: Tag key to group by (e.g. "team", "env", "project"). start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. cost_type: "unblended" (default) or "amortized" (applies effective SP/RI rates instead of list price).

Examples: - "Show me AWS costs broken down by team tag" - "What is each environment costing us in CUR?" - "Break down amortized costs by project tag"

get_savings_plan_showbackA

Show exactly how much each team saved from Savings Plans and Reserved Instances.

This is the showback problem no other tool solves at line-item granularity. Instead of blending SP/RI discounts across the account, nable attributes the real dollar benefit back to the team or service that consumed the covered usage, using CUR fields that Cost Explorer doesn't expose.

For each team (or tag value): • effective_cost , what they actually paid under SP/RI rates • on_demand_equiv , what they would have paid without commitments • savings_captured , real dollar benefit from Savings Plans + RIs • discount_rate_pct , their effective discount rate • sp_savings / ri_savings, broken out by commitment type

Requires CUR delivery to S3 and Athena. Team plan feature.

Args: tag_key: Resource tag to group by, "team", "project", "env" (default "team") start_date: ISO date YYYY-MM-DD (default: start of current month) end_date: ISO date YYYY-MM-DD (default: today) include_ri: Include Reserved Instance savings alongside SP savings (default True)

Examples: - "Show me savings plan showback by team this month" - "How much did the payments team save from our savings plans?" - "What's the effective discount rate per team from our commitments?" - "Which team is getting the most benefit from our reserved instances?"

get_resource_cost_breakdown_azureA

Return per-resource Azure cost detail via the Cost Management Query API.

No storage account or export job required -- data is queried live. Supports multi-subscription environments. Team plan feature.

Args: start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. subscription_id: Single Azure subscription ID. None = all configured subs. resource_group: Filter to a specific resource group. None = all groups. min_cost_usd: Exclude resources below this cost threshold (default $1). limit: Maximum resources to return ordered by cost descending (default 200).

Examples: - "Show me per-resource Azure costs this month" - "Which Azure resources are most expensive in the production resource group?" - "Break down costs by resource across all subscriptions"

get_azure_reservation_utilizationA

Fetch Azure reservation utilization summaries from the Capacity API.

Shows monthly utilization rates, used vs reserved hours, and wasted capacity for all reservations visible to the configured service principal. Team plan feature.

Args: start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today.

Examples: - "How well are we utilizing our Azure reservations?" - "Which Azure reservations are underutilized?" - "Show wasted Azure reserved capacity this quarter"

get_azure_advisor_recommendationsA

Azure Advisor cost recommendations, with Microsoft-computed annual savings.

Advisor is Azure's native optimization engine: VM rightsizing, idle resource cleanup, and reservation / savings-plan purchase recommendations, each with a savings figure Microsoft already calculated. This is the Azure parallel of AWS Compute Optimizer.

Args: subscription_id: A single Azure subscription. None = all configured subs. limit: Max recommendations to return, highest savings first (default 100).

Examples: - "What does Azure Advisor recommend to cut our costs?" - "Show Azure cost recommendations with the biggest savings" - "Any idle or oversized Azure resources Advisor flagged?"

get_azure_vm_rightsizingA

Find idle and oversized Azure VMs from Azure Monitor CPU, with real dollar cost.

Idle VMs (very low average CPU and a low peak) are deallocate/delete candidates. Underutilized VMs (low average but some real peak) are downsize candidates. Bursty VMs (high peak) are left alone. Per-VM monthly cost is joined from Cost Management so the savings are real, not a guess. This is the Azure parallel of nable's idle-EC2 and rightsizing engines.

Args: subscription_id: A single Azure subscription. None = all configured subs. lookback_days: CPU history window for the analysis (default 14). limit: Max VMs to return, highest savings first (default 100). max_vms_scanned: Cap on how many VMs (costliest first) get a CPU-metrics call, so a large estate does not hang on hundreds of serial requests (default 200).

Examples: - "vm rightsizing" - "Show me oversized Azure VMs we can downsize" - "Which Azure VMs are idle and wasting money?" - "Azure rightsizing opportunities for the last two weeks"

get_azure_budgetsA

Read the budgets you already set in Azure and report consumption against each.

Pulls native Azure Consumption Budgets (the ones configured in the Azure Portal), with amount, current spend, percent consumed, and a warning/exceeded status. Use this to see budget health without leaving Claude.

Args: subscription_id: A single Azure subscription. None = all configured subs.

Examples: - "Are we over any Azure budgets?" - "Show our Azure budget status" - "Which Azure budgets are close to their limit?"

forecast_azure_costsA

Forecast Azure spend using Azure Cost Management's own forecast model.

Calls Microsoft's forecast endpoint, which blends actual billed days with a forecast for the rest of the window. Defaults to projecting the current month to month-end. More accurate for Azure than a generic statistical forecast.

Args: subscription_id: A single Azure subscription. None = all configured subs. end_date: ISO date to forecast to (YYYY-MM-DD). Defaults to end of month.

Examples: - "What will our Azure bill be at the end of the month?" - "Forecast Azure spend to month-end" - "Projected Azure costs for this subscription"

get_azure_cost_by_dimensionA

Break Azure spend down by any dimension: service, resource group, location, or meter.

Args: dimension: One of service, resource_group, location, meter, meter_subcategory. start_date: ISO date (YYYY-MM-DD). Defaults to 30 days ago. end_date: ISO date. Defaults to today. subscription_id: A single Azure subscription. None = all configured subs. limit: Max values to return, highest cost first (default 50).

Examples: - "Break down Azure costs by resource group" - "Azure spend by location this month" - "Which Azure meters cost the most?"

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
connection_status Returns nable's current connection status, which providers are configured, the active plan, and setup instructions if nothing is connected. AI clients should read this resource on first connect to understand what data is available.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chaandannn/finopsmcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server