成本浏览器MCP服务器
MCP服务器通过AWS Cost Explorer API分析成本和使用AWS,设计用于 使用POD身份在EKS中部署 y 多重角色概述.
目录
______________________________________________________________________
功能
AWS的成本分析和使用
- 按服务、地区和其他维度分列的详细成本明细
- 查询特定时间段的历史成本数据
- 按维度、标签和成本类别划分的成本过滤
期间间成本比较
- 使用的功能 成本比较 de AWS成本资源管理器
- 两个时期之间的成本比较,以确定变化和趋势
- 分析主要成本因素(前10名),以了解增减
未来成本预测
- 根据历史使用模式生成预测
- 具有置信区间的预测(80%或95%)
- 每日和每月预测的粒度
多帐户体系结构
- 支持具有不同IAM角色的多个AWS帐户
- 使用LRU缓存管理线程安全会话(最多300个会话)
- 在令牌到期前5分钟自动刷新令牌
- 重复执行并发请求(每个帐户只有一个STS调用)
______________________________________________________________________
认证体系结构
如何运作
该服务器的设计是在 EKS,其中POD通过 EKS吊舱标识,对于每个请求,它根据 client_id.
认证流程:
- POD通过EKS POD标识获得基本凭据
- 客户端配置从 AWS机密管理器 (在生产中)或从文件
clients.json当地(发展中) - 对于每个工具请求:
- 正在发送 client_id - 服务器搜索 role_arn 在客户端配置中 - 服务器调用 sts:AssumeRole 走向相应角色 - 创建成本管理器(CE)客户端并缓存到令牌到期 - 令牌在到期前自动刷新
加载客户端配置
服务器按以下顺序优先考虑源:
- AWS机密管理器 --si-la变量
CLIENTS_CONFIG_SECRET定义后,从指定的秘密加载设置。配置在内存中缓存5分钟(可通过CLIENTS_CONFIG_CACHE_TTL)哦。当更新机密时,服务器会在下一个缓存周期中自动检测到更改,而无需重新启动。
- 本地文件 --si
CLIENTS_CONFIG_SECRET没有定义,请搜索clients.json在指定的路线上CLIENTS_CONFIG_PATH或在与模块相关的默认位置。文件在更改时自动重新加载(由MTIME检测)。
先决条件
- EKS 启用POD标识
- 角色基地(吊舱角色):通过POD标识分配给POD的IAM角色,具有以下权限:
- sts:AssumeRole 关于每个帐户角色的RNA - secretsmanager:GetSecretValue 关于配置的秘密
- 每个目标帐户中的角色:允许由基本角色承担
对比度管理
服务器安全地处理并发请求:
- 缓存线程安全:所有缓存都使用锁来防止竞争条件
- 软饮料重复:如果多个请求需要刷新同一令牌,则只进行一次STS调用
- Eviccion LRU:最多300个缓存会话,自动删除使用最少的会话
需要IAM许可
罗尔基地 (通过POD标识识别POD):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::ACCOUNT_ID_1:role/mcp-cost-optimizer",
"arn:aws:iam::ACCOUNT_ID_2:role/mcp-cost-optimizer"
]
},
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:iam::BASE_ACCOUNT_ID:secret:mcp-cost-optimizer/clients"
}
]
}每个目标帐户中的角色 (mcp-cost-optimizer):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage",
"ce:GetCostForecast",
"ce:GetDimensionValues",
"ce:GetTags",
"ce:GetCostAndUsageComparisons",
"ce:GetCostComparisonDrivers",
"ce:GetReservationUtilization",
"ce:GetReservationCoverage",
"ce:GetReservationPurchaseRecommendation",
"ce:GetSavingsPlansCoverage",
"ce:GetSavingsPlansUtilization",
"ce:GetSavingsPlansPurchaseRecommendation",
"cloudwatch:GetMetricStatistics",
"cloudwatch:GetMetricData",
"cloudwatch:ListMetrics",
"ec2:DescribeRegions",
"ec2:DescribeInstances",
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots",
"ec2:DescribeNatGateways",
"ec2:DescribeAddresses",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"rds:DescribeDBInstances",
"rds:DescribeDBRecommendations",
"s3:ListAllMyBuckets",
"s3:GetBucketLocation",
"s3:GetLifecycleConfiguration",
"s3:GetBucketVersioning"
],
"Resource": "*"
}
]
}信任策略 在每个目标帐户角色中:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::BASE_ACCOUNT_ID:role/mcp-cost-optimizer-CLUSTER_ID"
},
"Action": "sts:AssumeRole"
}
]
}______________________________________________________________________
配置
多帐户配置(clients.json)
服务器使用 client_id 寻找要扮演的角色。配置可以在AWS Secrets Manager或本地文件中。
配置示例
{
"clients": {
"cuenta-produccion": {
"role_arn": "arn:aws:iam::ACCOUNT_ID_1:role/mcp-cost-optimizer",
"account_id": "ACCOUNT_ID_1",
"account_type": "payer",
"description": "Cuenta de gestion (payer)"
},
"cuenta-desarrollo": {
"role_arn": "arn:aws:iam::ACCOUNT_ID_2:role/mcp-cost-optimizer",
"account_id": "ACCOUNT_ID_2",
"account_type": "linked",
"payer_id": "cuenta-produccion",
"description": "Cuenta de desarrollo (linked)"
}
}
}更新生产中的配置
aws secretsmanager put-secret-value \
--secret-id "mcp-cost-optimizer/clients" \
--secret-string file://clients.json \
--region eu-west-1 --profile
服务器在未来5分钟内自动检测到更改,无需重新启动。
环境变量
| 变量 | 必需 | 默认值 | 描述 |
|---|---|---|---|
CLIENTS_CONFIG_SECRET | 没有\* | - | 带有客户设置的AWS Secrets Manager中的RNA或Secret名称 |
CLIENTS_CONFIG_PATH | 没有\* | - | 文件路径 clients.json (alternativa当地的一个秘密经理) |
CLIENTS_CONFIG_CACHE_TTL | 没有 | 300 | 从Secrets Manager缓存客户端配置的秒数 |
AWS_REGION | 没有 | us-east-1 | 默认区域AWS |
FASTMCP_LOG_LEVEL | 没有 | WARNING | Nivel日志删除(错误、警告、信息、调试) |
VALIDATE_FILTER_VALUES | 没有 | false | 启用AWS调用以验证过滤器 |
MCP_TRANSPORT | 没有 | stdio | 运输方式: stdio, sse,o streamable-http |
MCP_HOST | 没有 | 0.0.0.0 (容器) | SSE/HTTP传输的侦听主机 |
MCP_PORT | 没有 | 8000 | SSE/HTTP传输的侦听端口 |
MCP_MOUNT_PATH | 否 | - | SSE/HTTP传输的可选装载路径 |
\*需要两者之一: CLIENTS_CONFIG_SECRET (生产)或 CLIENTS_CONFIG_PATH /本地文件(开发)。
______________________________________________________________________
可用的工具
Cost Explorer MCP服务器提供以下工具:
工具
| 工具 | 描述 |
|---|---|
get_today_date | 获取确定相关数据的当前日期 |
list_active_sessions | 列出所有活动的成本管理器会话 |
close_session | 关闭特定会话并释放资源 |
成本查询
| 工具 | 描述 |
|---|---|
get_dimension_values | 获取特定维度(例如服务、区域)的可用值 |
get_tag_values | 获取标签键的可用值 |
get_cost_and_usage | 使用过滤和分组选项恢复AWS的成本和使用数据 |
get_cost_trend_with_anomalies | 6个月趋势+在一次通话中检测异常 |
分析比较
| 工具 | 描述 |
|---|---|
get_cost_and_usage_comparisons | 比较两个时期之间的成本,以确定变化和趋势 |
get_cost_comparison_drivers | 分析导致期间之间成本变化的因素(前10名) |
get_cost_forecast | 根据历史使用模式生成成本预测 |
get_savings_commitments | 当前存储计划和保留实例、覆盖范围和使用 |
库存
| 工具 | 描述 |
|---|---|
describe_ec2_instances | EC2实例的紧凑信息 |
list_ec2_regions_with_instances | 有实例的区域(运行/停止) |
describe_ebs_volumes | 带有孤儿检测的EBS卷 |
describe_ebs_snapshots | 带有孤儿检测的EBS快照 |
describe_rds_instances | RDS实例 |
describe_load_balancers | 负载平衡器 |
describe_nat_gateways | NAT网关 |
describe_elastic_ips | 弹性IP |
list_s3_buckets | 带有生命周期标志的桶S3 |
使用
| 工具 | 描述 |
|---|---|
get_ec2_utilization | 通过CloudWatch使用EC2实例的CPU |
get_rds_utilization 使用 RDS。 | |
get_ebs_utilization 使用 EBS。 | |
get_elb_utilization 使用 Load Balancer。 | |
get_nat_gateway_utilization 使用 NAT Gateway。 | |
get_multi_resource_utilization | 按使用桶分组的EC2+RDS |
使用多帐户
重要:您必须始终通过 client_id 调用工具时。服务器将承担客户端配置的相应角色。
示例: get_cost_and_usage
{
"client_id": "cuenta-produccion",
"date_range": {
"start_date": "2026-01-01",
"end_date": "2026-01-31"
},
"granularity": "MONTHLY",
"group_by": "SERVICE",
"metric": "UnblendedCost"
}______________________________________________________________________
成本验证和优化
验证如何工作
每次对Cost Explorer API的调用都会花费 $0.01。服务器在将请求发送到AWS之前对其进行验证。
本地验证(始终运行,不调用AWS):
- 日期格式(YYY-MM-DD)
- 日期范围逻辑(开始前结束)
- 粒度限制(最多14小时)
- 尺寸验证(服务、区域等)
- 过滤器结构验证(AND,OR,NOT运算符)
- 协议有效性(分组)
AWS验证(可选,默认禁用):
- 验证维度值是否存在(例如,“Amazon EC2”是有效的服务值)
- 验证标签值是否存在
成本估算
| 操作 | API调用 | 成本 |
|---|---|---|
| 简单成本查询 | 1 | $0.01 |
| 过滤器查询(验证已禁用) | 1 | $0.01 |
| 过滤查询(启用验证) | 2+ | $0.02+ |
| 成本比较 | 2 | $0.02 |
| 预测成本 | 1 | 0.01美元 |
______________________________________________________________________
绝望
运输方式
| 模式 | 描述 | 用例 |
|---|---|---|
stdio | 标准输入/输出 | 本地开发,CLI工具 |
sse | 服务器发送HTTP事件 | 客户端web,MCP检查器 |
streamable-http | 传输HTTP流媒体 | 推荐用于EKS |
地方发展
# Instalar dependencias
uv sync
# Ejecutar con fichero local
CLIENTS_CONFIG_PATH=./clients.json uv run cost-optimizer构建并推动ECR
aws ecr get-login-password --region eu-west-1 --profile
\
| docker login --username AWS --password-stdin \
675492141136.dkr.ecr.eu-west-1.amazonaws.com
docker build -t mcp-costoptimizer-aws .
docker tag mcp-costoptimizer-aws:latest \
675492141136.dkr.ecr.eu-west-1.amazonaws.com/mcp-costoptimizer-aws:latest
docker push \
675492141136.dkr.ecr.eu-west-1.amazonaws.com/mcp-costoptimizer-aws:latest在EKS中部署(通过Terraform/Terragrunt)
EKS的部署由REPO管理 innovation-account。需要:
- 在秘密管理器中创建秘密(一次):
aws secretsmanager create-secret \
--name "mcp-cost-optimizer/clients" \
--secret-string file://clients.json \
--region eu-west-1 --profile
- 手动创建角色
mcp-cost-optimizer在每个目标帐户中,具有中指定的权限和信任策略 需要IAM许可.
- 应用以下内容 :
cd config/eu-west-1/envs/cost-optimizer
terragrunt run-all applyMCP将在集群内部提供:
http://mcp.cost-optimizer.svc.cluster.local:8000______________________________________________________________________
测试
运行单元测试
uv sync --dev
source .venv/bin/activate
pytest tests/ -v -o "addopts="______________________________________________________________________
使用示例
成本分析
Muestrame los costes de AWS de los ultimos 3 meses agrupados por servicio
Desglosa los costes de S3 por clase de almacenamiento del primer trimestre de 2026
Cuales fueron mis costes de instancias reservadas vs bajo demanda en mayo?成本比较
Compara mis costes de AWS entre abril y mayo de 2026
Por que aumento mi factura de AWS en junio comparado con mayo?
Que causo el pico en mis costes de S3 el mes pasado?预测
Haz una prevision de mis costes de AWS para el proximo mes
Cual sera mi factura total de AWS para el resto de 2026?______________________________________________________________________
许可证
该项目是根据Apache 2.0许可证授权的-有关详细信息,请参阅许可证文件。
