用途
OpenCloudCosts 是一个开源 MCP(Model Context Protocol)服务器,旨在为 AI 助手提供 AWS、GCP 和 Azure 的实时、结构化云定价数据。它解决的核心问题是:大语言模型的云定价知识在训练截止时就被冻结,而云定价持续变化——实例类型不断新增和淘汰、同一实例类型在不同区域价格差异可达 20–40%、现货市场波动、承诺折扣因账户而异。模型无法知道你的协商 EDP 费率,甚至难以可靠回忆去年的列表价格。OpenCloudCosts 通过让模型调用工具获取精确答案,而非凭空猜测数字。
主要能力
覆盖范围:三大云,16 个工具
其中 14 个工具完全可用。两个条目为兼容性占位:search_pricing(v0.8.x 的已弃用重定向,保留用于向后兼容)和 get_spot_history(已在 Go 服务器中注册但未实现,返回结构化的“不可用”响应)。
按提供商划分的凭证要求
- AWS:公有定价无需凭证;有效定价需要 AWS 凭证并设置
OCC_AWS_ENABLE_COST_EXPLORER=true。 - GCP:公有定价需要免费的 GCP API 密钥(
OCC_GCP_API_KEY);合同/有效定价需要 ADC 凭证和billing.billingAccountPrice.getIAM 权限。 - Azure:完全公开,无需凭证、API 密钥或订阅。Azure 预留 VM 定价(1 年和 3 年期限)可通过公有 Retail Prices API 获取,无需凭证。
性能与可靠性
- 并发:
find_cheapest_region和find_available_regions使用 errgroup + 信号量,最多 32 个 goroutine 并行查询所有可用区域,结果按最便宜优先排序;compare_bom同时发起 8 个跨 AWS、GCP、Azure 的并发提供商调用;compare_prices使用 10 个并发区域调用的信号量;get_prices_batch在区域内跨实例类型并行化。 - 速率限制与超时:HTTP 传输层令牌桶速率限制为 200 req/s(
OCC_RATE_LIMIT);每请求截止时间 60s(OCC_REQUEST_TIMEOUT);每提供商 API 调用 30s(OCC_PROVIDER_TIMEOUT);优雅 SIGTERM 排空 15s(OCC_SHUTDOWN_TIMEOUT)。 - 缓存:价格存储在并发内存缓存中(使用
sync.RWMutex读优化),原子 JSON 持久化于~/.cache/opencloudcosts/cache.json。TTL:公有价格 24 小时(OCC_CACHE_TTL_HOURS),区域/实例元数据 7 天(OCC_METADATA_TTL_DAYS),有效/合同费率 1 小时(OCC_EFFECTIVE_PRICE_TTL_HOURS)。缓存可在二进制更新后保留。计费 API 的 401/403 响应从不缓存,因此凭证轮换立即生效。 - AWS 定价:EC2/EBS/RDS 公有定价使用定向 SKU API 路径,而非下载完整的多 GB 批量定价文件,保持启动快速并避免大网络负载。
- 错误隔离:原始异常文本从不进入 LLM 上下文。所有工具边界发出结构化错误信封;完整回溯仅记录在服务器端。GCP 合同定价在认证失败时回退到公有列表价格,而非将错误暴露到对话中。
验证
OpenCloudCosts v1.0.0 在 LLM 接地测试集上达到 234/234(100%),全套件零 XML 幻觉。测试集覆盖三大云的 234 个真实定价问题:实例抽查、跨区域比较、BOM 估算、多云比较、单位经济性、AI 模型定价、数据库定价、存储定价、折扣摘要、出口定价、可用性查询和网络定价。主要验证模型为通过 llama-swap 本地运行的 qwen3.6-35b-128k。测试集进展:109/123(Python v0.8.x)→ 169/169(v0.9.0)→ 199/199(v0.9.2)→ 234/234(v1.0.0)。此外还有 643 个 Go 单元测试跨所有提供商和工具验证行为正确性和跨提供商 API 一致性。
使用方式
安装
- 选项 1 — pip(最简单,跨平台):PyPI 包封装了原生 Go 二进制,无需 Go 工具链。
- 选项 2 — Homebrew(macOS / Linux)。
- 选项 3 — 二进制下载:从最新 release 下载预构建二进制。
- 选项 4 — Docker / 容器:镜像约 15 MB(distroless scratch 基础,静态二进制)。AWS 和 Azure 公有定价无需凭证。
- 选项 5 — 从源码构建。
连接到 Claude Code
- Stdio(本地进程 — 单用户推荐):添加到
~/.claude/settings.json或项目的.mcp.json。 - HTTP(共享/远程服务器 — 一个服务器,多个客户端):参见
deploy/kubernetes/获取清单。构建并推送自己的镜像,然后在deployment.yaml中引用。凭证通过环境变量或 Kubernetes Secrets 传递。
测试
使用 MCP Inspector 测试。
AWS 凭证
公有定价的最小 IAM 策略;有效定价需额外添加权限。
配置
所有设置通过环境变量(前缀 OCC_)或 .env 文件。
GCP 设置
与 AWS(有公有批量定价端点)不同,GCP 的定价 API 始终需要至少一个免费 API 密钥。无需信用卡或计费账户。
- 选项 A — 免费 API 密钥(推荐,2 分钟设置):前往 console.cloud.google.com/apis/credentials,创建项目(免费),点击创建凭证 → API 密钥。或将
OCC_GCP_API_KEY=AIza...添加到.env文件。 - 选项 B — 应用程序默认凭证(如果已使用 gcloud)。
GCP 实例类型格式:{family}-{series}-{vcpus},例如 n2-standard-4、e2-highmem-8、c2-standard-16。
GCP 合同/有效定价
如果与 Google Cloud 有协商定价合同,可通过 Cloud Billing Pricing API v1beta 获取实际折扣费率(EDP、自定义定价)。需要:ADC 凭证(gcloud auth application-default login)、计费账户上的 billing.billingAccountPrice.get IAM 权限、计费账户 ID。配置后,GCP 计算的 get_price 响应将包含 effective_price 块,显示合同费率和折扣百分比。未配置时,返回公有列表价格。
Azure 设置
Azure 定价完全公开——无需凭证、API 密钥或订阅。Azure 实例类型格式:ARM SKU 名称,例如 Standard_D4s_v3、Standard_E8s_v3、Standard_B2ms。Azure 定价期限:on_demand(默认)、reserved_ 等。
适用场景
- 跨三大云同时定价同一工作负载:使用
compare_bom同时发起 8 个并发提供商调用,返回按提供商、按期限的细分及节省分析。 - 查找长期计算工作负载最便宜的 AWS 区域:使用
find_cheapest_region以 32 个 goroutine 扇出所有区域,返回最便宜的 5 个。 - 确定承诺后的有效 AWS 费率:使用
get_price配合 AWS 凭证和OCC_AWS_ENABLE_COST_EXPLORER=true,返回实际折扣后费率及公有列表价格。 - Azure 无服务器与常开模式的盈亏平衡分析:
estimate_unit_economics覆盖 Functions 路径,get_price覆盖 VM。 - SaaS 产品的单位经济性:
estimate_bom定价完整堆栈,estimate_unit_economics计算每用户和每请求成本。 - AI token 成本比较:Vertex AI vs. Azure OpenAI:使用
get_price配合domain: ai覆盖两个提供商。
限制
- 两个工具为兼容性占位,不提供实时数据:
search_pricing(已弃用重定向)和get_spot_history(未实现,返回结构化“不可用”响应)。 - GCP 定价 API 始终需要至少一个免费 API 密钥,无法像 AWS 那样完全无凭证访问公有定价。
- GCP 合同/有效定价需要 ADC 凭证和特定 IAM 权限,配置较复杂。
- 有效定价(折扣后费率)需要相应云提供商的凭证和额外配置;未配置时仅返回公有列表价格。
- 缓存 TTL 意味着价格数据可能最多滞后 24 小时(公有价格),需使用
refresh_cache工具强制刷新。 - 项目为开源 MCP 服务器,需自行部署和配置,不提供托管服务。