nable (finops-mcp)
nable (finops-mcp) is a local-first FinOps MCP server that connects to AWS, Azure, GCP, Kubernetes, and 15+ SaaS providers (Datadog, Snowflake, OpenAI, etc.) to manage and optimize cloud costs directly inside AI editors like Claude and Cursor. Credentials are stored in the OS keychain and data stays local—no backend servers.
Here's what you can do:
Cost Visibility & Reporting
Summarize costs broken down by service, account, region, provider, or team (tag attribution)
Compare spend across cloud and SaaS providers; view daily/monthly trends and top cost drivers
Get a grand total combining cloud infrastructure + SaaS spend
Export reports as HTML or CSV; generate visual dashboards
Anomaly Detection & Alerts
Detect cost spikes/drops using z-score, CUSUM drift, and seasonal normalization
Set custom alert policies (thresholds, muting, glob patterns); acknowledge expected anomalies
Send on-demand or scheduled cost digests to Slack/Teams/email
Cost Optimization & Waste Detection
AWS: EC2/RDS/ECS Fargate rightsizing, idle resource detection (NAT Gateways, EBS, load balancers, Elastic IPs), CloudWatch log retention, S3 multipart cleanup, ECR image cleanup, public IPv4 audit, network/data transfer analysis, deep waste audit
Azure: VM rightsizing, Azure Advisor recommendations, reservation utilization, cost forecasts
GCP: Unattached disks, idle IPs, old snapshots, idle VMs
List and optionally clean up idle resources (with dry-run safety gate)
Kubernetes Cost Management
Break down costs by namespace, workload, label, or Helm release
Detect wasted spend, score cluster efficiency, estimate cost impact of a
helm diffbefore applyingCompare multiple clusters; label-based chargeback
Commitment & Rate Analysis
Analyze Reserved Instance and Savings Plan coverage, utilization, and waste
Savings Plan showback by team/tag; detect EDP discounts and private pricing
Budget Management
Create/update/delete budgets scoped to total, provider, team, or service
Check budget status; sync budgets from a YAML file for version-controlled limits
Savings Tracking & Recommendations
Track recommendations through their lifecycle (open → acted on → verified → dismissed)
View a savings ledger; measure recommendation accuracy over time with adaptive learning
Ticketing & Workflow Automation
Create tickets in Jira, Linear, or GitHub Issues for anomalies, rightsizing, K8s waste, or scorecard gaps
Efficiency Scorecard
Compute a 0–100 FinOps score across 5 dimensions: compute, waste, commitment, tag hygiene, and anomaly response
Compare team-level scorecards side by side
AWS Organizations & CUR/Athena (Team Plan)
Org-wide cost rollup with per-account and OU breakdowns
Per-resource costs, RI waste detail, and tag breakdowns from CUR via Athena
Infrastructure & Configuration
Manage multiple profiles for multi-account/multi-client setups
Check connector health, list configured accounts, run tag attribution, take cost snapshots on demand
Send onboarding/welcome emails; configure Slack and Teams notifications
Retrieves billing data from Cloudflare's Billing API for cost analysis.
Fetches real-time cost data from Datadog's Usage Metering API, enabling analysis of Datadog spend.
Retrieves GitHub Actions usage and Copilot seat costs for cost management.
Automates creation of Jira tickets for cost optimization recommendations, such as EC2 waste.
Retrieves MongoDB Atlas invoice data for cost monitoring.
Fetches data ingest volumes and user counts from New Relic for cost analysis.
Publishes cost analysis findings and reports to Notion for team collaboration.
Retrieves PagerDuty seat count for cost tracking.
Sends anomaly alerts and cost reports via Slack for real-time notifications.
Retrieves Snowflake usage costs from ACCOUNT_USAGE.METERING_HISTORY.
Fetches Twilio usage records for cost analysis.
Retrieves Vercel invoice data for cost management.
nable
See where your cloud and AI bills go, and spend less. Runs in your terminal or inside Claude, Cursor, and VS Code.
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 scannable 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.

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 nableThe 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 claudeOr 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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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_policywith the action and the change (a terraform plan, a helm diff, or amonthly_delta_usd). Relay the verdict, the dollar impact, and the cheaper path when one is offered. Never apply ablockor anescalateaction; 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 returnswarnorover, 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 onlySymptom | Fix |
Tools don't appear in Claude | Switch to uvx config or use absolute path |
| Re-install with |
AWS returns no data | Run |
| Your Python is older than 3.11. Install on 3.11+ ( |
| uv tried to compile on Python 3.10. Use 3.11+: |
Corporate SSL errors |
|
Works at home, not at work | Use |
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 toolscheck_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"
| Name | Required | Description | Default |
|---|---|---|---|
| tf_dir | No | ||
| helm_diff | No | ||
| action_type | Yes | ||
| budget_name | No | ||
| monthly_delta_usd | No | ||
| terraform_plan_file | No | ||
| terraform_plan_json | No |
TDQS
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.
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.
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.
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.
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.
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 budgetARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| estimated_next_tokens | No |
TDQS
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.
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.
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.
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.
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.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No |
TDQS
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.
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.
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.
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.
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.
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?"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| billing_account_id | No |
TDQS
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.
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.
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.
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.
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.
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 upgradeor a values.yaml diffmonthly_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"
| Name | Required | Description | Default |
|---|---|---|---|
| tf_dir | No | ||
| helm_diff | No | ||
| budget_name | No | ||
| monthly_delta_usd | No | ||
| terraform_plan_file | No | ||
| terraform_plan_json | No |
TDQS
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.
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.
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.
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.
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.
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 summaryBRead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| category | No | ||
| end_date | No | ||
| provider | No | ||
| start_date | No | ||
| granularity | No | MONTHLY |
TDQS
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.
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.
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.
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.
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.
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 providersARead-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?"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 statusARead-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) andfinops setup gcp/ ambient AWS, where no secret ever passes through the conversation.
Examples: - "Connect my GCP costs" - "What providers am I missing?"
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 doARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| detailed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
FinOps MCP: query allocated, correlated cloud and AI cost across AWS, GCP, Azure and Snowflake.
Hosted MCP server for AWS cloud spend: service breakdowns, anomalies, savings and forecasts.
Query cloud, AI and SaaS spend across 25+ providers: costs, budgets, anomalies, unit economics.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn 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.10MIT
- AlicenseAqualityBmaintenanceCloud cost management MCP server for Azure. Ask your AI about your cloud bill.15801MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language analysis of AWS costs, automated FinOps waste audits, and budget monitoring across multiple profiles and regions while keeping credentials secure locally.182MIT
- AlicenseNot gradedqualityDmaintenanceAnalyzes Azure cloud costs, audits for waste, and provides budget insights via natural language through a secure local MCP server.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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