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.
- cloudprice_mcp-0.2.1/.gitignore +19 -0
- cloudprice_mcp-0.2.1/LICENSE +21 -0
- cloudprice_mcp-0.2.1/PKG-INFO +173 -0
- cloudprice_mcp-0.2.1/README.md +146 -0
- cloudprice_mcp-0.2.1/examples/claude_desktop_config.json +7 -0
- cloudprice_mcp-0.2.1/pyproject.toml +52 -0
- cloudprice_mcp-0.2.1/src/cloudprice_mcp/__init__.py +1 -0
- cloudprice_mcp-0.2.1/src/cloudprice_mcp/compare.py +334 -0
- cloudprice_mcp-0.2.1/src/cloudprice_mcp/data/__init__.py +0 -0
- cloudprice_mcp-0.2.1/src/cloudprice_mcp/data/prices.json +77 -0
- cloudprice_mcp-0.2.1/src/cloudprice_mcp/pricing.py +144 -0
- cloudprice_mcp-0.2.1/src/cloudprice_mcp/server.py +348 -0
- cloudprice_mcp-0.2.1/tests/__init__.py +0 -0
- cloudprice_mcp-0.2.1/tests/test_compare.py +253 -0
- cloudprice_mcp-0.2.1/tests/test_pricing.py +76 -0
|
@@ -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,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"
|