关于 cloud-tools
cloud-tools 是以 Rust 编写的 MCP 服务和 HTTP API,可查询 AWS、GCP、Cloudflare 和 OVH 的云支出、资源清单、浪费及承诺项。它从运行环境读取凭据,并仅执行只读查询。
主要功能
- 01查询成本及跨云支出
- 02查询受支持云平台的资源清单
- 03分析 AWS 和 GCP 资源浪费
- 04生成承诺项与建议报告
- 05检查访问状态和结果覆盖范围
适用场景
- 01查看多个云平台的支出
- 02识别闲置或规格过大的资源
- 03检查云平台访问权限及结果是否不完整
- 04查看承诺项和 GCP 建议
MCP 相关
通过 stdio 或可流式传输的 HTTP 提供八种只读工具,供 Agent 查询受支持的云平台。凭据保留在服务的运行环境中,不会放入工具调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
使用 Rust 进行多云成本、资产清单和浪费分析——作为 MCP 服务提供,让 AI Agent 可以直接查询支出和浪费;其他功能则通过 HTTP API 提供。
它会报告支出和浪费情况:闲置实例、规格过大的节点、上一代硬件、未关联资源,以及未使用的承诺。
八种工具,一种形式
每种工具都只接受 cloud 及其所需的其他参数。工具调用中绝不会出现凭据——服务会从自身环境中读取凭据,因此 Agent 无须处理密钥,也无须获知密钥。
{ "cloud": "aws" }
{ "cloud": "gcp" }
从 check_access 开始。它不接受任何参数,不会连接任何云,并会报告此服务能够访问哪些云,以及无法访问的云缺少什么配置。
| 工具 | AWS | GCP | Cloudflare | OVH |
|---|---|---|---|---|
check_access | 报告全部四种云的配置 | |||
get_costs | 是 | 需要计费表 | 是 | 是 |
compare_costs | 是 | 需要计费表 | — | — |
get_inventory | — | 是 | 是 | 是 |
get_waste | 是 | 是 | — | — |
get_commitments | 是 | 是 | — | — |
get_recommendations | — | 是 | — | — |
get_cross_cloud_summary | 此服务能够访问的所有云 |
横线不表示悄无声息地返回空结果。例如,工具会回答
waste analysis is not implemented for ovh; supported: aws, gcp,这样 Agent 就不会误把功能缺失当成账目正常。
正确解读零值
get_waste 和 get_inventory 会返回一个 coverage 字段和一个 errors 列表。
总计为零有两种截然不同的含义:
| coverage | 含义 |
|---|---|
complete | 没有浪费。 |
PARTIAL — N API call(s) failed… | 无法读取账户中的部分内容。 |
部分结果不代表状况良好。
配置服务
凭据从运行 cloud-tools 的机器环境中读取。不会存储任何内容,所有调用均为只读。
AWS
按以下顺序解析,采用第一个匹配项:
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY~/.aws/credentials,使用AWS_PROFILE指定的配置文件,否则使用[default]- ECS 任务角色
- EC2 实例角色
不会直接读取仅限 SSO 的配置文件。请先导出:
aws configure export-credentials --profile <name> --format env。
若要扫描其他账户,请传入要代入的角色。角色 ARN 不是密钥,因此可以作为参数传入:
{ "cloud": "aws", "target": { "role_arn": "arn:aws:iam::…:role/ReadOnly" } }
如果每次调用都应代入同一角色,可通过 CLOUD_TOOLS_AWS_ROLE_ARN 和 CLOUD_TOOLS_AWS_EXTERNAL_ID 设置默认值。
get_waste 会读取 EC2 实例、卷、快照、AMI、弹性 IP、密钥对和预留实例;RDS;S3;Lambda;DynamoDB;ECS;ElastiCache;负载均衡器;NAT 网关;未设置保留期的 CloudWatch 日志组;以及 Compute Optimizer。闲置和规格过大的判断依据是 CloudWatch CPU 序列,因此是测量得出的,而非猜测。
GCP
应用默认凭据——只需运行 gcloud auth application-default login——或设置 GOOGLE_APPLICATION_CREDENTIALS,使其指向服务账号文件。
| 变量 | 用途 |
|---|---|
CLOUD_TOOLS_GCP_PROJECTS | 要查询的项目 ID,以逗号分隔 |
CLOUD_TOOLS_GCP_BILLING_TABLE | BigQuery 账单导出表,格式为 project.dataset.table |
也可以在每次调用时通过 target.project_ids 选择项目,这样一个 Agent 就能扫描多个项目。
billing_table 很重要。Google 没有发布按服务划分的支出 API,因此实际成本需从 BigQuery 账单导出中获取。没有该表时,get_costs 会回退到 Budgets API,并将结果标记为 "source": "budgets",同时注明这些是预算金额,而非支出。compare_costs 则必须使用该表。
Cloudflare
CLOUDFLARE_API_TOKEN a token with read access to account resources
CLOUDFLARE_ACCOUNT_ID
OVH
OVH_APPLICATION_KEY
OVH_APPLICATION_SECRET
OVH_CONSUMER_KEY
OVH_ENDPOINT ovh-eu (default), ovh-us or ovh-ca
安装
尚未发布。 最新的标签是
v0.1.0,该版本发布的.tar.gz归档使用旧的资源名称,而且 npm 上没有@munhq/cloud-tools。以下三个命令会在标记v0.2.0后立即生效。在此之前,请从源代码构建:cargo build --release。
作为 MCP 服务
claude mcp add cloud-tools -- npx -y @munhq/cloud-tools
适用于任何读取 JSON 配置的工具——Claude Desktop、Cursor、Windsurf、Zed、Cline:
{ "mcpServers": { "cloud-tools": { "command": "npx", "args": ["-y", "@munhq/cloud-tools"] } } }
npm 包只是一个轻量包装器,因为该服务是编译后的二进制文件,而非 JavaScript。安装时,它会解析适用于你平台的发布资源,根据已发布的 SHA256SUMS 验证文件,将其缓存到 ~/.cache/cloud-tools/bin/,然后执行。
作为二进制文件
Linux、macOS 和 Windows 的预编译二进制文件支持 x86_64 和 arm64,并附在每个发布版本中。下面的脚本会下载适用于你机器的版本,并根据 SHA256SUMS 校验:
curl -sSL https://raw.githubusercontent.com/munhq/cloud-tools/main/install.sh | bash
或者直接获取单个资源:
curl -fsSLO https://github.com/munhq/cloud-tools/releases/latest/download/cloud-tools-x86_64-linux
chmod +x cloud-tools-x86_64-linux
作为容器
docker run -i --rm \
-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_REGION \
munhq/cloud-tools
运行
构建为库(cloud_tools),并提供可选的二进制文件。两个功能标志默认均已启用:
mcp— 通过rmcp提供基于 stdio 和可流式 HTTP 的 MCP 服务http— 通过 axum 提供 HTTP API
cargo build --release
./target/release/cloud-tools # MCP server on stdio
作为 MCP 服务时,它可以接入任何支持 MCP 的 Agent。Agent 会直接调用上述工具,并根据结果进行推理。
如果要嵌入使用,请依赖该库并关闭二进制功能:
cloud-tools = { git = "https://github.com/munhq/cloud-tools", default-features = false }
状态
已可正常运行,并已用于 AWS、GCP、Cloudflare 和 OVH 的实际账号。浪费分析目前仅支持 AWS 和 GCP——Cloudflare 和 OVH 完全没有相关分析,而不只是规则较少;get_waste 会明确说明这一点,而不是返回空列表。AWS 目前还没有资源清单工具,不过其底层的资源列表调用已经实现。欢迎贡献代码,扩展对其他提供商的支持。
隐私政策
cloud-tools 不会收集任何信息。没有遥测、没有分析,也不会以任何形式主动向外发送数据——这一点已通过源码中唯一的主机得到验证:云服务提供商的 API,以及 npm 包装器用于下载适用于你平台的二进制文件的 github.com。
收集的信息。 什么也不收集。无需账户、无需注册,也不收集标识符。
处理的信息及处理位置。 你提供的凭据仅用于对你自己的云服务提供商发起请求,并在该次调用期间保存在内存中。服务运行在你的机器上,因此不会向 munhq 或任何第三方发送信息。响应只会返回给发起请求的 MCP 客户端,不会发送到其他地方。
存储和保留。 不会向磁盘写入任何内容,也不会保留任何信息。唯一的例外是 npm 包装器,它会将下载的二进制文件缓存在 ~/.cache/cloud-tools/bin/ 下,避免每次运行时都重新下载。该缓存中存放的是程序,而不是你的数据或凭据。
日志记录。 诊断信息会输出到 stderr,由你的 MCP 客户端捕获。绝不会记录凭据。错误消息会引用提供商自己的响应,其中可能包含项目名称、账户 ID 或资源名称——这些信息与工具被要求报告的信息相同。
与第三方共享。 不会共享。唯一的网络目的地是你所提供凭据对应的云服务提供商 API:
AWS(*.amazonaws.com)、Google Cloud(*.googleapis.com)、Cloudflare
(api.cloudflare.com)和 OVH(*.api.ovh.com、api.us.ovhcloud.com)。
权限。 所有工具只需只读权限即可。全部八个工具均声明了
readOnlyHint: true,且此服务中的任何内容都不会创建、修改或删除云资源。
联系方式。 [email protected]。本政策的权威版本位于 https://munhq.com/privacy/cloud-tools。
许可证
Apache-2.0。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。