mcpField
N
nable

nable

本地服务
getnable.com云与基础设施195 天前更新

关于 nable

nable 是面向编码 Agent 的本地优先 FinOps 工具和命令防护程序。它会在基础设施启动命令执行前估价、要求人工确认不可逆操作,并扫描云和 AI 支出。

主要功能

  1. 01命令执行前估价
  2. 02不可逆操作需人工确认
  3. 03本地哈希链决策记录
  4. 04只读扫描 AWS 浪费
  5. 05AI 支出预算与明细

适用场景

  1. 01审核高成本基础设施启动
  2. 02阻止未经确认的破坏性命令
  3. 03查找闲置 AWS 资源
  4. 04按项目或团队跟踪 AI 支出

MCP 相关

nable 可作为本地 MCP 服务运行于 Claude、Cursor 和 VS Code。其防护程序也会检查 Claude Code、Cursor 和 Codex CLI 中的 MCP 工具调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"getnable-finops": {
"command": "uvx",
"args": [
"finops-mcp"
]
}
}
}
启动命令uvx finops-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypifinops-mcp0.12.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

nable

nable 会在编码 Agent 执行操作前,为其即将执行的操作估算费用。免费、本地运行、一条命令即可。

PyPI PyPI Downloads Tests License: Apache-2.0 MCP Toplist

nable 会在编码 Agent 即将运行命令前进行检查,支持 Claude Code、Cursor、Codex CLI、GitHub Copilot、Gemini CLI 和 Cline(并且支持对前三者的 MCP 工具调用进行检查)。启动操作会先按标价估算费用;对于不可逆操作(销毁、终止、购买承诺),系统会暂停并等待人工确认;每个判定都会记录到你设备上经过哈希链保护的账本中。此防护无需云账户、API 密钥或许可证。

nable 也是一款开源(Apache-2.0)、本地优先的云和 AI 成本管理工具:它仅使用免费 API 扫描你的 AWS 账户并发现浪费;按模型为 AI 编码 Agent 费用定价,并设置每个会话的上限;还可按项目、团队和用户拆分 AI 成本。它可在终端中运行,也可作为 MCP 服务在 Claude、Cursor 和 VS Code 中运行。nable 不会将你的账单数据发送给自己的任何服务;在编辑器中,你提出的问题会发送给你正在对话的模型,就像任何 MCP 工具返回的结果一样。

试用

uvx nable guard install      # Claude Code, this project. --all: every agent found. --global: every project.
uvx nable guard try          # see it first: four sample commands through the gate, nothing executed

Agent 尝试启动高成本操作或执行销毁操作时收到的内容(真实输出,无需云账户):

$ uvx nable guard check --command "aws ec2 run-instances --instance-type p4d.24xlarge --count 8"
  ask  nable guard: 8x p4d.24xlarge at $21.9576/hr (on-demand us-east-1 list price) is ~$128,233/mo. The +$128,233/mo impact is over your $500 auto threshold; a human should review it. Budget not checked: there is no spend figure on this machine yet; `nable budget refresh` computes one.

$ uvx nable guard check --command "terraform destroy -auto-approve"
  ask  nable guard: This would destroy infrastructure (`terraform destroy -auto-approve`). It cannot be undone; confirm to proceed.

使用 Claude Code 插件?安装后防护即会启用,无需额外步骤:

/plugin marketplace add getnable/finopsmcp
/plugin install nable@nable

nable guard off(或 FINOPS_GUARD=off)会暂停所有 nable 钩子,nable guard on 则会恢复;如果 Agent 自己尝试运行 nable guard off,系统会先询问你。

在 Claude Code、Cursor 和 Copilot CLI 中,ask 会暂停 Agent,直到你确认;Codex CLI、Gemini CLI、Cline 和 Copilot 的云 Agent 会拒绝该命令并说明原因(各 Agent 对应的表格见下文“防护钩子”)。低于阈值的启动操作不会触发提示:t3.micro 每月约 $8,低于默认的每月 $500(FINOPS_POLICY_MAX_AUTO_USD)。安装后请重启 Agent,以便其加载钩子。

哪些功能需要云账户:定价和询问不需要。预算拦截、nable guard reconcile(CloudTrail)和下方的扫描功能会以只读方式读取你自己的账户。

扫描当前已在运行的内容

uvx nable scan
nable scan · profile prod
account 3521… · this account only
scanning 17 regions …
  us-east-1 ......... 17 findings
  eu-west-1 ......... 1 finding
────────────────────────────────────────────
$659/mo recoverable
       $350/mo  1 idle RDS instance (db.r5.xlarge MySQL, no connections in 14 days), eu-west-1
       $210/mo  14 unattached EBS volumes (2.1 TB, gp2), us-east-1
     $98.55/mo  3 idle NAT gateways, us-east-1
run `nable scan --spend` for the spend breakdown (uses Cost Explorer, ~$0.02)

使用你机器上已有的 AWS 凭证,只读取免费的云 API,因此扫描绝不会增加账单。uvx nable scan --demo 使用示例数据运行,无需任何账户。添加 --json 以用于 CI,或添加 --spend 获取更深入的细分信息。

uvx nable commitments status 通过免费读取,列出账户持有的 RDS、EC2、ElastiCache、Redshift、OpenSearch 和 MemoryDB 预留实例以及 Savings Plans,并显示各项到期时间;--fail-within 30 可将其作为 CI 检查(如果某项将在 30 天内到期,则退出码为 1;如果有项目无法读取,则退出码为 2)。examples/github-actions/commitments-status.yml 使用通过 GitHub OIDC 假设的只读角色,每周运行一次并保留 JSON。

之后,nable 可以:

  • 展示你的支出:在一个地方查看 AWS、Azure、GCP、Kubernetes 以及 15 家 AI、数据和 SaaS 提供商的支出。
  • 找出浪费(空闲服务器、超配数据库、遗忘的存储),并为每项浪费标出金额。
  • 经你批准后修复问题:打开拉取请求,然后确认更改已生效并衡量节省金额:如果 CUR 明细行涵盖相关费用,则根据你的账单计算;否则按你的有效费率或目录价计算,并标注为估算值。
  • 为 AI Agent 设置预算:nable ai-budget 根据本地日志按模型计算 Claude Code 和 Codex CLI 的使用费用,并设置每个会话的上限;nable ai-costs --by project|team|user 则按项目、团队或用户细分 OpenAI、Anthropic、LiteLLM 和 Langfuse 的支出。

nable 演示:几秒内查看示例账单

在编辑器中使用

uvx nable 可在 Claude、Cursor 和 VS Code 中作为本地 MCP 服务运行,使用你现有的 Claude 或 Cursor 会员资格,无需 API 密钥,也没有按令牌计费。然后你可以询问:

  • “上个月我们的 AWS 账单为什么突然增加?”
  • “我们在 OpenAI 和 Anthropic 上花了多少钱?”
  • “哪些实例应该降配?”
  • “为每月超过 200 美元的浪费创建 Jira 工单”

nable 的对比

nableAWS Cost ExplorerVantage / CloudHealthInfracost
开源是(Apache-2.0)否(AWS 的 Billing MCP 服务是开源的)否CLI(Apache-2.0);Infracost Cloud 是 SaaS
数据存储位置你的机器AWS供应商的 SaaS你的机器或 CI;资源价格通过 Infracost 托管的定价 API 获取
覆盖的云平台AWS、Azure、GCP、Kubernetes仅 AWS多云IaC,任何云平台
AI 和 GPU 支出是(OpenAI、Anthropic、Bedrock、Vertex AI、GPU)仅限 AWS 服务(Bedrock、SageMaker、GPU 实例)Vantage:支持;CloudHealth:提供 AI 和令牌仪表板否
可在 Claude / Cursor / VS Code 中运行是(本地 MCP)AWS 的 Billing and Cost Management MCP 服务Vantage:托管 MCP 服务;CloudHealth:未发现为 Claude Code、Cursor 等提供 Agent 插件;IDE 扩展
在 Agent 执行命令前为其定价是:Claude Code、Cursor、Codex CLI、Copilot、Gemini CLI 和 Cline 中的钩子会为启动操作定价、拦截不可逆操作,并记录每项判定否否不会通过命令钩子实现;其 Agent 技能会在编写 IaC 时为其定价,CI 则会为拉取请求定价
修复浪费创建拉取请求,由你批准否Vantage:FinOps Agent,经批准后执行修复;未发现 IaC 拉取请求功能为 IaC 代码中的策略问题创建 AutoFix PR,而非依据正在运行的资源
可解答的问题Agent 即将产生多少支出;你当前的支出和浪费情况AWS 支出多云支出部署前 IaC 变更的成本
价格免费(本地);付费方案采用固定费用,绝不按支出百分比收费控制台免费;API 每次请求 $0.01Vantage:跟踪支出不超过 $2,500/月时免费,之后收费;CloudHealth:付费CLI 免费;Infracost Cloud 付费

Infracost 会在编写基础设施变更时以及拉取请求中为其定价;nable 的防护功能会为 Agent 即将执行的命令定价,不论命令来自何处,而扫描功能则会找出当前正在运行的资源中的浪费。其他产品的对比信息于 2026-10-13 核查;来源列于 CAPABILITIES.md。更详细的对比:nable 与 Vantage、与 CloudHealth、与 Kubecost。

Agent 防护

nable guard install 会为 Claude Code 添加钩子(使用 --all 则会为找到的所有受支持 Agent 添加钩子:Cursor、Codex CLI、GitHub Copilot、Gemini CLI、Cline),在每条基础设施命令运行前进行检查;在 Claude Code、Cursor 和 Codex 中,也会在 MCP 调用运行前进行检查:不可逆操作(销毁、终止、购买承诺)会先征求你的同意;启动操作则按标价定价,因此月费约为 $128k 的 run-instances(8x p4d.24xlarge)会先征求同意,而不会直接放行。EC2 容量预留也采用相同的定价方式,因为无论是否有实例在其中运行,从创建时起就会产生费用;如果设置了承诺期限,它就属于承诺购买,并会根据策略征求同意。涵盖和不涵盖的购买类型列于 CHANGELOG.md。防护功能还会监控多次调用的模式:每小时放行的月度运行费率上限(FINOPS_POLICY_VELOCITY_CAP_USD,默认为每项操作 $500/月阈值的四倍),以及对重复创建的循环检测(十分钟内出现三次相同的 create-stack 会征求同意)。每项判定都会写入本地哈希链账本。

随时更新的 AI 预算。 设置 Claude Code、Codex 或 Cursor 的支出上限后,防护功能会据此评估每次调用。Cursor 用量来自其 Admin API(CURSOR_ADMIN_API_KEY):钩子绝不会等待网络响应;如果本地副本超过一小时未更新,就会在后台刷新并告知你(设置 FINOPS_GUARD_BACKGROUND_REFRESH=0 可关闭该功能)。FINOPS_GUARD_AUTO_REFRESH_BUDGET=1 也会对云预算数值执行相同操作:根据本地成本历史重新计算,且不会产生计费调用。 以纯文件形式管理团队和每位开发者的 AI 预算。 在组织模型的 budgets.yaml 中设置 ai_budget 事实,即可为团队(monthly_usd,以及团队中每个人的 per_person_usd)、某个人(邮箱或 github:login)或整个组织设置月度预算,金额以等价于公开标价的美元计:按提供商公布的费率(llm_prices)计算 Agent 的 token 成本,反映用量而非发票金额。在 Agent 下次进行 shell 或 MCP 调用时,守卫会将这台机器本月至今的编码 Agent 支出与个人预算比较;如果没有个人预算,则与其团队的 per_person_usd 比较(提议的个人预算只会增加一次询问,绝不会取消已确认的个人预算);并与团队和组织的 monthly_usd 比较(仅计算这台机器的支出,因此团队数据可能被低估,询问时会说明这一点)。超出预算时,守卫会询问,并指出文件、事实键、金额和价格来源;设置 FINOPS_GUARD_STOP_ON_BUDGET=1 或 on_budget_breach: deny 时则会拒绝。提议的预算或来自尚未信任的仓库的预算,只会触发询问。本守卫与 nable ai-budget 自身限制中较严格的一方生效。预算归属人由 FINOPS_GUARD_PERSON 指定,否则使用 git 的 user.email(读取一次并保存)。在 Agent 更改 git 的 user.email 之前,守卫会先询问;无论是通过 git config 更改(会计入可设置该值的 include.path 或 includeIf),还是直接写入 git 配置文件:仓库的 .git/config、~/.gitconfig 和 XDG 配置文件都属于守卫监控的文件。如果邮箱以其他方式更改,下次调用时守卫会询问一次,并指出更改前后的邮箱;此前邮箱对应的预算在本月剩余时间内仍然适用。对于 llm_prices 中没有注明费率的模型,其 token 会计数并报告,但不会猜测价格。每月只计算一次价格并保存(权限为 0600,存放在 ai-budget.json 旁边),因此未变更的转录内容不会产生重新计价;转录内容增长时,只为新增行计价。

基于付费工作区获取团队的整体金额。 在付费工作区中,nable cloud status --box https://HOST 也会读取该工作区本月至今的个人、团队和组织数据,并将其保存在账本旁边的 cloud-standing.json 中。随后,守卫会针对每项预算,比较本机金额和服务端金额,并取较大值,绝不相加;同时报告两者、服务端数据的截至时间及其时间差。它只读取文件,绝不访问网络;数据仅适用于当前 UTC 月份、当前个人,以及本机发送数据的盒子和工作区(如果多个工作区共用一个盒子,另一个工作区的密钥会读取一条状态,该状态会显示出来,但绝不会供守卫保存使用)。只有本地的 budgets.yaml 能设置阈值。nable guard doctor 会说明何时未使用服务端金额以及原因。

nable org set ai_budget --subject team:payments --monthly-usd 5000 --per-person-usd 400
nable org set ai_budget --subject person:[email protected] --monthly-usd 300

与预算挂钩的停止机制。 已计价的变更也会根据你设置的云预算(set_budget 工具或 budget.yml)进行检查:如果本月至今的支出加上该变更本月剩余时间的成本会导致预算超限,守卫就会询问,并指出预算、截至目前的支出、该变更的月度金额和预计超额金额。在 nable.policy.yaml 中设置 on_budget_breach: deny(位于 nable 的数据目录,默认是 ~/.finops,或由 FINOPS_POLICY_FILE 指定)会触发强制停止;FINOPS_GUARD_STOP_ON_BUDGET=1 或 =0 可针对单次会话或 CI 运行覆盖此设置。总额、提供商和服务预算会直接应用于命令本身;当 Agent 运行时的 FINOPS_GUARD_TEAM 或 FINOPS_GUARD_ACCOUNT 指定了团队或账户时,团队和账户预算也会生效。钩子读取的是简要支出汇总,而不是数据库:每次预算检查都会写入该汇总;应安排运行 nable budget refresh;超过 48 小时(FINOPS_GUARD_BUDGET_MAX_AGE_HOURS)或来自上个月的数据不会被使用,已计价变更的判定结果会对此作出说明。nable guard doctor 会列出守卫执行的预算、无法将变更归入其中的预算,以及数据的时间差。

nable guard report --session <id>     # what it asked, blocked and let through, in dollars
nable guard reconcile --hours 24      # CloudTrail's creates, destroys and commitments against the ledger
nable guard export --format cef       # the verified ledger, for a SIEM
nable budget refresh                  # recompute budgets and the guard's spend figure
nable budget ci-gate --fail-on-breach --json   # a pipeline step that fails on a breached budget

ci-gate 会生成报告并以状态码 0 退出,除非传入 --fail-on-breach;启用该选项后,预算超限(支出达到或超过其临界百分比)时以状态码 1 退出,无法运行检查时以状态码 2 退出。--budget-file budget.yml 会先同步该文件。

reconcile 需要 cloudtrail:LookupEvents(免费、只读),并按类型和时间进行匹配,因为账本不保存资源 ID。此防护是安全带,而非安全边界:nable guard doctor 会列出它看不到的内容。

将采购权限明确写下来。 nable org set authority --class rds_ri --rung approve_each --approver email:[email protected] --expires 2027-06-30 会在组织模型的 authority.yaml 中写入一条记录:针对付费工作区的预留实例 Agent 可购买的每种采购类型(rds_ri、elasticache_ri、database_savings_plan),记录其级别(off、recommend 或 approve_each)、单个计划最多可为其承诺的金额、可批准的人以及记录的到期时间(不超过 366 天)。每条记录都会生效,并以限制最严格的答案为准;nable 无法读取的记录会将对应类型限制在 recommend 级别,并显示其文件、记录和字段(nable org authority、nable org status)。工作区会采用文件设置与自身选择的较严格者,因此文件只能进一步收紧限制;并且每笔采购仍须由拥有采购权限、已登录的指定人员批准。

它也会防护自身设置。 如果 Agent 要写入、移动或删除决定防护行为的文件(包括组织模型、authority.yaml、nable.policy.yaml、已安装的包、账本、关闭开关以及各 Agent 设置中的钩子条目),系统会先询问;此规则适用于每个 Agent 中的 shell,也适用于 Claude Code 的 Write 和 Edit 工具。Agent 从任何入口点运行 nable guard off、nable org confirm 和 nable pack install 时,也会受到同样的保护(nable、finops、finops-mcp、uvx、python -m)。

根据你的组织量身定制

nable org init 会读取组织已有的自我描述信息(CODEOWNERS、Terraform、AWS Organizations、标签、账户和命名空间名称),并据此提出所有者、环境以及代表团队或成本中心的标签键。随后它最多会询问十个问题,优先询问支出最高的项目,大多数问题会批量提出(“这 8 项由 payments 负责,每月 $18,500:是、否还是编辑?”)。回答会以纯 YAML 的形式保存在你拥有的 nable.org/ 文件夹中:如果你希望通过拉取请求进行审核,可以放在仓库中(nable org init --here);否则会放在 nable 的数据目录中。

nable org init            # propose, then ask the week-one questions
nable org status          # what is confirmed, proposed, stale or in conflict, and spend coverage
nable org questions       # the open questions, with the command that answers each
nable org export --format json

人员确认的内容会改变 nable 的行为:防护询问会明确说明所有者(“由 payments 负责(#payments-oncall)”);防护会从你正在使用的仓库获取团队预算和各团队阈值所需的团队信息;工单会附上所有者的团队和频道;发现的问题会附上所有者;归属判断以及生产或非生产环境的检测,会优先依据你确认的信息,而不是猜测。Agent、适配器和 MCP 工具只能提出建议;确认操作必须由人员在 CLI 中完成,或通过合并拉取请求完成。猜测可能会让 nable 更谨慎,但绝不会让它放松限制。克隆仓库中附带的 nable.org/ 会叠加在你自己的模型之上;在你运行 nable org trust 之前,其中的所有者都会标记为可能的所有者,且其阈值只能低于你的阈值。

它不会再对同一件事反复询问

守护程序会记录每次询问的处理结果(Claude Code、Cursor 和 Copilot 会报告所询问的命令何时运行)。当人们在同一范围内至少一周内 5 次批准同类更改,且没有拒绝或回退时,nable 会针对该范围建议一个阈值,并展示依据:“自 9 月 19 日以来已批准 6 次,最高 $1,121/月,未拒绝或回退”。由人员运行 nable org confirm 确认,此后这类更改无需提示即可通过。反复拒绝则会建议尽早询问。不可逆操作始终会询问。

nable learn infer --dry-run    # what nable would propose, and why
nable guard report             # asks approved, declined and unknown, per action and scope
nable org set freeze --scope environment:prod --start 2026-11-26T00:00-05:00 --end 2026-12-01T00:00-05:00 --reason "Black Friday"
nable guard approve <id>       # let one blocked command through, once, from your own terminal

变更冻结和审批链也是组织级事实:冻结期间,其范围内的每项定价变更和不可逆操作都会询问(如果你已在拒绝模式下确认冻结,则会被拒绝),补救拉取请求和工单会发送给你指定的审批人。无法暂停并询问的 Agent(Codex CLI、Gemini CLI、Cline、Copilot 云 Agent)会收到带有审批 ID 的拒绝;人员运行 nable guard approve <id> 后,相同命令会在 15 分钟内运行一次。

扩展包

扩展包通过组织自有规则扩展 nable:策略、只能收紧规则的守护规则、补救手册、价格表、报告模板、编码 Agent 技能,以及(沙箱化的)连接器、组织适配器和工单或 Slack 接收端。每个扩展包都会在 nable-pack.toml 中声明可读取的内容、可获取的机密信息以及可访问的主机;安装时你可以查看这些声明,而如果更新要求更多权限,则需要再次获得你的批准。

nable pack install ./my-pack          # a folder, a .tar.gz, git+https://...@<commit>, or ns/name from a registry
nable pack audit                      # what is installed, what each may do, and whether any file changed
nable pack validate ./my-pack         # for authors

ns/name 安装会读取由组织策略中的 packs.registry、--registry 或 NABLE_PACK_REGISTRY 指定的注册表索引;默认索引(GitHub 上的 getnable/registry)尚未发布,因此会返回 404,请指定你自己的索引。组织策略文件可以限制扩展包的来源、限制其可请求的权限,并要求签名(nable.policy.yaml 中的 packs:)。详情、功能列表以及笔记本电脑上沙箱的实际限制,请参阅 docs/PACKS.md。

将其接入付费工作区

以上所有操作都在你的机器上运行,数据也留在本地。迁移到付费工作区时,nable cloud connect 会将三类数据带入工作区:组织模型(组织目录中的文件,包括 budgets.yaml)、守卫的决策账本(每一行都与存储时完全一致),以及这台机器上的编码 Agent 使用情况。使用情况按 UTC 日期、开发者、Agent、模型和项目,每个已结束日期对应一条 agent_usage 记录,覆盖最近 28 天;如果 Claude Code 保存的会话记录更少,则记录天数也会更少(按方向统计 token 数;只有 token 价格能对应到有引用来源的 llm_prices 行时,才记录等同于标价的美元金额;仅当组织模型中列出该项目时,项目才记为仓库,否则记为 unmapped;不包含提示词、文件内容、路径或主机名)。开发者就是发送数据的人:使用 --as WHO 指定,否则依次使用终端上 git 的 user.email,再用 $USER;试运行会显示该信息,工作区会按开发者、团队和项目汇总记录。账本记录的是 Agent 执行的命令,以及守卫检查过的路径;凭据会被编辑隐去,除此之外不会做任何修改,因此记录中可能包含路径、主机名和用户名;试运行会统计包含这些信息的记录数量。发送前会先进行试运行,而试运行不会发送任何内容:它会显示数据将发送到哪里、涉及哪些文件和多少条记录、数据大小、sha256 和确认码,并保存供你查看的确切数据。

nable cloud connect --box https://your-workspace.example.com                        # the dry run
nable cloud connect --box https://your-workspace.example.com --send --confirm <code>
nable cloud status  --box https://your-workspace.example.com                        # what the workspace holds
nable cloud connect --box https://your-workspace.example.com --delete-org-file teams.yaml   # remove one file there
nable cloud connect --box https://your-workspace.example.com --without-org-file authority.yaml  # leave one file out

工作区会保留你发送的每个组织模型文件,直到后续上传包含该文件:如果上传中只有 owners.yaml,其中的 teams.yaml 会保持原样。如果某个文件与工作区已有文件相同,而后者后来又被替换,则不会应用该文件,发送结果会说明这一点;--delete-org-file NAME 会删除工作区中的文件,而删除后再发送该文件的副本则会应用它,这正是有意恢复某个团队的方式。authority.yaml 只会发送到明确表示接受该文件的工作区;如果目标工作区不接受,发送会在任何数据离开本机之前被拒绝。使用 --without-org-file authority.yaml 可不发送该文件,但发送其余内容。若工作区提供相应数据,nable cloud status 也会读取本月至今的用量及团队用量,供守卫使用(见上文)。

--send 会将确认码指定的确切数据发送到该确认码指定的工作区(确认码是该工作区信息、一个换行符和数据内容的 sha256),如果自你查看以来有任何内容发生变化,则会拒绝发送。请在自己的终端中运行,或传入 --as WHO;Agent 执行此命令前,守卫会先询问。仅使用 HTTPS,且绝不会在气隙模式下发送。工作区密钥是一个分析密钥,可在工作区的 /workspace 页面创建;可从 NABLE_WORKSPACE_KEY 读取、通过权限为 0600 的 --key-file 读取,或在隐藏提示中输入;绝不会从命令行读取,也不会被存储。如果账本的哈希链断裂,或仓库中的 nable.org/ 尚未受信任,系统会显示相关信息,但不会发送。

设置

需要 Python 3.11+。需要 uv?可运行 curl -LsSf https://astral.sh/uv/install.sh | sh(或运行 brew install uv)。

uvx nable

设置向导会查找你机器上已有的 AWS 或 GCP 凭据(SSO 登录、CLI 配置文件或默认凭据),连接你选择的凭据,并配置编辑器。通常你无需输入密钥。

在 CI、cron、脚本或没有终端的 Agent 中使用:docs/HEADLESS.md 介绍了 stdin 关闭时各命令的行为、--json 输出和退出代码、所有环境变量、气隙模式,以及通过 stdio 使用 MCP。

Cursor 一键安装:将 nable 添加到 Cursor

本地工具永久免费。面向团队的托管版本(无需终端即可使用仪表板、SSO、定期报告和常驻 Agent)请访问 getnable.com/pricing。

手动配置编辑器 — 仅在设置未自动完成配置时需要

如果 finops setup 未自动完成配置,请运行:

finops setup claude

或者手动添加到 claude_desktop_config.json:

使用 uvx(推荐):

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

使用绝对路径:

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

使用 which finops-mcp 输出的路径。

配置文件位置:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
  • Linux:~/.config/Claude/claude_desktop_config.json

为什么使用 uvx? Claude Desktop 是 GUI 应用,不会继承 shell 的 PATH。uvx 会在独立环境中运行 finops-mcp。在采用受管 Python 安装的企业设备上,这是最可靠的选项。

为 Agent 设置成本控制 — 面向编码 Agent 的操作前预算关卡

nable 不只是 Agent 可以读取的工具。它还是一个操作前关卡,Agent 会在执行影响成本的变更之前调用它:为变更估价、检查是否符合预算,并提供更便宜的方案。它绝不会自行应用任何变更。仅提供提议,由 Agent 提议,再由人工批准。

在 Agent 的系统提示词中添加一行(Claude Code、Cursor 或任何 MCP 客户端均可):

在应用任何基础设施变更(terraform apply、helm upgrade、创建或调整资源大小)或启动高成本任务之前,先调用 check_action_policy,并传入操作及变更内容(terraform plan、helm diff 或 monthly_delta_usd)。转达判定结果、美元影响,以及可用时提供的更便宜方案。绝不要应用 block 或 escalate 操作;应将其提交给人工处理。nable 仅提供建议,且只提出方案。

该关卡会根据你的策略返回 allow / warn / block / escalate,以及每月和每年的美元影响;如果变更涉及计算资源,还会提供按需实例替代方案。单向操作(删除、终止、购买承诺)和超出预算的变更总是会升级给人工处理;如果策略设置了 on_budget_breach: deny,则会直接阻止超预算变更。

Agent 自身也有预算。 运行一次 nable ai-budget,它会询问你使用的是固定费用套餐还是按量计费的 API,以及你支付的金额,然后记住这些信息。使用固定费用套餐时,它会跟踪你使用了多少补贴计算资源,并在资源即将耗尽前发出警告;按量计费时,它会根据美元支出上限进行限制。check_ai_budget 可以在任务执行期间为 Agent 做同样的检查。它会在本地读取你的 Claude Code 使用情况,不会上传任何内容。每条响应都按其自身模型的标价计费,包括缓存写入和读取;报告会按模型和会话拆分成本。每个任务的支出上限(nable ai-budget --session-cap 40,或对 Agent 说“此任务最多可花费 $40”)按一个 Claude Code 会话计算,包括子 Agent;check_ai_budget 会返回该上限下剩余的可用额度。在系统提示词中添加:

开始大型任务前,调用 check_ai_budget。如果返回 warn 或 over,请先告知我当前情况,再继续。

它会根据你的预算报告实际使用量和消耗速率,而不是编造套餐隐藏速率限制的百分比。

面向 Claude Code、Cursor、Codex、Copilot、Gemini CLI 和 Cline 的 防护钩子,以及托管部署

nable guard install 会将同一项检查作为钩子置于 Agent 的 shell 命令之前,因此无论 Agent 是否记得调用关卡,检查都会运行:

nable guard install --all --global      # every supported agent found on this machine
nable guard install --harness gemini    # one agent, this project only
nable guard doctor                      # what is covered here, and what is not
Agent钩子位置检查内容策略要求人工处理时
Claude Code.claude/settings.jsonshell 命令、MCP 工具询问
Cursor.cursor/hooks.jsonshell 命令、MCP 工具询问
Codex CLI.codex/hooks.jsonshell 命令、MCP 工具拒绝,并说明原因
GitHub Copilot.github/hooks/nable-guard.jsonshell 命令在 Copilot CLI 中询问;在云端 Agent 中拒绝,并说明原因
Gemini CLI.gemini/settings.jsonshell 命令拒绝,并说明原因
Cline(macOS、Linux).clinerules/hooks/PreToolUseshell 命令停止任务,并说明原因
`--global` 会改为写入用户级文件(`~/.claude/settings.json`、 `~/.cursor/hooks.json`、`$CODEX_HOME/hooks.json`、`~/.copilot/hooks/`、 `~/.gemini/settings.json`、`~/Documents/Cline/Hooks/`)。用户安装的钩子 可以由用户移除。

托管部署。 若要让钩子成为用户无法移除的策略,请通过 Agent 的管理设置进行部署。 将 <version> 替换为你测试过的发行版本(nable --version),并确保用户的 PATH 中 包含 uvx,或者改用已安装的 finops 二进制文件的绝对路径,而不是使用 uvx 形式。

Claude Code 会从 /Library/Application Support/ClaudeCode/(macOS)、/etc/claude-code/ (Linux 和 WSL)或 C:\Program Files\ClaudeCode\(Windows)读取 managed-settings.json,也可以读取其旁边 managed-settings.d/ 中的独立文件。用户、 项目和本地设置可以在托管钩子旁添加自己的钩子,但无法移除托管钩子;用户的 disableAllHooks 也无法将其关闭:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "^(Bash|mcp__.*)$",
        "hooks": [
          {"type": "command", "command": "uvx --from finops-mcp==<version> finops guard hook", "timeout": 30}
        ]
      }
    ]
  }
}

Codex 会读取 /etc/codex/requirements.toml(Windows 上为 %ProgramData%\OpenAI\Codex\requirements.toml)。 其中的钩子由管理员管理:始终启用,无需经过“Hooks need review”步骤即可信任,且用户无法禁用:

[[hooks.PreToolUse]]
matcher = "^(Bash|mcp__.*)$"

[[hooks.PreToolUse.hooks]]
type = "command"
command = "uvx --from finops-mcp==<version> finops guard hook"
timeout = 30

两者还都有一个开关,可仅运行托管钩子并忽略所有用户、项目和插件钩子:在 Claude Code 的 托管设置中设置 "allowManagedHooksOnly": true,或在 Codex 的 requirements.toml 顶层设置 allow_managed_hooks_only = true。仅当不应运行任何人自己的钩子时才设置此项。Copilot CLI 在策略钩子文件中也有类似功能,文件路径为 /etc/github-copilot/policy.d/*.json(必须由 root 拥有,且不可由组或其他用户写入),格式与 .github/hooks/nable-guard.json 相同。

来源:Claude Code 托管设置、 allowManagedHooksOnly、 openai/codex 中的 Codex codex-rs/config/src/config_requirements.rs 和 codex-rs/hooks/src/engine/discovery.rs、 Copilot 钩子参考。

此防护措施是安全带,而非安全边界:为 Agent 提供只读云凭据,并将写入权限保留给人工。

连接器(20 个支出来源):各提供商及其获取的数据,以及 Azure 角色
提供商获取的数据
AWSCost Explorer(该 API 每次请求收费 $0.01;除非传入 --spend,否则 nable scan 仅使用免费 API)· 通过 Athena 获取 CUR 明细项(按扫描字节数计费)· Organizations
AzureCost Management API · Advisor 成本建议 · VM 规格优化(Azure Monitor)· 原生预算 · 预测
GCPCloud Billing API + BigQuery 账单导出 · Recommender
Kubernetes根据 kubeconfig 估算的标价
OpenCost在集群中运行 OpenCost 时使用其 Allocation API
OpenAI按模型统计的 API 用量和令牌支出
AnthropicClaude API 用量和令牌支出
Amazon Bedrock通过 Cost Explorer 获取按模型统计的支出
Vertex AI从 BigQuery 账单导出获取的支出
OpenRouter网关用量
LiteLLM由可自托管代理记录的支出
LangfuseDaily metrics API:模型成本、令牌用量、跟踪记录量
DatadogUsage Metering API v2:实际金额
SnowflakeACCOUNT_USAGE.METERING_HISTORY
DatabricksDBU 用量和 SQL 仓库支出
MongoDB AtlasInvoice API
TwilioUsage Records API
CloudflareBilling API
VercelInvoice API(Enterprise)
New Relic数据摄取量 + 用户数
也支持以下集成,但不会显示支出金额:Modal、Together 和 Replicate(nable 会检查密钥,但它们的公开 API 不会返回每个周期的费用,因此会引导你导入发票),以及 Cohere 和 Mistral(`nable cohere` 和 `nable mistral` 会保存密钥;目前还没有任何功能读取它们的用量)。设置 `STRIPE_SECRET_KEY` 后,Stripe 会将 MRR 和付费客户数纳入单位经济效益分析;它不是费用来源。

Azure 角色。 Azure 工具涉及三个 RBAC 角色,需要在每个订阅中授予服务主体(运行 finops doctor 进行检查):

# 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>
常见问题 — 免费与付费、提供商,以及与 Cost Explorer / Vantage 的比较

什么是 FinOps MCP 服务? 一种 MCP(Model Context Protocol)服务,可在 AI 编辑器中回答云成本问题。nable 会在本地运行这样的服务,因此你可以向 Claude、Cursor 或 VS Code 询问 AWS、Azure、GCP 和 AI 支出情况;它会读取你计算机上的实际成本数据并作答。

nable 是免费的吗? 是。终端扫描、所有成本查询、异常检测、所有浪费和资源规格优化发现,以及所有连接器永久免费。每次安装都会附带为期 7 天的 Pro 功能试用。Pro(25 美元/月)提供工单创建(Jira、Linear、GitHub Issues)、按需发送的电子邮件报告和摘要,以及跨账户的组织级汇总。Team(统一收费 1,000 美元/月,席位不限)提供对话式 Slack 机器人和聊天式修复功能。目前,预测、承诺建议、修复 PR 和 Ledger 均免费,具体定价尚待确定。按计划发送且无需任何人请求的报告和提醒属于 nable Cloud;此安装仅会在你请求时发送。

我的账单数据会离开我的计算机吗? nable 绝不会上传这些数据:它会读取你计算机上的成本数据,不会将其发送至任何 nable 服务;除非你主动启用,否则遥测功能处于关闭状态(且绝不包含成本金额)。唯一会将你自己的文件发送到其他位置的功能是 nable cloud connect --send:你运行此命令,将组织模型和防护账本带入付费工作区;而且只有在针对这些字节和该计算机的试运行显示确认码后才会发送。在编辑器中,你请求的回答会发送给你交谈的大模型,就像任何 MCP 工具结果一样;nable scan 和其他 CLI 命令都不会涉及大模型。你可以在源代码中确认它不会向外发送数据。

支持哪些云和提供商? AWS、Azure 和 GCP;Kubernetes(通过 kubeconfig 估算,或使用 OpenCost);AI 和大模型提供商(OpenAI、Anthropic、Bedrock、Vertex AI、OpenRouter、LiteLLM、Langfuse);数据平台(Databricks、Snowflake、MongoDB Atlas);以及 SaaS(Datadog、New Relic、Cloudflare、Twilio、Vercel)。Modal、Together、Replicate、Cohere 和 Mistral 可连接,但目前不会返回支出金额(请参阅“连接器”)。

它与 AWS Cost Explorer 有何不同? Cost Explorer 仅支持 AWS,且其 API 按请求收费。nable 支持多云,可在终端和 Claude/Cursor 中运行,能涵盖云控制台无法显示的 AI 提供商支出(OpenAI、Anthropic 等),并会通过拉取请求提出修复建议。默认情况下,nable scan 也不会发起任何付费 API 调用。

有没有 Vantage 或 CloudHealth 的开源替代方案? nable 是一款开源(Apache-2.0)、本地优先的替代方案,可用于成本查询、浪费检测、资源规格优化以及 AI/GPU 成本分析,在你的计算机上运行,而非托管式 SaaS。

故障排除 — 安装和设置问题的解决方法
finops-doctor          # checks credentials, DB, network, audit log
finops setup claude    # re-run editor configuration only
症状解决方法
Claude 中未显示工具切换到 uvx 配置,或使用绝对路径
command not found: finops-mcp重新安装:pip install finops-mcp,或使用 uvx
AWS 未返回数据运行 finops setup aws
No matching distribution found for finops-mcp你的 Python 版本低于 3.11。请安装 3.11 或更高版本(uvx --python 3.12 nable,或 python3.11 -m pip install finops-mcp)。
cryptography 构建错误 / maturin faileduv 尝试在 Python 3.10 上编译。请使用 3.11 或更高版本:uvx --python 3.12 nable。
企业 SSL 错误pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org finops-mcp
在家能用,在公司不能用使用 uvx(企业 IT 通常会移除自定义 PATH 条目)

许可证

完整采用 Apache-2.0 许可证。托管的企业层(Web 仪表板、调度程序、双向 Slack 机器人、SSO、控制平面)位于单独的私有仓库中。本仓库包含的内容:CAPABILITIES.md;所有 MCP 工具:docs/tool-inventory.txt。

getnable.com · 文档 · 隐私 · 安全

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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。