Skip to main content
Glama
getnable

nable (finops-mcp)

by getnable

nable

See where your cloud and AI bills go, and spend less. Runs in your terminal or inside Claude, Cursor, and VS Code.

PyPI PyPI Downloads Tests License: Apache-2.0 MCP Toplist

You do not need to be a cloud-cost expert. nable does three things:

  • Shows what you spend across AWS, Azure, GCP, Kubernetes, and 15+ AI and SaaS providers, in one place.

  • Finds what you are wasting (idle servers, oversized databases, forgotten storage) and puts a dollar figure on each one.

  • Fixes it, with your approval, by opening a pull request, then checks your next bill to prove the saving was real.

Everything runs on your machine, read-only, and your billing data never leaves it.

Try it

uvx nable scan
nable scan · profile prod
account 3521… · this account only
scanning 17 regions …
  us-east-1 ......... 3 findings
  eu-west-1 ......... 1 finding
────────────────────────────────────────────
$2,140/mo recoverable
    $1,200/mo  3 idle NAT gateways, us-east-1
      $610/mo  14 unattached EBS volumes (2.1 TB), us-east-1
      $330/mo  idle RDS instance (db.r5.xlarge, <2% CPU), eu-west-1
run `nable scan --spend` for the spend breakdown (uses Cost Explorer, ~$0.02)

Reads only free cloud APIs, so scanning never adds to your bill. uvx nable scan --demo runs on sample data with no account at all. Add --json for CI, or --spend for a deeper breakdown.

nable demo: a sample bill in seconds

Related MCP server: cloudscope-mcp

Use it in your editor

uvx nable runs as a local MCP server inside Claude, Cursor, and VS Code, on your existing Claude or Cursor membership, no API key and no per-token cost. Then ask:

  • "Why did our AWS bill jump last month?"

  • "How much are we spending on OpenAI and Anthropic?"

  • "Which instances should we downsize?"

  • "Open a Jira ticket for any waste over $200/mo"

Setup

Requires Python 3.11+. Need uv? curl -LsSf https://astral.sh/uv/install.sh | sh (or brew install uv).

uvx nable

The setup wizard finds AWS or GCP credentials already on your machine (an SSO login, a CLI profile, or default credentials), connects the one you pick, and configures your editor. Usually you never type a key.

Cursor one-click: Add nable to Cursor

Free forever for the local tool. A hosted version for teams (dashboards without a terminal, SSO, scheduled reports, always-on agents) is at getnable.com/pricing.

If finops setup doesn't auto-configure, run:

finops setup claude

Or add manually to claude_desktop_config.json:

With uvx (recommended):

{
  "mcpServers": {
    "nable": { "command": "uvx", "args": ["--python", "3.12", "finops-mcp"] }
  }
}

With absolute path:

{
  "mcpServers": {
    "nable": { "command": "/usr/local/bin/finops-mcp" }
  }
}

Use the path from which finops-mcp.

Config file locations:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Why uvx? Claude Desktop is a GUI app and doesn't inherit your shell's PATH. uvx runs finops-mcp in its own isolated environment. It's the most reliable option on corporate machines with managed Python installs.

nable is not just tools your agent reads from. It is a pre-action gate your agent calls before it makes a cost-affecting change: it prices the change, checks it against your budget, and offers a cheaper path. It never applies anything itself. Propose-only, your agent proposes and a human approves.

Add one line to your agent's system prompt (Claude Code, Cursor, or any MCP client):

Before you apply any infrastructure change (a terraform apply, a helm upgrade, creating or resizing a resource) or start an expensive job, first call check_action_policy with the action and the change (a terraform plan, a helm diff, or a monthly_delta_usd). Relay the verdict, the dollar impact, and the cheaper path when one is offered. Never apply a block or an escalate action; surface it to the human. nable is advisory and propose-only.

The gate returns allow / warn / block / escalate against your policy, the monthly and annual dollar impact, and a spot alternative when the change is compute. One-way doors (delete, terminate, buy a commitment) and over-budget changes always escalate to a human.

And a budget for the agent itself. Run nable ai-budget once, it asks whether you are on a flat plan or a metered API and what you pay, then remembers. On a flat plan it tracks how much subsidized compute you pull for your fixed fee and warns before you run low; on metered it gates on a dollar spend cap. check_ai_budget does the same for the agent mid-task. It reads your Claude Code usage locally, nothing uploaded. Add to your system prompt:

Before starting a large task, call check_ai_budget. If it returns warn or over, tell me where I stand before continuing.

It reports your real usage and burn rate against your budget, not a fabricated percentage of a plan's hidden rate limit.

Provider

What it pulls

AWS

Cost Explorer (free tier) · CUR via S3 (Pro: line-item granularity, savings plans, reservations)

Azure

Cost Management API · Advisor cost recs · VM rightsizing (Azure Monitor) · native budgets · forecast

GCP

Cloud Billing API + BigQuery export

Datadog

Usage Metering API v2: real dollar amounts

Snowflake

ACCOUNT_USAGE.METERING_HISTORY

Langfuse

Daily metrics API: model cost, token usage, trace volume

MongoDB Atlas

Invoice API

Twilio

Usage Records API

Cloudflare

Billing API

Vercel

Invoice API (Enterprise)

New Relic

Data ingest + user counts

Stripe

Fees and billing activity

Databricks

DBU usage and SQL warehouse spend

OpenAI

API usage and token spend by model

Anthropic

Claude API usage and token spend

Azure roles. The Azure tools span three RBAC roles, granted to the service principal on each subscription (run finops doctor to check):

# repeat per subscription
az role assignment create --assignee <client-id> --role 'Cost Management Reader' --scope /subscriptions/<sub-id>
az role assignment create --assignee <client-id> --role Reader --scope /subscriptions/<sub-id>
az role assignment create --assignee <client-id> --role 'Monitoring Reader' --scope /subscriptions/<sub-id>

Is nable free? Yes. The terminal scan, every cost query, anomaly detection, all waste and rightsizing findings, and every connector are free forever. The agent team, ticket auto-creation, scheduled digests, and commitment recommendations are Pro.

Does my billing data leave my machine? No. nable is local-first and read-only by default. It reads your cost data on your machine and never uploads it, and you can confirm the no-egress behavior in the source.

What clouds and providers does it support? AWS, Azure, GCP, and Vertex; Kubernetes (Kubecost, OpenCost); AI and LLM providers (OpenAI, Anthropic, Bedrock, OpenRouter, LiteLLM, Modal, Together, Replicate, Cohere, Mistral, Langfuse); data platforms (Databricks, Snowflake, MongoDB); and SaaS (Datadog, New Relic, Cloudflare, Twilio, Vercel, Stripe).

How is it different from AWS Cost Explorer? Cost Explorer is AWS-only and console-bound. nable is cross-cloud, runs in your terminal and in Claude/Cursor, covers AI and GPU spend no cloud console shows, and proposes fixes as pull requests. nable scan also makes zero paid API calls by default.

Is there an open-source alternative to Vantage or CloudHealth? nable is an open-source (Apache-2.0), local-first alternative for cost queries, waste detection, rightsizing, and AI/GPU cost, running on your machine instead of a hosted SaaS.

finops-doctor          # checks credentials, DB, network, audit log
finops setup claude    # re-run editor configuration only

Symptom

Fix

Tools don't appear in Claude

Switch to uvx config or use absolute path

command not found: finops-mcp

Re-install with pip install finops-mcp or use uvx

AWS returns no data

Run finops setup aws

No matching distribution found for finops-mcp

Your Python is older than 3.11. Install on 3.11+ (uvx --python 3.12 nable, or python3.11 -m pip install finops-mcp).

cryptography build error / maturin failed

uv tried to compile on Python 3.10. Use 3.11+: uvx --python 3.12 nable.

Corporate SSL errors

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org finops-mcp

Works at home, not at work

Use uvx (corporate IT often strips custom PATH entries)

License

Apache-2.0 in full. The hosted enterprise layer (web dashboard, SSO, control plane) lives in a separate private repo. Full tool list in CAPABILITIES.md.

getnable.com · Docs · Privacy · Security

mcp-name: io.github.getnable/finops-mcp

Available Tools

10 tools
check_action_policyCheck action policyA

Advisory policy gate: should a proposed remediation action proceed?

The request-path guardrail, advisory. Describe a remediation action you are considering (action_type), optionally with the change to cost (a Terraform plan, a helm diff, or a known monthly delta), and nable returns a machine verdict against your human-authored policy:

  • allow: reversible, allowlisted, and within budget. A human can apply it.

  • escalate: a one-way door (delete, terminate, buy a commitment) or an over-budget / large-cost change. A human must review it first.

  • block: the action type is not in your allowlist.

ADVICE ONLY. nable never applies the action, a human does. This is the propose-only guardrail; nable does not auto-execute anything.

action_type examples: rightsizing, tag_fix, stop_idle, spot_migration, ticket (reversible); idle_cleanup, purchase_commitment, terminate_instance, delete_resource (one-way). Policy knobs via env: FINOPS_POLICY_MAX_AUTO_USD, FINOPS_POLICY_ALLOWED_ACTIONS (comma-separated). Read-only.

Good triggers: "can the agent do X", "is this action within policy", "should I apply this fix", "is it safe to auto-apply this". Examples: - "Is this apply within policy?" - "Check this change against our cost guardrails"

ParametersJSON Schema
NameRequiredDescriptionDefault
tf_dirNo
helm_diffNo
action_typeYes
budget_nameNo
monthly_delta_usdNo
terraform_plan_fileNo
terraform_plan_jsonNo

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeatedly states 'Read-only' and 'ADVICE ONLY. nable never applies the action,' but the annotations declare readOnlyHint: false (i.e., not read-only). This is a direct contradiction between the description and structured metadata. The tool's safety profile is misrepresented, so the agent cannot reliably assess side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than necessary but well-structured with line breaks, bullet-like verdicts, examples, and trigger phrases. It front-loads the core purpose and each section adds useful context. Minor redundancy exists ('ADVICE ONLY' appears twice), but overall it remains organized and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 7 parameters and no output schema, so the description needs to explain behavior. It covers the verdicts, policy knobs, and action_type examples, making the tool's behavior understandable. It does not detail the exact meaning of every parameter (handled in parameter_semantics) and omits response format, but for an advisory policy gate, the description is largely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate. It explains the role of 'action_type' and mentions optional cost inputs (Terraform plan, helm diff, monthly delta), but it does not map these to the parameter names like tf_dir, terraform_plan_file, terraform_plan_json, or budget_name. This adds partial value but leaves several parameters ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as an 'Advisory policy gate' that returns a verdict (allow/escalate/block) for proposed remediation actions. It uses specific verbs and resource names, and the examples of action types and triggers distinguish it from siblings like estimate_change_cost or check_ai_budget.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit good triggers ('can the agent do X', 'is this action within policy') and concrete example queries. It clearly indicates this is the propose-only check before a human applies an action. It does not explicitly name alternatives or say when not to use this tool, but the context is strong enough to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_ai_budgetCheck AI budgetA
Read-only

Advisory gate: before a big task, is the agent about to blow its AI budget?

Call this before an expensive run. Returns a verdict (ok / warn / over), the reason, and a recommendation. Advice only, it never blocks; relay the verdict and let the human decide. Pass estimated_next_tokens to test whether the next task would tip a token budget over.

ParametersJSON Schema
NameRequiredDescriptionDefault
estimated_next_tokensNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it is 'Advice only, it never blocks' and describes the return shape (verdict, reason, recommendation), which goes beyond the annotations. This provides useful behavioral context for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences that are all essential and well-structured. It starts with the primary purpose, then gives usage timing, output shape, and parameter semantics without any fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter, no output schema, and clear annotations, the description fully covers purpose, usage, behavioral nature, output format, and parameter meaning. Nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the parameter's purpose: 'Pass estimated_next_tokens to test whether the next task would tip a token budget over.' This gives clear meaning to the single optional integer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is an 'Advisory gate' for checking whether the agent is about to exceed its AI budget. It specifies the resource (AI budget) and the action (check), and distinguishes itself from sibling tools like get_cost_summary or estimate_change_cost by focusing on a pre-run verdict.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this before an expensive run,' providing clear context for when to use it. It also instructs to 'relay the verdict and let the human decide,' but does not mention when not to use it or name alternative tools, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_awsConnect AWSA

Connect an AWS account from inside your MCP client, no terminal needed.

Propose-then-confirm and local-only. It reads AWS credentials that already exist on this machine (named profiles, environment, the default chain), verifies each against STS, and connects the one you choose. It never creates, modifies, or deletes anything in your AWS account, and credentials stay on this machine.

Call it with no arguments first to see which accounts are available (nothing is stored). Then call it again with account_id set to the one to connect.

Examples: - "Connect my AWS account" - "Use the credentials on this machine to connect AWS"

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description goes beyond by explaining the propose-then-confirm flow, that it never creates/modifies/deletes anything in the AWS account, and that credentials stay local. This adds significant behavioral context beyond the annotations, covering safety and data handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it starts with a clear purpose, then explains the propose-then-confirm flow, includes usage examples, and is front-loaded with the most important info. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (one optional parameter, no output schema, but with safety considerations), the description is quite complete. It explains what happens, what it doesn't do, and how to use it. Minor gap: it doesn't describe what the output looks like (e.g., a list of accounts or a connection confirmation), but since there's no output schema, this would be helpful. However, the description still provides enough for an agent to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter, account_id, with no description in the schema. The tool description explains its use: 'call it again with account_id set to the one to connect,' which adds meaning. However, it doesn't specify the format of account_id (e.g., numeric string), but the schema coverage is 0%, so the description partially compensates but could be more detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: connecting an AWS account from the MCP client using existing local credentials. It distinguishes itself from siblings like connect_azure and connect_gcp by explicitly naming AWS and detailing its scope (no terminal needed, local-only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: call with no arguments first to list available accounts, then call again with account_id set. It also gives example prompts. While it doesn't explicitly mention alternatives, the context of siblings is clear, and the instructions are actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_azureConnect AzureA

Guide connecting Azure while keeping the service-principal secret off the model.

Azure has no local credentials nable can safely auto-detect, so connecting needs a client secret. Unlike connect_aws and connect_gcp (which read credentials already on the machine, so nothing sensitive passes through this conversation), an Azure secret would have to be pasted into the chat to reach a tool argument, which routes it through the model provider. nable does not do that. This tool returns the Cloud Shell script and has you finish the connect in your OWN terminal with finops setup azure, which encrypts the secret into your local vault. The model never sees the secret.

Examples: - "Connect Azure" - "How do I connect my Azure subscription?"

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses non-obvious behavior: the tool does not accept or transmit the secret, it returns a Cloud Shell script, and the user must complete the connection in their own terminal with the secret encrypted into a local vault. This goes well beyond the generic annotations, and nothing contradicts readOnlyHint/destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then uses a focused rationale and examples. Each sentence contributes either the security constraint, the comparison to alternatives, or the concrete command to run; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description fully covers what the tool returns (a Cloud Shell script), what the user must do next, why the tool exists, and example invocation phrasings. It is complete for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the description explains why: Azure credentials cannot be safely auto-detected, and a secret would have to be pasted into chat/tool args, which nable intentionally avoids. This adds crucial semantic meaning to the empty input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it is a guide for connecting Azure, with the specific security constraint of keeping the service-principal secret off the model. It distinguishes itself from connect_aws and connect_gcp by explaining their local-credential behavior vs Azure's need for a client secret.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly contrasts with connect_aws and connect_gcp: those read machine-local credentials and require no sensitive pasting, while Azure requires a client secret that must not enter the chat. It also directs the user to finish with `finops setup azure` in their own terminal, making the usage path clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_gcpConnect GCPA

Connect a Google Cloud billing account from inside your MCP client, no terminal.

Propose-then-confirm and local-only. It reads Google Cloud credentials that already exist on this machine (GOOGLE_APPLICATION_CREDENTIALS or gcloud Application Default Credentials), lists the open billing accounts they can see, and connects the one you choose. It never changes anything in GCP, and credentials stay on this machine.

Call it with no arguments to see the billing accounts available (nothing is stored). Then call it again with billing_account_id set to connect one.

Examples: - "Connect my Google Cloud billing" - "Use my gcloud login to connect GCP"

ParametersJSON Schema
NameRequiredDescriptionDefault
billing_account_idNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond annotations by disclosing that it never changes anything in GCP, keeps credentials locally, and operates in a propose-then-confirm manner. This adds crucial context about side effects, which aligns with the readOnlyHint:false annotation (since it may write local state) and clarifies it is not destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear summary, detailed explanation, usage steps, and examples. Every sentence serves a purpose, and the information is front-loaded—the first line conveys the core function, then expands on usage and safety.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema), the description is complete. It explains what happens with and without the parameter, reveals its safety profile (no GCP changes, local-only), and provides use-case examples, covering all necessary context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though the schema has 0% description coverage, the tool description fully explains the single optional parameter billing_account_id: it is the ID of the account to connect, and its absence triggers a listing behavior. This adds meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to connect a Google Cloud billing account from within the MCP client. It uses a specific verb ('connect'), identifies the resource ('Google Cloud billing account'), and distinguishes itself from sibling tools like connect_aws and connect_azure by naming GCP explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: call with no arguments to list available billing accounts, then call again with billing_account_id to connect one. It also includes examples and explains the two-step flow, making it clear when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_change_costEstimate change costA

Cost preflight for a proposed change: what it costs and whether it fits budget.

Agent-native. Call this BEFORE applying an infrastructure change to get a machine verdict (ok / warn / over_budget / no_budget) plus the monthly and annual cost delta and the budget headroom. Read-only: it estimates and checks, it never applies anything.

Describe the change one of these ways:

  • terraform_plan_json / terraform_plan_file / tf_dir : a Terraform plan

  • helm_diff : output of helm diff upgrade or a values.yaml diff

  • monthly_delta_usd : a known monthly cost delta (escape hatch for any change the estimators don't parse, e.g. "launch a db.r6g.4xlarge")

budget_name selects which budget to check against; default is the first active budget. With no budget configured the verdict is "no_budget" and the cost delta is still returned.

Good triggers: "will this fit my budget", "what will this terraform/helm change cost before I apply it", "cost preflight", "can the agent afford this change". Examples: - "What would this change cost per month?" - "Preflight the cost of this terraform plan"

ParametersJSON Schema
NameRequiredDescriptionDefault
tf_dirNo
helm_diffNo
budget_nameNo
monthly_delta_usdNo
terraform_plan_fileNo
terraform_plan_jsonNo

TDQS

A4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint: false while the description asserts 'Read-only: it estimates and checks, it never applies anything' — a direct contradiction. Per the rubric, any description that contradicts annotations scores 1 and must be flagged as an Annotation Contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured and front-loaded: a one-line summary, read-only callout, bulleted input options, budget behavior, good triggers, and examples. Every sentence serves a purpose, and the bullet formatting makes it scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 6-parameter, multi-mode tool with no output schema, the description covers inputs, verdicts (ok/warn/over_budget/no_budget), return values (delta, headroom), defaults, and edge cases. No significant gaps exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description fully compensates by explaining each input mode (Terraform plan via json/file/dir, helm_diff, and the monthly_delta_usd escape hatch) and documenting budget_name's default (first active budget) and the no_budget edge case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line 'Cost preflight for a proposed change: what it costs and whether it fits budget' uses a specific verb+resource construction, and the description further clarifies scope ('Read-only', 'it estimates and checks, it never applies anything'), distinguishing it from siblings like get_cost_summary and check_ai_budget.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides excellent when-to-use guidance: 'Call this BEFORE applying an infrastructure change', a 'Good triggers' list, and two example queries. However, it lacks an explicit 'when not to use' note naming alternative tools (e.g., get_cost_summary), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cost_summaryGet cost summaryB
Read-only

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

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

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNo
categoryNo
end_dateNo
providerNo
start_dateNo
granularityNoMONTHLY

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no extra behavioral context (e.g., time range defaults, granularity handling, or response shape). It doesn't contradict annotations, so a baseline 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one declarative sentence plus two illustrative examples. No wasted words, and the main functionality is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 6 optional parameters, the description should explain return values and parameter semantics more thoroughly. It covers basic summarization but omits important details like filtering by provider, category, and date ranges, as well as default granularity behavior. This is a moderate-complexity tool left under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are 6 parameters, but the description only hints at groupings like service/account/region without mapping to actual parameter names (provider, account, category). The examples imply date-range usage but don't clarify date formats, granularity options, or null semantics. This is insufficient compensation for zero schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get total spend summarized by service, account, and region.' This is a specific verb and resource with scope. It doesn't explicitly differentiate from siblings like estimate_change_cost, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples ('How much did we spend last month?' and 'Give me an AWS cost summary for January') provide clear contextual usage for cost summary queries. There is no explicit exclusion or alternative comparison, which prevents a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_connected_providersList connected providersA
Read-only

List every cloud, SaaS, and LLM provider nable knows, each marked connected or not-configured, plus the active plan. The starting point for "what am I connected to" and for spotting which connector still needs credentials (each not-configured entry names the setup command to run).

Examples: - "Which providers are connected?" - "Is GCP set up yet?"

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context: it marks each provider as connected or not-configured, includes the active plan, and names the setup command for each missing provider. This goes beyond the schema and annotations, providing expected output details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise enough: two short paragraphs plus two example questions. The main functional description is front-loaded, and the examples clarify typical intents. Each sentence adds value—no filler or repetition of schema/annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no parameters and no output schema, the description fully covers what the agent needs to know: what it lists, how it labels providers, the active plan, and the setup command hint. It addresses common user questions (which providers, is GCP set up) and gives enough context for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and schema coverage is 100% (trivially). With no parameters to explain, the baseline is 4 as per rubric. The description doesn't need to add parameter meaning; it correctly focuses on behavior and output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all known providers with connection status and active plan, using specific verbs and resources. It distinguishes from sibling connect_* tools by focusing on listing status rather than establishing connections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says this is the starting point for 'what am I connected to' and for spotting missing credentials, with setup commands named for each not-configured entry. While it doesn't explicitly name alternative tools, the sibling names (connect_aws, connect_azure) make it implicit that those are for setup. Lacks an explicit when-not-to-use clause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nable_setup_statusNable setup statusA
Read-only

Agent-driven onboarding: what is connected, what credentials are already on this machine, and the exact command to connect each remaining provider.

Call this when the user asks to connect a provider, says setup is incomplete, or asks what they are missing. Detected ambient credentials (gcloud login, env keys, ~/.modal.toml) mean the connect is ONE terminal command with no secrets involved; run it for the user or hand them the command.

Rules for the agent, and they are hard rules:

  • NEVER ask the user to paste an API key or secret into the chat. For paste-a-key providers, have them run the setup command in their own terminal; it deep-links the key page and stores the key locally.

  • Prefer the zero-secret paths: finops connect (batch-connects everything detected) and finops setup gcp / ambient AWS, where no secret ever passes through the conversation.

Examples: - "Connect my GCP costs" - "What providers am I missing?"

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint/destructiveHint annotations already covering safety, the description adds substantial behavioral context: detected ambient credentials, the one-command connect path, the prohibition on asking for secrets in chat, and when to direct users to their own terminal. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening summary, usage triggers, hard rules, and examples. Each section earns its place, and the most critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description tells the agent what the tool returns (connected providers, existing credentials, exact commands) and how to act on that information. It also includes examples, making it complete for a no-parameter status tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description still explains what information the tool reports, which indirectly defines the empty input expectation, but there are no parameter semantics to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: reporting onboarding status, existing credentials, and exact commands for remaining providers. It distinguishes itself from siblings like connect_aws and list_connected_providers by focusing on agent-driven setup status and the full onboarding picture.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to call ('when the user asks to connect a provider, says setup is incomplete, or asks what they are missing') and gives hard rules/preferences for how to handle credentials. It also names preferred zero-secret paths like `finops connect`, providing clear guidance over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

what_can_nable_doWhat can nable doA
Read-only

Show everything nable can do, tailored to what you've connected.

Call this when the user asks "what can you do?", "what features do you have?", "what should I try first?", "show me what's available", or "help". Always call it right after a user connects their first account, so they see what just became possible. Pass detailed=True to also list the underlying tool names. Examples: - "What can nable do?" - "List your capabilities"

ParametersJSON Schema
NameRequiredDescriptionDefault
detailedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds context beyond that: it mentions tailoring to connected services ('tailored to what you've connected') and explains the 'detailed' parameter's effect ('list the underlying tool names'). This provides useful behavioral detail without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary purpose in the first sentence. It includes trigger phrases and examples, which are helpful but slightly redundant (e.g., multiple example queries). It remains appropriately sized for the tool's simplicity, staying under 150 words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with a single optional boolean parameter and an existing output schema, the description is fully sufficient. It covers purpose, usage triggers, parameter behavior, and even situational guidance (post-connection). No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for the 'detailed' parameter. The description compensates by explicitly explaining its purpose: 'Pass detailed=True to also list the underlying tool names.' This adds meaningful semantic context beyond the schema's minimal definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Show everything nable can do, tailored to what you've connected.' This is a specific verb ('Show') and resource ('everything nable can do'). It distinguishes itself from sibling tools like connect_aws or get_cost_summary by focusing on overall capabilities, and the usage examples reinforce its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-to-use triggers: 'Call this when the user asks "what can you do?"...' and lists multiple example queries. It also gives a strong directive: 'Always call it right after a user connects their first account' to showcase new capabilities. No alternatives are mentioned, but the guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation4/5

Tools are mostly distinct: connect_aws/azure/gcp target specific providers, while get_cost_summary, estimate_change_cost, check_ai_budget, and check_action_policy each have a clear purpose. Slight overlap exists between list_connected_providers and nable_setup_status, but descriptions clarify their triggers.

Naming Consistency3/5

Most tools use a lowercase verb_noun pattern (connect_aws, get_cost_summary, estimate_change_cost, check_ai_budget), but 'what_can_nable_do' and 'nable_setup_status' break the convention, and verb prefixes vary (connect, get, list, estimate, check). Still readable overall.

Tool Count5/5

10 tools is well-scoped for a FinOps assistant, covering provider connection, cost summary, cost preflight, policy checks, and onboarding. Each tool has a defined role without excessive overlap.

Completeness4/5

The set covers core workflows: connect providers, view costs, estimate change costs, and check policy/budget. Missing budget creation/update and more advanced cost analytics, but these are workable gaps given the read-only advisory nature of the server.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    An MCP server for unified cost tracking and analysis across AWS, OpenAI, and Anthropic. It enables users to query expenditures, compare costs across providers, and analyze usage trends through natural language.
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language analysis of AWS costs, automated FinOps waste audits, and budget monitoring across multiple profiles and regions while keeping credentials secure locally.
    182
    MIT

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/getnable/finopsmcp'

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