Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Enables analysis of AWS costs and usage through the AWS Cost Explorer API, supporting multi-account architectures with role assumption and cost comparison, forecasting, and anomaly detection.

README.md

Cost Explorer MCP Server

Servidor MCP para analizar costes y uso de AWS a traves de la API de AWS Cost Explorer, disenado para despliegues en EKS con Pod Identity y asuncion de roles multi-cuenta.

Tabla de Contenidos

---

Funcionalidades

Analisis de costes y uso de AWS

  • Desglose detallado de costes por servicio, region y otras dimensiones
  • Consulta de datos historicos de costes para periodos de tiempo especificos
  • Filtrado de costes por dimensiones, etiquetas y categorias de coste

Comparacion de costes entre periodos

  • Uso de la funcionalidad de Cost Comparison de AWS Cost Explorer
  • Comparacion de costes entre dos periodos para identificar cambios y tendencias
  • Analisis de los principales factores de coste (top 10) para entender incrementos/decrementos

Prevision de costes futuros

  • Generacion de previsiones basadas en patrones de uso historicos
  • Predicciones con intervalos de confianza (80% o 95%)
  • Granularidad de prevision diaria y mensual

Arquitectura multi-cuenta

  • Soporte para multiples cuentas AWS con diferentes roles IAM
  • Gestion de sesiones thread-safe con cache LRU (maximo 300 sesiones)
  • Refresco automatico de tokens 5 minutos antes de su expiracion
  • Deduplicacion de peticiones concurrentes (una sola llamada STS por cuenta)

---

Arquitectura de Autenticacion

Como funciona

Este servidor esta disenado para ejecutarse en EKS, donde el pod obtiene credenciales via EKS Pod Identity, y para cada peticion asume un rol IAM especifico (cross-account) basado en el client_id.

Flujo de autenticacion:

  1. El pod obtiene credenciales base via EKS Pod Identity
  2. La configuracion de clientes se carga desde AWS Secrets Manager (en produccion) o desde un fichero clients.json local (en desarrollo)
  3. Para cada peticion de herramienta:
  • Se envia el client_id
  • El servidor busca el role_arn en la configuracion de clientes
  • El servidor llama a sts:AssumeRole hacia el rol correspondiente
  • Se crea un cliente de Cost Explorer (ce) y se cachea hasta la expiracion del token
  • Los tokens se refrescan automaticamente antes de expirar

Carga de configuracion de clientes

El servidor prioriza las fuentes en este orden:

  1. AWS Secrets Manager — si la variable CLIENTS_CONFIG_SECRET esta definida, carga la configuracion desde el secret indicado. La configuracion se cachea en memoria durante 5 minutos (configurable via CLIENTS_CONFIG_CACHE_TTL). Cuando se actualiza el secret, el servidor detecta el cambio automaticamente en el siguiente ciclo de cache sin necesidad de reinicio.
  1. Fichero local — si CLIENTS_CONFIG_SECRET no esta definida, busca clients.json en la ruta indicada por CLIENTS_CONFIG_PATH o en ubicaciones por defecto relativas al modulo. El fichero se recarga automaticamente cuando cambia (deteccion por mtime).

Prerequisitos

  • EKS con Pod Identity habilitado
  • Rol base (pod role): el rol IAM asignado al pod via Pod Identity, con permisos para:
  • sts:AssumeRole sobre cada ARN de rol de cuenta
  • secretsmanager:GetSecretValue sobre el secret de configuracion
  • Rol en cada cuenta target: permite la asuncion por el rol base

Gestion de concurrencia

El servidor maneja las peticiones concurrentes de forma segura:

  • Caches thread-safe: Todas las caches usan locks para prevenir condiciones de carrera
  • Deduplicacion de refresco: Si multiples peticiones necesitan refrescar el mismo token, solo se realiza una llamada STS
  • Eviccion LRU: Maximo 300 sesiones cacheadas con eviccion automatica de las menos usadas

Permisos IAM necesarios

Rol base (identidad del pod via Pod Identity): ``json { "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" } ] } ``

Rol en cada cuenta target (mcp-cost-optimizer): ``json { "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": "*" } ] } ``

Trust policy en cada rol de cuenta target: ``json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::BASE_ACCOUNT_ID:role/mcp-cost-optimizer-CLUSTER_ID" }, "Action": "sts:AssumeRole" } ] } ``

---

Configuracion

Configuracion multi-cuenta (clients.json)

El servidor utiliza el client_id para buscar el rol a asumir. La configuracion puede estar en AWS Secrets Manager o en un fichero local.

Ejemplo de configuracion

{
  "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)"
    }
  }
}

Actualizar la configuracion en produccion

aws secretsmanager put-secret-value \
  --secret-id "mcp-cost-optimizer/clients" \
  --secret-string file://clients.json \
  --region eu-west-1 --profile <profile>

El servidor detecta el cambio automaticamente en los proximos 5 minutos sin reinicio.

Variables de Entorno

| Variable | Requerida | Valor por defecto | Descripcion | |----------|-----------|-------------------|-------------| | CLIENTS_CONFIG_SECRET | No | - | ARN o nombre del secret en AWS Secrets Manager con la configuracion de clientes | | CLIENTS_CONFIG_PATH | No | - | Ruta al fichero clients.json (alternativa local a Secrets Manager) | | CLIENTS_CONFIG_CACHE_TTL | No | 300 | Segundos de cache para la configuracion de clientes desde Secrets Manager | | AWS_REGION | No | us-east-1 | Region AWS por defecto | | FASTMCP_LOG_LEVEL | No | WARNING | Nivel de logging (ERROR, WARNING, INFO, DEBUG) | | VALIDATE_FILTER_VALUES | No | false | Habilitar llamadas AWS para validacion de filtros | | MCP_TRANSPORT | No | stdio | Modo de transporte: stdio, sse, o streamable-http | | MCP_HOST | No | 0.0.0.0 (contenedor) | Host de escucha para transportes SSE/HTTP | | MCP_PORT | No | 8000 | Puerto de escucha para transportes SSE/HTTP | | MCP_MOUNT_PATH | No | - | Ruta de montaje opcional para transporte SSE/HTTP |

*Se requiere uno de los dos: CLIENTS_CONFIG_SECRET (produccion) o CLIENTS_CONFIG_PATH / fichero local (desarrollo).

---

Herramientas Disponibles

El servidor MCP de Cost Explorer proporciona las siguientes herramientas:

Utilidades

| Herramienta | Descripcion | |-------------|-------------| | get_today_date | Obtiene la fecha actual para determinar datos relevantes | | list_active_sessions | Lista todas las sesiones activas de Cost Explorer | | close_session | Cierra una sesion especifica y libera recursos |

Consultas de Costes

| Herramienta | Descripcion | |-------------|-------------| | get_dimension_values | Obtiene los valores disponibles para una dimension especifica (ej. SERVICE, REGION) | | get_tag_values | Obtiene los valores disponibles para una clave de etiqueta | | get_cost_and_usage | Recupera datos de costes y uso de AWS con opciones de filtrado y agrupacion | | get_cost_trend_with_anomalies | Tendencia de 6 meses + deteccion de anomalias en una sola llamada |

Analisis y Comparacion

| Herramienta | Descripcion | |-------------|-------------| | get_cost_and_usage_comparisons | Compara costes entre dos periodos para identificar cambios y tendencias | | get_cost_comparison_drivers | Analiza que provoco los cambios de coste entre periodos (top 10 factores) | | get_cost_forecast | Genera previsiones de costes basadas en patrones de uso historicos | | get_savings_commitments | Savings Plans y Reserved Instances actuales, cobertura y utilizacion |

Inventario

| Herramienta | Descripcion | |-------------|-------------| | describe_ec2_instances | Informacion compacta de instancias EC2 | | list_ec2_regions_with_instances | Regiones con instancias (running/stopped) | | describe_ebs_volumes | Volumenes EBS con deteccion de huerfanos | | describe_ebs_snapshots | Snapshots EBS con deteccion de huerfanos | | describe_rds_instances | Instancias RDS | | describe_load_balancers | Load Balancers | | describe_nat_gateways | NAT Gateways | | describe_elastic_ips | Elastic IPs | | list_s3_buckets | Buckets S3 con flags de lifecycle |

Utilizacion

| Herramienta | Descripcion | |-------------|-------------| | get_ec2_utilization | Utilizacion de CPU de instancias EC2 via CloudWatch | | get_rds_utilization | Utilizacion de instancias RDS | | get_ebs_utilization | Utilizacion de volumenes EBS | | get_elb_utilization | Utilizacion de Load Balancers | | get_nat_gateway_utilization | Utilizacion de NAT Gateways | | get_multi_resource_utilization | EC2 + RDS agrupados por buckets de utilizacion |

Uso Multi-Cuenta

Importante: Siempre hay que pasar el client_id al invocar una herramienta. El servidor asumira el rol correspondiente de la configuracion de clientes.

Ejemplo: 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"
}

---

Validacion y Optimizacion de Costes

Como funciona la validacion

Cada llamada a la API de Cost Explorer cuesta $0.01. El servidor realiza validaciones en las peticiones antes de enviarlas a AWS.

Validaciones locales (siempre se ejecutan, sin llamadas a AWS):

  • Formato de fecha (YYYY-MM-DD)
  • Logica de rango de fechas (inicio antes que fin)
  • Restricciones por granularidad (ej. HOURLY maximo 14 dias)
  • Validacion de claves de dimension (SERVICE, REGION, etc.)
  • Validacion de estructura de filtros (operadores And, Or, Not)
  • Validacion de agrupacion (group by)

Validaciones AWS (opcionales, deshabilitadas por defecto):

  • Validar que los valores de dimension existen (ej. "Amazon EC2" es un valor valido de SERVICE)
  • Validar que los valores de etiqueta existen

Estimacion de costes

| Operacion | Llamadas API | Coste | |-----------|-------------|-------| | Consulta simple de costes | 1 | $0.01 | | Consulta con filtro (validacion deshabilitada) | 1 | $0.01 | | Consulta con filtro (validacion habilitada) | 2+ | $0.02+ | | Comparacion de costes | 2 | $0.02 | | Prevision de costes | 1 | $0.01 |

---

Despliegue

Modos de Transporte

| Modo | Descripcion | Caso de uso | |------|-------------|-------------| | stdio | Entrada/salida estandar | Desarrollo local, herramientas CLI | | sse | Server-Sent Events sobre HTTP | Clientes web, MCP Inspector | | streamable-http | Transporte HTTP streamable | Recomendado para EKS |

Desarrollo local

# Instalar dependencias
uv sync

# Ejecutar con fichero local
CLIENTS_CONFIG_PATH=./clients.json uv run cost-optimizer

Build y push a ECR

aws ecr get-login-password --region eu-west-1 --profile <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

Despliegue en EKS (via Terraform/Terragrunt)

El despliegue en EKS se gestiona desde el repo innovation-account. Requiere:

  1. Crear el secret en Secrets Manager (una vez):
aws secretsmanager create-secret \
  --name "mcp-cost-optimizer/clients" \
  --secret-string file://clients.json \
  --region eu-west-1 --profile <profile>
  1. Crear manualmente el rol mcp-cost-optimizer en cada cuenta target con los permisos y trust policy indicados en Permisos IAM necesarios.
  1. Aplicar la infra:
cd config/eu-west-1/envs/cost-optimizer
terragrunt run-all apply

El MCP quedara disponible internamente en el cluster en: `` http://mcp.cost-optimizer.svc.cluster.local:8000 ``

---

Tests

Ejecutar tests unitarios

uv sync --dev
source .venv/bin/activate
pytest tests/ -v -o "addopts="

---

Ejemplos de Uso

Analisis de costes

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?

Comparacion de costes

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?

Previsiones

Haz una prevision de mis costes de AWS para el proximo mes
Cual sera mi factura total de AWS para el resto de 2026?

---

Licencia

Este proyecto esta licenciado bajo la Licencia Apache 2.0 - consulta el fichero LICENSE para mas detalles.

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Cloud & DevOps servers.