cloudprice-mcp 0.2.1__tar.gz

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.
@@ -0,0 +1,19 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .venv/
5
+ venv/
6
+ .env
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ dist/
10
+ build/
11
+ *.cache
12
+ .DS_Store
13
+
14
+ # Reference spreadsheets (proprietary or third-party) — never commit
15
+ *.xlsx
16
+ *.xls
17
+ *.xlsm
18
+ *.csv
19
+ reference/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ali Albaker
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,173 @@
1
+ Metadata-Version: 2.4
2
+ Name: cloudprice-mcp
3
+ Version: 0.2.1
4
+ Summary: MCP server that compares on-demand compute + storage pricing across AWS, Azure, and GCP. Single-spec lookups plus bulk inventory and workload (compute + storage) compare.
5
+ Project-URL: Homepage, https://albaker.info
6
+ Project-URL: Repository, https://github.com/alialbaker/cloudprice-mcp
7
+ Project-URL: Issues, https://github.com/alialbaker/cloudprice-mcp/issues
8
+ Author-email: Ali Albaker <baker.ali.m@gmail.com>
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: aws,azure,cloud,finops,gcp,mcp,pricing
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: System :: Systems Administration
18
+ Requires-Python: >=3.10
19
+ Requires-Dist: httpx>=0.27.0
20
+ Requires-Dist: mcp>=1.0.0
21
+ Provides-Extra: dev
22
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
23
+ Requires-Dist: pytest-httpx>=0.30; extra == 'dev'
24
+ Requires-Dist: pytest>=8.0; extra == 'dev'
25
+ Requires-Dist: ruff>=0.5; extra == 'dev'
26
+ Description-Content-Type: text/markdown
27
+
28
+ # cloudprice-mcp
29
+
30
+ An MCP server that lets Claude (or any MCP-compatible client) compare on-demand **compute + storage** pricing across **AWS, Azure, and GCP** in real time.
31
+
32
+ Ask things like:
33
+
34
+ > *"How much does a 4 vCPU / 16 GB Linux VM cost across AWS, Azure, and GCP in us-east?"*
35
+
36
+ > *"I have a 3-tier deployment: 8 web (4/16), 12 app (8/32), 4 DB (16/64), each with a 200 GB SSD OS disk, plus 5 TB SSD shared and 50 TB HDD bulk. Compare AWS vs Azure vs GCP monthly cost."*
37
+
38
+ > *"What does an EC2 `t3.xlarge` cost per month?"*
39
+
40
+ Claude calls the right tool, you get a clean answer with per-row + per-cloud + combined totals. No console-clicking. No tab-switching between three pricing calculators.
41
+
42
+ ---
43
+
44
+ ## Install
45
+
46
+ ```bash
47
+ pip install cloudprice-mcp
48
+ ```
49
+
50
+ Or run without installing:
51
+
52
+ ```bash
53
+ pipx run cloudprice-mcp
54
+ ```
55
+
56
+ Python 3.10+ required.
57
+
58
+ ## Wire it into Claude Desktop
59
+
60
+ Edit your Claude Desktop config:
61
+
62
+ - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
63
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
64
+
65
+ Add:
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "cloudprice": {
71
+ "command": "cloudprice-mcp"
72
+ }
73
+ }
74
+ }
75
+ ```
76
+
77
+ Restart Claude Desktop. The seven tools below will show up as available.
78
+
79
+ ## Tools exposed
80
+
81
+ ### Single-spec lookups (v0.1)
82
+
83
+ | Tool | What it does |
84
+ |---|---|
85
+ | `get_aws_price` | Look up an EC2 instance type → vCPUs, memory, hourly + monthly USD (us-east-1) |
86
+ | `get_azure_price` | Look up an Azure VM size → vCPUs, memory, hourly + monthly USD (eastus) |
87
+ | `get_gcp_price` | Look up a GCP Compute Engine machine type → vCPUs, memory, hourly + monthly USD (us-east1) |
88
+ | `compare_clouds` | Given a target spec (vCPUs + GB), return the cheapest matching SKU on each cloud, sorted by monthly cost, with savings summary |
89
+
90
+ ### Bulk + workload compare (v0.2)
91
+
92
+ | Tool | What it does |
93
+ |---|---|
94
+ | `compare_compute_inventory` | Bulk-compare a list of compute workloads (each with vCPUs / memory / quantity / hours / optional OS disk). Returns per-row matches, per-cloud totals, and the cheapest cloud overall. |
95
+ | `compare_storage_inventory` | Bulk-compare a list of storage volumes (each with capacity / disk type / quantity). Returns per-row matches, per-cloud totals, and cheapest cloud. |
96
+ | `compare_workload` | Combined compute + storage in one call. Mirrors a two-sheet sizing workbook (compute BoM + storage BoM). Returns nested per-section breakdowns plus combined per-cloud totals. |
97
+
98
+ ### Example: compare_workload input shape
99
+
100
+ ```json
101
+ {
102
+ "compute": [
103
+ { "name": "web", "tier": "Web", "vcpus": 4, "memory_gb": 16, "quantity": 8, "os_disk_gb": 100, "os_disk_type": "ssd" },
104
+ { "name": "app", "tier": "App", "vcpus": 8, "memory_gb": 32, "quantity": 12, "os_disk_gb": 200, "os_disk_type": "ssd" },
105
+ { "name": "db", "tier": "DB", "vcpus": 16, "memory_gb": 64, "quantity": 4, "os_disk_gb": 500, "os_disk_type": "ssd" }
106
+ ],
107
+ "storage": [
108
+ { "name": "shared-fast", "tier": "DB", "capacity_gb": 5000, "disk_type": "ssd" },
109
+ { "name": "shared-bulk", "tier": "App", "capacity_gb": 50000, "disk_type": "hdd" }
110
+ ]
111
+ }
112
+ ```
113
+
114
+ ### Snapshots (v0.2.1)
115
+
116
+ `snapshot_count` on storage rows and `os_disk_snapshot_count` on compute rows **are now priced**. Snapshot rates per cloud per disk type are bundled (~$0.05/GB-mo for AWS/Azure, ~$0.026/GB-mo for GCP).
117
+
118
+ **Caveat — upper-bound estimate:** snapshots are priced as `snapshot_per_gb_month × full_capacity × quantity × snapshot_count`. Real-world snapshots are **incremental** (only changed blocks), so actual cost is typically 20-50% of this model's number. If snapshots dominate your total, ask the cloud's calculator for a tighter estimate.
119
+
120
+ `iops` and `throughput_mbs` on storage rows are still accepted as metadata only — not used for SKU matching in this release.
121
+
122
+ ### Reserved Instance / Savings Plan estimator (v0.2.1)
123
+
124
+ `compare_workload` accepts an optional `commitment` parameter:
125
+
126
+ | Value | Compute discount | Use case |
127
+ |---|---|---|
128
+ | `none` (default) | 0% | On-demand only |
129
+ | `1yr_no_upfront` | 30% | 1-year AWS Savings Plan / Azure RI / GCP CUD (no upfront) |
130
+ | `3yr_partial_upfront` | 50% | 3-year, partial upfront — typical "we know our baseline" deals |
131
+
132
+ Storage and snapshots are not discounted (most clouds don't offer meaningful storage commitments). Discount tiers are conservative averages — your actual rate depends on instance family, payment option, and region.
133
+
134
+ ## Pricing data
135
+
136
+ Prices are bundled as a curated dataset of common SKUs per cloud — VMs (≈45 SKUs across 3 clouds) and block storage (SSD + HDD per cloud) — sourced from the public AWS / Azure / GCP price lists. Each response includes an `as_of` date so you know how fresh the data is.
137
+
138
+ **A future release will add a live mode** that fetches prices directly from each cloud's public pricing API:
139
+ - AWS: [Price List Bulk API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html)
140
+ - Azure: [Retail Prices API](https://learn.microsoft.com/en-us/rest/api/cost-management/retail-prices/azure-retail-prices)
141
+ - GCP: [Cloud Billing Catalog API](https://cloud.google.com/billing/docs/reference/rest/v1/services.skus)
142
+
143
+ Track [issue #1](https://github.com/alialbaker/cloudprice-mcp/issues/1) for live mode and [issue #2](https://github.com/alialbaker/cloudprice-mcp/issues/2) for cross-cloud service mapping (RDS↔SQL DB↔Cloud SQL, etc.).
144
+
145
+ ## Develop locally
146
+
147
+ ```bash
148
+ git clone https://github.com/alialbaker/cloudprice-mcp.git
149
+ cd cloudprice-mcp
150
+ pip install -e ".[dev]"
151
+ pytest
152
+ ```
153
+
154
+ To point Claude Desktop at your dev copy, swap the `command` in the config:
155
+
156
+ ```json
157
+ {
158
+ "mcpServers": {
159
+ "cloudprice": {
160
+ "command": "python",
161
+ "args": ["-m", "cloudprice_mcp.server"]
162
+ }
163
+ }
164
+ }
165
+ ```
166
+
167
+ ## License
168
+
169
+ MIT — see [LICENSE](LICENSE).
170
+
171
+ ## Credits
172
+
173
+ Built by [Ali Albaker](https://albaker.info), Cloud Architect — runs a live three-cloud portfolio at ~$1.80/month across AWS, Azure, and GCP.
@@ -0,0 +1,146 @@
1
+ # cloudprice-mcp
2
+
3
+ An MCP server that lets Claude (or any MCP-compatible client) compare on-demand **compute + storage** pricing across **AWS, Azure, and GCP** in real time.
4
+
5
+ Ask things like:
6
+
7
+ > *"How much does a 4 vCPU / 16 GB Linux VM cost across AWS, Azure, and GCP in us-east?"*
8
+
9
+ > *"I have a 3-tier deployment: 8 web (4/16), 12 app (8/32), 4 DB (16/64), each with a 200 GB SSD OS disk, plus 5 TB SSD shared and 50 TB HDD bulk. Compare AWS vs Azure vs GCP monthly cost."*
10
+
11
+ > *"What does an EC2 `t3.xlarge` cost per month?"*
12
+
13
+ Claude calls the right tool, you get a clean answer with per-row + per-cloud + combined totals. No console-clicking. No tab-switching between three pricing calculators.
14
+
15
+ ---
16
+
17
+ ## Install
18
+
19
+ ```bash
20
+ pip install cloudprice-mcp
21
+ ```
22
+
23
+ Or run without installing:
24
+
25
+ ```bash
26
+ pipx run cloudprice-mcp
27
+ ```
28
+
29
+ Python 3.10+ required.
30
+
31
+ ## Wire it into Claude Desktop
32
+
33
+ Edit your Claude Desktop config:
34
+
35
+ - **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
36
+ - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
37
+
38
+ Add:
39
+
40
+ ```json
41
+ {
42
+ "mcpServers": {
43
+ "cloudprice": {
44
+ "command": "cloudprice-mcp"
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ Restart Claude Desktop. The seven tools below will show up as available.
51
+
52
+ ## Tools exposed
53
+
54
+ ### Single-spec lookups (v0.1)
55
+
56
+ | Tool | What it does |
57
+ |---|---|
58
+ | `get_aws_price` | Look up an EC2 instance type → vCPUs, memory, hourly + monthly USD (us-east-1) |
59
+ | `get_azure_price` | Look up an Azure VM size → vCPUs, memory, hourly + monthly USD (eastus) |
60
+ | `get_gcp_price` | Look up a GCP Compute Engine machine type → vCPUs, memory, hourly + monthly USD (us-east1) |
61
+ | `compare_clouds` | Given a target spec (vCPUs + GB), return the cheapest matching SKU on each cloud, sorted by monthly cost, with savings summary |
62
+
63
+ ### Bulk + workload compare (v0.2)
64
+
65
+ | Tool | What it does |
66
+ |---|---|
67
+ | `compare_compute_inventory` | Bulk-compare a list of compute workloads (each with vCPUs / memory / quantity / hours / optional OS disk). Returns per-row matches, per-cloud totals, and the cheapest cloud overall. |
68
+ | `compare_storage_inventory` | Bulk-compare a list of storage volumes (each with capacity / disk type / quantity). Returns per-row matches, per-cloud totals, and cheapest cloud. |
69
+ | `compare_workload` | Combined compute + storage in one call. Mirrors a two-sheet sizing workbook (compute BoM + storage BoM). Returns nested per-section breakdowns plus combined per-cloud totals. |
70
+
71
+ ### Example: compare_workload input shape
72
+
73
+ ```json
74
+ {
75
+ "compute": [
76
+ { "name": "web", "tier": "Web", "vcpus": 4, "memory_gb": 16, "quantity": 8, "os_disk_gb": 100, "os_disk_type": "ssd" },
77
+ { "name": "app", "tier": "App", "vcpus": 8, "memory_gb": 32, "quantity": 12, "os_disk_gb": 200, "os_disk_type": "ssd" },
78
+ { "name": "db", "tier": "DB", "vcpus": 16, "memory_gb": 64, "quantity": 4, "os_disk_gb": 500, "os_disk_type": "ssd" }
79
+ ],
80
+ "storage": [
81
+ { "name": "shared-fast", "tier": "DB", "capacity_gb": 5000, "disk_type": "ssd" },
82
+ { "name": "shared-bulk", "tier": "App", "capacity_gb": 50000, "disk_type": "hdd" }
83
+ ]
84
+ }
85
+ ```
86
+
87
+ ### Snapshots (v0.2.1)
88
+
89
+ `snapshot_count` on storage rows and `os_disk_snapshot_count` on compute rows **are now priced**. Snapshot rates per cloud per disk type are bundled (~$0.05/GB-mo for AWS/Azure, ~$0.026/GB-mo for GCP).
90
+
91
+ **Caveat — upper-bound estimate:** snapshots are priced as `snapshot_per_gb_month × full_capacity × quantity × snapshot_count`. Real-world snapshots are **incremental** (only changed blocks), so actual cost is typically 20-50% of this model's number. If snapshots dominate your total, ask the cloud's calculator for a tighter estimate.
92
+
93
+ `iops` and `throughput_mbs` on storage rows are still accepted as metadata only — not used for SKU matching in this release.
94
+
95
+ ### Reserved Instance / Savings Plan estimator (v0.2.1)
96
+
97
+ `compare_workload` accepts an optional `commitment` parameter:
98
+
99
+ | Value | Compute discount | Use case |
100
+ |---|---|---|
101
+ | `none` (default) | 0% | On-demand only |
102
+ | `1yr_no_upfront` | 30% | 1-year AWS Savings Plan / Azure RI / GCP CUD (no upfront) |
103
+ | `3yr_partial_upfront` | 50% | 3-year, partial upfront — typical "we know our baseline" deals |
104
+
105
+ Storage and snapshots are not discounted (most clouds don't offer meaningful storage commitments). Discount tiers are conservative averages — your actual rate depends on instance family, payment option, and region.
106
+
107
+ ## Pricing data
108
+
109
+ Prices are bundled as a curated dataset of common SKUs per cloud — VMs (≈45 SKUs across 3 clouds) and block storage (SSD + HDD per cloud) — sourced from the public AWS / Azure / GCP price lists. Each response includes an `as_of` date so you know how fresh the data is.
110
+
111
+ **A future release will add a live mode** that fetches prices directly from each cloud's public pricing API:
112
+ - AWS: [Price List Bulk API](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html)
113
+ - Azure: [Retail Prices API](https://learn.microsoft.com/en-us/rest/api/cost-management/retail-prices/azure-retail-prices)
114
+ - GCP: [Cloud Billing Catalog API](https://cloud.google.com/billing/docs/reference/rest/v1/services.skus)
115
+
116
+ Track [issue #1](https://github.com/alialbaker/cloudprice-mcp/issues/1) for live mode and [issue #2](https://github.com/alialbaker/cloudprice-mcp/issues/2) for cross-cloud service mapping (RDS↔SQL DB↔Cloud SQL, etc.).
117
+
118
+ ## Develop locally
119
+
120
+ ```bash
121
+ git clone https://github.com/alialbaker/cloudprice-mcp.git
122
+ cd cloudprice-mcp
123
+ pip install -e ".[dev]"
124
+ pytest
125
+ ```
126
+
127
+ To point Claude Desktop at your dev copy, swap the `command` in the config:
128
+
129
+ ```json
130
+ {
131
+ "mcpServers": {
132
+ "cloudprice": {
133
+ "command": "python",
134
+ "args": ["-m", "cloudprice_mcp.server"]
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ ## License
141
+
142
+ MIT — see [LICENSE](LICENSE).
143
+
144
+ ## Credits
145
+
146
+ Built by [Ali Albaker](https://albaker.info), Cloud Architect — runs a live three-cloud portfolio at ~$1.80/month across AWS, Azure, and GCP.
@@ -0,0 +1,7 @@
1
+ {
2
+ "mcpServers": {
3
+ "cloudprice": {
4
+ "command": "cloudprice-mcp"
5
+ }
6
+ }
7
+ }
@@ -0,0 +1,52 @@
1
+ [project]
2
+ name = "cloudprice-mcp"
3
+ version = "0.2.1"
4
+ description = "MCP server that compares on-demand compute + storage pricing across AWS, Azure, and GCP. Single-spec lookups plus bulk inventory and workload (compute + storage) compare."
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ license = { text = "MIT" }
8
+ authors = [{ name = "Ali Albaker", email = "baker.ali.m@gmail.com" }]
9
+ keywords = ["mcp", "cloud", "pricing", "aws", "azure", "gcp", "finops"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "License :: OSI Approved :: MIT License",
13
+ "Programming Language :: Python :: 3.10",
14
+ "Programming Language :: Python :: 3.11",
15
+ "Programming Language :: Python :: 3.12",
16
+ "Topic :: System :: Systems Administration",
17
+ ]
18
+ dependencies = [
19
+ "mcp>=1.0.0",
20
+ "httpx>=0.27.0",
21
+ ]
22
+
23
+ [project.optional-dependencies]
24
+ dev = [
25
+ "pytest>=8.0",
26
+ "pytest-asyncio>=0.23",
27
+ "pytest-httpx>=0.30",
28
+ "ruff>=0.5",
29
+ ]
30
+
31
+ [project.scripts]
32
+ cloudprice-mcp = "cloudprice_mcp.server:main"
33
+
34
+ [project.urls]
35
+ Homepage = "https://albaker.info"
36
+ Repository = "https://github.com/alialbaker/cloudprice-mcp"
37
+ Issues = "https://github.com/alialbaker/cloudprice-mcp/issues"
38
+
39
+ [build-system]
40
+ requires = ["hatchling"]
41
+ build-backend = "hatchling.build"
42
+
43
+ [tool.hatch.build.targets.wheel]
44
+ packages = ["src/cloudprice_mcp"]
45
+
46
+ [tool.ruff]
47
+ line-length = 100
48
+ target-version = "py310"
49
+
50
+ [tool.pytest.ini_options]
51
+ asyncio_mode = "auto"
52
+ testpaths = ["tests"]
@@ -0,0 +1 @@
1
+ __version__ = "0.2.1"