@jadenrazo/cloudcost-mcp 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  {
2
- "last_updated": "2025-01-15",
2
+ "last_updated": "2026-04-11",
3
3
  "source": "Google Cloud Pricing Calculator",
4
4
  "currency": "USD",
5
5
  "notes": "Bundled pricing data for offline/zero-auth usage"
@@ -1,13 +1,18 @@
1
1
  {
2
- "us-central1": { "pd-standard": 0.040, "pd-ssd": 0.170, "pd-balanced": 0.100 },
3
- "us-east1": { "pd-standard": 0.040, "pd-ssd": 0.170, "pd-balanced": 0.100 },
4
- "europe-west1": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110 },
5
- "asia-southeast1": { "pd-standard": 0.048, "pd-ssd": 0.204, "pd-balanced": 0.120 },
6
- "us-west1": { "pd-standard": 0.040, "pd-ssd": 0.170, "pd-balanced": 0.100 },
7
- "asia-northeast1": { "pd-standard": 0.046, "pd-ssd": 0.196, "pd-balanced": 0.115 },
8
- "asia-south1": { "pd-standard": 0.042, "pd-ssd": 0.179, "pd-balanced": 0.105 },
9
- "australia-southeast1": { "pd-standard": 0.047, "pd-ssd": 0.201, "pd-balanced": 0.118 },
10
- "europe-west2": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110 },
11
- "europe-west4": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110 },
12
- "northamerica-northeast1": { "pd-standard": 0.042, "pd-ssd": 0.179, "pd-balanced": 0.105 }
2
+ "us-central1": { "pd-standard": 0.040, "pd-ssd": 0.170, "pd-balanced": 0.100, "pd-extreme": 0.125 },
3
+ "us-east1": { "pd-standard": 0.040, "pd-ssd": 0.170, "pd-balanced": 0.100, "pd-extreme": 0.125 },
4
+ "us-east4": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
5
+ "us-west1": { "pd-standard": 0.040, "pd-ssd": 0.170, "pd-balanced": 0.100, "pd-extreme": 0.125 },
6
+ "us-west4": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
7
+ "europe-west1": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
8
+ "europe-west2": { "pd-standard": 0.048, "pd-ssd": 0.204, "pd-balanced": 0.120, "pd-extreme": 0.150 },
9
+ "europe-west3": { "pd-standard": 0.048, "pd-ssd": 0.204, "pd-balanced": 0.120, "pd-extreme": 0.150 },
10
+ "europe-west4": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
11
+ "europe-north1": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
12
+ "asia-southeast1": { "pd-standard": 0.048, "pd-ssd": 0.204, "pd-balanced": 0.120, "pd-extreme": 0.150 },
13
+ "asia-northeast1": { "pd-standard": 0.048, "pd-ssd": 0.204, "pd-balanced": 0.120, "pd-extreme": 0.150 },
14
+ "asia-south1": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
15
+ "australia-southeast1": { "pd-standard": 0.048, "pd-ssd": 0.204, "pd-balanced": 0.120, "pd-extreme": 0.150 },
16
+ "northamerica-northeast1": { "pd-standard": 0.044, "pd-ssd": 0.187, "pd-balanced": 0.110, "pd-extreme": 0.138 },
17
+ "southamerica-east1": { "pd-standard": 0.058, "pd-ssd": 0.245, "pd-balanced": 0.144, "pd-extreme": 0.180 }
13
18
  }
@@ -6,44 +6,102 @@
6
6
  "us-west-2": 1.0,
7
7
  "eu-west-1": 1.05,
8
8
  "eu-west-2": 1.07,
9
+ "eu-west-3": 1.08,
9
10
  "eu-central-1": 1.08,
11
+ "eu-central-2": 1.15,
12
+ "eu-south-1": 1.12,
13
+ "eu-south-2": 1.12,
14
+ "eu-north-1": 1.07,
10
15
  "ap-southeast-1": 1.10,
11
16
  "ap-southeast-2": 1.12,
17
+ "ap-southeast-3": 1.18,
18
+ "ap-southeast-4": 1.14,
12
19
  "ap-northeast-1": 1.12,
20
+ "ap-northeast-2": 1.10,
21
+ "ap-northeast-3": 1.12,
13
22
  "ap-south-1": 1.05,
23
+ "ap-south-2": 1.10,
24
+ "ap-east-1": 1.25,
14
25
  "sa-east-1": 1.20,
15
26
  "ca-central-1": 1.03,
27
+ "ca-west-1": 1.08,
16
28
  "me-south-1": 1.10,
17
- "af-south-1": 1.15
29
+ "me-central-1": 1.22,
30
+ "af-south-1": 1.15,
31
+ "il-central-1": 1.20
18
32
  },
19
33
  "azure": {
20
34
  "eastus": 1.0,
21
35
  "eastus2": 1.0,
22
36
  "westus": 1.0,
23
37
  "westus2": 1.0,
38
+ "westus3": 1.0,
39
+ "centralus": 1.0,
40
+ "northcentralus": 1.0,
41
+ "southcentralus": 1.0,
24
42
  "westeurope": 1.07,
25
43
  "northeurope": 1.05,
26
44
  "uksouth": 1.06,
45
+ "ukwest": 1.07,
46
+ "francecentral": 1.08,
47
+ "germanywestcentral": 1.08,
48
+ "swedencentral": 1.10,
49
+ "norwayeast": 1.10,
50
+ "polandcentral": 1.10,
51
+ "italynorth": 1.12,
27
52
  "southeastasia": 1.08,
28
53
  "eastasia": 1.10,
29
54
  "japaneast": 1.12,
55
+ "japanwest": 1.13,
56
+ "koreacentral": 1.10,
30
57
  "australiaeast": 1.10,
58
+ "australiasoutheast": 1.12,
31
59
  "brazilsouth": 1.18,
32
60
  "canadacentral": 1.03,
33
- "centralindia": 1.05
61
+ "canadaeast": 1.05,
62
+ "centralindia": 1.05,
63
+ "southindia": 1.07,
64
+ "qatarcentral": 1.22,
65
+ "israelcentral": 1.20,
66
+ "mexicocentral": 1.08
34
67
  },
35
68
  "gcp": {
36
69
  "us-central1": 1.0,
37
70
  "us-east1": 1.0,
71
+ "us-east4": 1.05,
72
+ "us-east5": 1.05,
38
73
  "us-west1": 1.02,
74
+ "us-west2": 1.05,
75
+ "us-west3": 1.07,
76
+ "us-west4": 1.08,
77
+ "us-south1": 1.05,
39
78
  "europe-west1": 1.05,
40
79
  "europe-west2": 1.08,
41
- "europe-west3": 1.08,
80
+ "europe-west3": 1.10,
81
+ "europe-west4": 1.06,
82
+ "europe-west6": 1.15,
83
+ "europe-west8": 1.10,
84
+ "europe-west9": 1.10,
85
+ "europe-north1": 1.08,
86
+ "europe-central2": 1.12,
42
87
  "asia-southeast1": 1.08,
88
+ "asia-southeast2": 1.12,
43
89
  "asia-east1": 1.08,
90
+ "asia-east2": 1.12,
44
91
  "asia-northeast1": 1.12,
92
+ "asia-northeast2": 1.14,
93
+ "asia-northeast3": 1.12,
94
+ "asia-south1": 1.05,
95
+ "asia-south2": 1.08,
45
96
  "australia-southeast1": 1.12,
97
+ "australia-southeast2": 1.14,
46
98
  "southamerica-east1": 1.20,
47
- "northamerica-northeast1": 1.03
99
+ "southamerica-west1": 1.18,
100
+ "northamerica-northeast1": 1.03,
101
+ "northamerica-northeast2": 1.05,
102
+ "me-west1": 1.22,
103
+ "me-central1": 1.25,
104
+ "me-central2": 1.25,
105
+ "africa-south1": 1.18
48
106
  }
49
107
  }
@@ -944,7 +944,27 @@ var EC2_BASE_PRICES = {
944
944
  "r7g.large": 0.107,
945
945
  "r7g.xlarge": 0.214,
946
946
  "r7g.2xlarge": 0.428,
947
- "r7g.4xlarge": 0.856
947
+ "r7g.4xlarge": 0.856,
948
+ // 8th-gen Graviton4 families
949
+ "m8g.large": 0.077,
950
+ "m8g.xlarge": 0.154,
951
+ "m8g.2xlarge": 0.308,
952
+ "m8g.4xlarge": 0.616,
953
+ "c8g.large": 0.068,
954
+ "c8g.xlarge": 0.136,
955
+ "c8g.2xlarge": 0.272,
956
+ "c8g.4xlarge": 0.544,
957
+ "r8g.large": 0.101,
958
+ "r8g.xlarge": 0.202,
959
+ "r8g.2xlarge": 0.404,
960
+ "r8g.4xlarge": 0.808,
961
+ // GPU instances
962
+ "g5.xlarge": 1.006,
963
+ "g5.2xlarge": 1.212,
964
+ "g5.4xlarge": 1.624,
965
+ "g5.8xlarge": 2.448,
966
+ "g5.12xlarge": 5.672,
967
+ "p4d.24xlarge": 32.7726
948
968
  };
949
969
  var RDS_BASE_PRICES = {
950
970
  "db.t3.micro": 0.017,
@@ -1010,7 +1030,12 @@ var SIZE_ORDER = [
1010
1030
  ];
1011
1031
  function regionMultiplier(region) {
1012
1032
  const multipliers = getRegionPriceMultipliers();
1013
- return multipliers.aws[region.toLowerCase()] ?? 1;
1033
+ const mult = multipliers.aws[region.toLowerCase()];
1034
+ if (mult === void 0) {
1035
+ logger.warn("region-multiplier: unknown AWS region, defaulting to 1.0x", { region });
1036
+ return 1;
1037
+ }
1038
+ return mult;
1014
1039
  }
1015
1040
 
1016
1041
  // src/pricing/aws/bulk-loader.ts
@@ -1641,7 +1666,16 @@ var VM_BASE_PRICES = {
1641
1666
  standard_nc8as_t4_v3: 0.752,
1642
1667
  standard_e2ps_v5: 0.101,
1643
1668
  standard_e4ps_v5: 0.202,
1644
- standard_e8ps_v5: 0.403
1669
+ standard_e8ps_v5: 0.403,
1670
+ // v6 series
1671
+ standard_d2s_v6: 0.096,
1672
+ standard_d4s_v6: 0.192,
1673
+ standard_d8s_v6: 0.384,
1674
+ standard_d16s_v6: 0.768,
1675
+ standard_e2s_v6: 0.126,
1676
+ standard_e4s_v6: 0.252,
1677
+ standard_e8s_v6: 0.504,
1678
+ standard_e16s_v6: 1.008
1645
1679
  };
1646
1680
  var DISK_BASE_PRICES = {
1647
1681
  premium_lrs: 0.132,
@@ -1678,7 +1712,12 @@ var CACHE_TTL2 = 86400;
1678
1712
  var RETAIL_API_BASE = "https://prices.azure.com/api/retail/prices";
1679
1713
  function regionMultiplier2(region) {
1680
1714
  const multipliers = getRegionPriceMultipliers();
1681
- return multipliers.azure[region.toLowerCase()] ?? 1;
1715
+ const mult = multipliers.azure[region.toLowerCase()];
1716
+ if (mult === void 0) {
1717
+ logger.warn("region-multiplier: unknown Azure region, defaulting to 1.0x", { region });
1718
+ return 1;
1719
+ }
1720
+ return mult;
1682
1721
  }
1683
1722
 
1684
1723
  // src/pricing/azure/retail-client.ts
@@ -2113,7 +2152,12 @@ var GKE_STANDARD_HOURLY = 0.1;
2113
2152
  var GKE_AUTOPILOT_VCPU_HOURLY = 0.0445;
2114
2153
  function regionMultiplier3(region) {
2115
2154
  const multipliers = getRegionPriceMultipliers();
2116
- return multipliers.gcp[region.toLowerCase()] ?? 1;
2155
+ const mult = multipliers.gcp[region.toLowerCase()];
2156
+ if (mult === void 0) {
2157
+ logger.warn("region-multiplier: unknown GCP region, defaulting to 1.0x", { region });
2158
+ return 1;
2159
+ }
2160
+ return mult;
2117
2161
  }
2118
2162
  var GcpBundledLoader = class {
2119
2163
  // -------------------------------------------------------------------------
@@ -3118,6 +3162,12 @@ var awsExtractors = {
3118
3162
  }
3119
3163
  return attrs;
3120
3164
  },
3165
+ aws_sagemaker_notebook_instance(block) {
3166
+ const attrs = {};
3167
+ if (str(block["instance_type"])) attrs.instance_type = str(block["instance_type"]);
3168
+ if (str(block["name"])) attrs.endpoint_name = str(block["name"]);
3169
+ return attrs;
3170
+ },
3121
3171
  aws_mq_broker(block) {
3122
3172
  const attrs = {};
3123
3173
  if (str(block["host_instance_type"])) attrs.instance_type = str(block["host_instance_type"]);
@@ -4073,7 +4123,7 @@ var ARM_TYPE_MAP = {
4073
4123
  "microsoft.compute/disks": "azurerm_managed_disk",
4074
4124
  "microsoft.dbforpostgresql/flexibleservers": "azurerm_postgresql_flexible_server",
4075
4125
  "microsoft.dbformysql/flexibleservers": "azurerm_mysql_flexible_server",
4076
- "microsoft.sql/servers": "azurerm_mssql_server",
4126
+ "microsoft.sql/servers": "azurerm_mssql_database",
4077
4127
  "microsoft.storage/storageaccounts": "azurerm_storage_account",
4078
4128
  "microsoft.network/loadbalancers": "azurerm_lb",
4079
4129
  "microsoft.network/natgateways": "azurerm_nat_gateway",
@@ -4333,7 +4383,7 @@ var PULUMI_TYPE_MAP = {
4333
4383
  type: "azurerm_kubernetes_cluster",
4334
4384
  provider: "azure"
4335
4385
  },
4336
- "azure:sql:Database": { type: "azurerm_mssql_server", provider: "azure" },
4386
+ "azure:sql:Database": { type: "azurerm_mssql_database", provider: "azure" },
4337
4387
  "azure:storage:Account": { type: "azurerm_storage_account", provider: "azure" },
4338
4388
  "azure:keyvault:KeyVault": { type: "azurerm_key_vault", provider: "azure" },
4339
4389
  "azure:dns:Zone": { type: "azurerm_dns_zone", provider: "azure" },
@@ -7717,7 +7767,7 @@ var DATABASE_TYPES = /* @__PURE__ */ new Set([
7717
7767
  "aws_db_instance",
7718
7768
  "azurerm_postgresql_flexible_server",
7719
7769
  "azurerm_mysql_flexible_server",
7720
- "azurerm_mssql_server",
7770
+ "azurerm_mssql_database",
7721
7771
  "google_sql_database_instance"
7722
7772
  ]);
7723
7773
  var BLOCK_STORAGE_TYPES = /* @__PURE__ */ new Set([
@@ -7801,7 +7851,11 @@ var MESSAGING_TYPES = /* @__PURE__ */ new Set([
7801
7851
  "azurerm_servicebus_namespace",
7802
7852
  "google_pubsub_topic"
7803
7853
  ]);
7804
- var ML_AI_TYPES = /* @__PURE__ */ new Set(["aws_sagemaker_endpoint", "google_vertex_ai_endpoint"]);
7854
+ var ML_AI_TYPES = /* @__PURE__ */ new Set([
7855
+ "aws_sagemaker_endpoint",
7856
+ "aws_sagemaker_notebook_instance",
7857
+ "google_vertex_ai_endpoint"
7858
+ ]);
7805
7859
  var MQ_BROKER_TYPES = /* @__PURE__ */ new Set(["aws_mq_broker"]);
7806
7860
  var EVENTHUB_TYPES = /* @__PURE__ */ new Set(["azurerm_eventhub_namespace"]);
7807
7861
  var PUBSUB_SUBSCRIPTION_TYPES = /* @__PURE__ */ new Set(["google_pubsub_subscription"]);
@@ -9338,4 +9392,4 @@ export {
9338
9392
  whatIfSchema,
9339
9393
  whatIf
9340
9394
  };
9341
- //# sourceMappingURL=chunk-VP34WG7Z.js.map
9395
+ //# sourceMappingURL=chunk-E7KOWAMW.js.map
package/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  loadConfig,
10
10
  optimizeCost,
11
11
  whatIf
12
- } from "./chunk-VP34WG7Z.js";
12
+ } from "./chunk-E7KOWAMW.js";
13
13
  import "./chunk-TRRAOOVF.js";
14
14
 
15
15
  // src/cli.ts
package/dist/index.js CHANGED
@@ -25,7 +25,7 @@ import {
25
25
  str,
26
26
  whatIf,
27
27
  whatIfSchema
28
- } from "./chunk-VP34WG7Z.js";
28
+ } from "./chunk-E7KOWAMW.js";
29
29
  import {
30
30
  getResourceEquivalents
31
31
  } from "./chunk-TRRAOOVF.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jadenrazo/cloudcost-mcp",
3
- "version": "0.4.0",
3
+ "version": "1.0.0",
4
4
  "description": "MCP server for multi-cloud cost analysis of Terraform, CloudFormation, Pulumi, and Bicep/ARM codebases",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -39,7 +39,10 @@
39
39
  "!dist/**/*.map",
40
40
  "data",
41
41
  "README.md",
42
- "LICENSE"
42
+ "LICENSE",
43
+ "STABILITY.md",
44
+ "MIGRATION.md",
45
+ "CHANGELOG.md"
43
46
  ],
44
47
  "main": "dist/index.js",
45
48
  "types": "dist/index.d.ts",
@@ -60,6 +63,7 @@
60
63
  "format:check": "prettier --check src test",
61
64
  "test:coverage": "vitest run --coverage",
62
65
  "audit": "npm audit --audit-level=high",
66
+ "refresh-pricing": "tsx scripts/refresh-pricing.ts",
63
67
  "clean": "rm -rf dist",
64
68
  "prepare": "npm run build"
65
69
  },
@@ -70,6 +74,12 @@
70
74
  "yaml": "^2.8.3",
71
75
  "zod": "^3.24.4"
72
76
  },
77
+ "overrides": {
78
+ "hono": "^4.12.12",
79
+ "@hono/node-server": "^1.19.13",
80
+ "path-to-regexp": "^8.4.0",
81
+ "vite": "^7.3.2"
82
+ },
73
83
  "devDependencies": {
74
84
  "@eslint/js": "^10.0.1",
75
85
  "@types/better-sqlite3": "^7.6.13",