cloud-cost-mcp 1.1.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.
- package/LICENSE +190 -0
- package/NOTICE +15 -0
- package/README.md +232 -0
- package/dist/data/bundled/aws-pricing.json +379 -0
- package/dist/data/bundled/azure-pricing.json +367 -0
- package/dist/data/bundled/gcp-pricing.json +383 -0
- package/dist/data/bundled/oci-pricing.json +290 -0
- package/dist/data/cache.d.ts +53 -0
- package/dist/data/cache.d.ts.map +1 -0
- package/dist/data/cache.js +95 -0
- package/dist/data/cache.js.map +1 -0
- package/dist/data/fetchers/aws.d.ts +65 -0
- package/dist/data/fetchers/aws.d.ts.map +1 -0
- package/dist/data/fetchers/aws.js +298 -0
- package/dist/data/fetchers/aws.js.map +1 -0
- package/dist/data/fetchers/azure.d.ts +83 -0
- package/dist/data/fetchers/azure.d.ts.map +1 -0
- package/dist/data/fetchers/azure.js +369 -0
- package/dist/data/fetchers/azure.js.map +1 -0
- package/dist/data/fetchers/gcp.d.ts +44 -0
- package/dist/data/fetchers/gcp.d.ts.map +1 -0
- package/dist/data/fetchers/gcp.js +182 -0
- package/dist/data/fetchers/gcp.js.map +1 -0
- package/dist/data/fetchers/oci.d.ts +65 -0
- package/dist/data/fetchers/oci.d.ts.map +1 -0
- package/dist/data/fetchers/oci.js +130 -0
- package/dist/data/fetchers/oci.js.map +1 -0
- package/dist/data/loader.d.ts +56 -0
- package/dist/data/loader.d.ts.map +1 -0
- package/dist/data/loader.js +149 -0
- package/dist/data/loader.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +715 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/calculator.d.ts +36 -0
- package/dist/tools/calculator.d.ts.map +1 -0
- package/dist/tools/calculator.js +271 -0
- package/dist/tools/calculator.js.map +1 -0
- package/dist/tools/compare.d.ts +64 -0
- package/dist/tools/compare.d.ts.map +1 -0
- package/dist/tools/compare.js +243 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/types.d.ts +171 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Cost MCP - Cross-Cloud Comparison Tools
|
|
3
|
+
* Core comparison logic for compute, storage, egress, and Kubernetes
|
|
4
|
+
*/
|
|
5
|
+
import { getAllComputeInstances, getAllStorageOptions, getAllEgressPricing, getAllKubernetesPricing, } from '../data/loader.js';
|
|
6
|
+
/**
|
|
7
|
+
* Compare compute instances across all cloud providers
|
|
8
|
+
* Finds instances that match the specified vCPU and memory requirements
|
|
9
|
+
*/
|
|
10
|
+
export function compareCompute(query) {
|
|
11
|
+
const allInstances = getAllComputeInstances();
|
|
12
|
+
// Handle missing parameters gracefully
|
|
13
|
+
const vcpus = query.vcpus || 0;
|
|
14
|
+
const memoryGB = query.memoryGB || 0;
|
|
15
|
+
// Find matching instances (within 50% of requested specs)
|
|
16
|
+
const vcpuMin = vcpus * 0.5;
|
|
17
|
+
const vcpuMax = vcpus * 1.5;
|
|
18
|
+
const memMin = memoryGB * 0.5;
|
|
19
|
+
const memMax = memoryGB * 1.5;
|
|
20
|
+
let matches = allInstances.filter(instance => {
|
|
21
|
+
const vcpuMatch = instance.vcpus >= vcpuMin && instance.vcpus <= vcpuMax;
|
|
22
|
+
const memMatch = instance.memoryGB >= memMin && instance.memoryGB <= memMax;
|
|
23
|
+
return vcpuMatch && memMatch;
|
|
24
|
+
});
|
|
25
|
+
// Apply category filter if specified
|
|
26
|
+
// Special case: 'arm' category filters by architecture
|
|
27
|
+
if (query.category) {
|
|
28
|
+
if (query.category === 'arm') {
|
|
29
|
+
matches = matches.filter(i => i.architecture === 'arm');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
matches = matches.filter(i => i.category === query.category);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Sort by monthly price
|
|
36
|
+
matches.sort((a, b) => a.monthlyPrice - b.monthlyPrice);
|
|
37
|
+
// Find cheapest
|
|
38
|
+
const cheapest = matches.length > 0 ? matches[0] : null;
|
|
39
|
+
// Calculate savings vs AWS baseline
|
|
40
|
+
const awsInstance = matches.find(i => i.provider === 'aws');
|
|
41
|
+
let savingsVsAWS;
|
|
42
|
+
if (cheapest && awsInstance && cheapest.provider !== 'aws') {
|
|
43
|
+
savingsVsAWS = Math.round(((awsInstance.monthlyPrice - cheapest.monthlyPrice) / awsInstance.monthlyPrice) * 100);
|
|
44
|
+
}
|
|
45
|
+
// Generate summary
|
|
46
|
+
let summary = `Found ${matches.length} matching instances for ~${vcpus} vCPUs and ~${memoryGB}GB RAM.`;
|
|
47
|
+
if (cheapest) {
|
|
48
|
+
summary += ` Cheapest: ${cheapest.provider.toUpperCase()} ${cheapest.name} at $${cheapest.monthlyPrice.toFixed(2)}/month.`;
|
|
49
|
+
if (savingsVsAWS && savingsVsAWS > 0) {
|
|
50
|
+
summary += ` ${savingsVsAWS}% cheaper than AWS equivalent.`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
query,
|
|
55
|
+
matches: matches.slice(0, 20), // Return top 20
|
|
56
|
+
cheapest,
|
|
57
|
+
summary,
|
|
58
|
+
savingsVsAWS,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compare storage pricing across all cloud providers
|
|
63
|
+
*/
|
|
64
|
+
export function compareStorage(query) {
|
|
65
|
+
const allStorage = getAllStorageOptions();
|
|
66
|
+
// Filter by tier if specified
|
|
67
|
+
let matches = allStorage;
|
|
68
|
+
if (query.tier) {
|
|
69
|
+
matches = matches.filter(s => s.tier === query.tier);
|
|
70
|
+
}
|
|
71
|
+
// Filter by type if specified
|
|
72
|
+
if (query.type) {
|
|
73
|
+
matches = matches.filter(s => s.type === query.type);
|
|
74
|
+
}
|
|
75
|
+
// Calculate monthly cost for each option
|
|
76
|
+
const monthlyEstimates = matches.map(storage => ({
|
|
77
|
+
provider: storage.provider,
|
|
78
|
+
name: storage.name,
|
|
79
|
+
monthlyCost: storage.pricePerGBMonth * query.sizeGB,
|
|
80
|
+
}));
|
|
81
|
+
// Sort by cost
|
|
82
|
+
monthlyEstimates.sort((a, b) => a.monthlyCost - b.monthlyCost);
|
|
83
|
+
// Find cheapest storage option
|
|
84
|
+
const cheapestEstimate = monthlyEstimates[0];
|
|
85
|
+
const cheapest = cheapestEstimate
|
|
86
|
+
? matches.find(s => s.provider === cheapestEstimate.provider && s.name === cheapestEstimate.name) || null
|
|
87
|
+
: null;
|
|
88
|
+
// Generate summary
|
|
89
|
+
const tierStr = query.tier ? ` (${query.tier} tier)` : '';
|
|
90
|
+
const typeStr = query.type ? ` ${query.type}` : '';
|
|
91
|
+
let summary = `Storage comparison for ${query.sizeGB}GB${typeStr}${tierStr}.`;
|
|
92
|
+
if (cheapestEstimate) {
|
|
93
|
+
summary += ` Cheapest: ${cheapestEstimate.provider.toUpperCase()} ${cheapestEstimate.name} at $${cheapestEstimate.monthlyCost.toFixed(2)}/month.`;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
query,
|
|
97
|
+
matches: matches.slice(0, 20),
|
|
98
|
+
cheapest,
|
|
99
|
+
monthlyEstimates: monthlyEstimates.slice(0, 20),
|
|
100
|
+
summary,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Compare data egress costs across all cloud providers
|
|
105
|
+
* This is where OCI really shines with 10TB free egress
|
|
106
|
+
*/
|
|
107
|
+
export function compareEgress(query) {
|
|
108
|
+
const allEgress = getAllEgressPricing();
|
|
109
|
+
const estimates = allEgress.map(egress => {
|
|
110
|
+
const { provider, freeGBPerMonth, tiers } = egress;
|
|
111
|
+
// Calculate billable GB
|
|
112
|
+
const billableGB = Math.max(0, query.monthlyGB - freeGBPerMonth);
|
|
113
|
+
// Calculate cost based on tiers
|
|
114
|
+
let monthlyCost = 0;
|
|
115
|
+
let remainingGB = billableGB;
|
|
116
|
+
for (const tier of tiers) {
|
|
117
|
+
if (remainingGB <= 0)
|
|
118
|
+
break;
|
|
119
|
+
const gbInTier = tier.upToGB === -1
|
|
120
|
+
? remainingGB
|
|
121
|
+
: Math.min(remainingGB, tier.upToGB - freeGBPerMonth);
|
|
122
|
+
if (gbInTier > 0) {
|
|
123
|
+
monthlyCost += gbInTier * tier.pricePerGB;
|
|
124
|
+
remainingGB -= gbInTier;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Build breakdown string
|
|
128
|
+
let breakdown = `${freeGBPerMonth.toLocaleString()}GB free`;
|
|
129
|
+
if (billableGB > 0) {
|
|
130
|
+
breakdown += `, ${billableGB.toLocaleString()}GB billed at tiered rates`;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
provider,
|
|
134
|
+
monthlyCost,
|
|
135
|
+
breakdown,
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
// Sort by cost
|
|
139
|
+
estimates.sort((a, b) => a.monthlyCost - b.monthlyCost);
|
|
140
|
+
const cheapest = estimates[0].provider;
|
|
141
|
+
// Generate summary highlighting OCI advantage
|
|
142
|
+
const ociEstimate = estimates.find(e => e.provider === 'oci');
|
|
143
|
+
const awsEstimate = estimates.find(e => e.provider === 'aws');
|
|
144
|
+
let summary = `Egress comparison for ${query.monthlyGB.toLocaleString()}GB/month. `;
|
|
145
|
+
summary += `Cheapest: ${cheapest.toUpperCase()} at $${estimates[0].monthlyCost.toFixed(2)}/month.`;
|
|
146
|
+
if (ociEstimate && awsEstimate && ociEstimate.monthlyCost < awsEstimate.monthlyCost) {
|
|
147
|
+
const savings = awsEstimate.monthlyCost - ociEstimate.monthlyCost;
|
|
148
|
+
summary += ` OCI saves $${savings.toFixed(2)}/month vs AWS (10TB free egress!).`;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
query,
|
|
152
|
+
estimates,
|
|
153
|
+
cheapest,
|
|
154
|
+
summary,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Compare Kubernetes pricing across providers
|
|
159
|
+
*/
|
|
160
|
+
export function compareKubernetes(options) {
|
|
161
|
+
const k8sPricing = getAllKubernetesPricing();
|
|
162
|
+
const computeResult = compareCompute({
|
|
163
|
+
vcpus: options.nodeVcpus,
|
|
164
|
+
memoryGB: options.nodeMemoryGB,
|
|
165
|
+
});
|
|
166
|
+
const estimates = [];
|
|
167
|
+
const providers = ['aws', 'azure', 'gcp', 'oci'];
|
|
168
|
+
for (const provider of providers) {
|
|
169
|
+
const k8s = k8sPricing[provider];
|
|
170
|
+
if (!k8s)
|
|
171
|
+
continue;
|
|
172
|
+
// Find worker node cost for this provider
|
|
173
|
+
const workerNode = computeResult.matches.find(m => m.provider === provider);
|
|
174
|
+
const workerNodeCost = workerNode
|
|
175
|
+
? workerNode.monthlyPrice * options.nodeCount
|
|
176
|
+
: 0;
|
|
177
|
+
estimates.push({
|
|
178
|
+
provider,
|
|
179
|
+
controlPlaneCost: k8s.controlPlaneMonthly,
|
|
180
|
+
workerNodeCost,
|
|
181
|
+
totalMonthlyCost: k8s.controlPlaneMonthly + workerNodeCost,
|
|
182
|
+
notes: k8s.notes || '',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
estimates.sort((a, b) => a.totalMonthlyCost - b.totalMonthlyCost);
|
|
186
|
+
const cheapest = estimates[0].provider;
|
|
187
|
+
let summary = `Kubernetes cluster comparison: ${options.nodeCount} nodes × ${options.nodeVcpus} vCPUs × ${options.nodeMemoryGB}GB. `;
|
|
188
|
+
summary += `Cheapest: ${cheapest.toUpperCase()} at $${estimates[0].totalMonthlyCost.toFixed(2)}/month.`;
|
|
189
|
+
// Highlight free control planes
|
|
190
|
+
const freeControlPlane = estimates.filter(e => e.controlPlaneCost === 0);
|
|
191
|
+
if (freeControlPlane.length > 0) {
|
|
192
|
+
summary += ` Free control plane: ${freeControlPlane.map(e => e.provider.toUpperCase()).join(', ')}.`;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
estimates,
|
|
196
|
+
cheapest,
|
|
197
|
+
summary,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Find the cheapest provider for given compute specs
|
|
202
|
+
*/
|
|
203
|
+
export function findCheapestCompute(options) {
|
|
204
|
+
const result = compareCompute(options);
|
|
205
|
+
const providers = ['aws', 'azure', 'gcp', 'oci'];
|
|
206
|
+
const allOptions = providers.map(provider => ({
|
|
207
|
+
provider,
|
|
208
|
+
instance: result.matches.find(m => m.provider === provider) || null,
|
|
209
|
+
}));
|
|
210
|
+
return {
|
|
211
|
+
cheapest: result.cheapest,
|
|
212
|
+
allOptions,
|
|
213
|
+
summary: result.summary,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get storage pricing summary by tier
|
|
218
|
+
*/
|
|
219
|
+
export function getStoragePricingSummary(sizeGB) {
|
|
220
|
+
const tiers = ['hot', 'cool', 'cold', 'archive'];
|
|
221
|
+
const byTier = {
|
|
222
|
+
hot: [],
|
|
223
|
+
cool: [],
|
|
224
|
+
cold: [],
|
|
225
|
+
archive: [],
|
|
226
|
+
};
|
|
227
|
+
for (const tier of tiers) {
|
|
228
|
+
const result = compareStorage({ sizeGB, tier });
|
|
229
|
+
byTier[tier] = result.monthlyEstimates;
|
|
230
|
+
}
|
|
231
|
+
// Generate recommendation
|
|
232
|
+
const hotCheapest = byTier.hot[0];
|
|
233
|
+
const archiveCheapest = byTier.archive[0];
|
|
234
|
+
let recommendation = `For ${sizeGB}GB frequently accessed data, use ${hotCheapest?.provider.toUpperCase()} ${hotCheapest?.name} ($${hotCheapest?.monthlyCost.toFixed(2)}/mo).`;
|
|
235
|
+
if (archiveCheapest) {
|
|
236
|
+
recommendation += ` For archival, use ${archiveCheapest.provider.toUpperCase()} ${archiveCheapest.name} ($${archiveCheapest.monthlyCost.toFixed(2)}/mo).`;
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
byTier,
|
|
240
|
+
recommendation,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Cost MCP - Unified Type Definitions
|
|
3
|
+
* Consistent types across AWS, Azure, GCP, and OCI
|
|
4
|
+
*/
|
|
5
|
+
export type CloudProvider = 'aws' | 'azure' | 'gcp' | 'oci';
|
|
6
|
+
export type ComputeCategory = 'general' | 'compute' | 'memory' | 'storage' | 'gpu' | 'arm';
|
|
7
|
+
export type StorageTier = 'hot' | 'cool' | 'cold' | 'archive';
|
|
8
|
+
export interface PricingMetadata {
|
|
9
|
+
provider: CloudProvider;
|
|
10
|
+
lastUpdated: string;
|
|
11
|
+
source: string;
|
|
12
|
+
version: string;
|
|
13
|
+
totalProducts: number;
|
|
14
|
+
currency: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ComputeInstance {
|
|
17
|
+
provider: CloudProvider;
|
|
18
|
+
name: string;
|
|
19
|
+
displayName?: string;
|
|
20
|
+
vcpus: number;
|
|
21
|
+
memoryGB: number;
|
|
22
|
+
hourlyPrice: number;
|
|
23
|
+
monthlyPrice: number;
|
|
24
|
+
region: string;
|
|
25
|
+
category: ComputeCategory;
|
|
26
|
+
architecture?: 'x86' | 'arm';
|
|
27
|
+
gpuCount?: number;
|
|
28
|
+
gpuType?: string;
|
|
29
|
+
notes?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface StoragePricing {
|
|
32
|
+
provider: CloudProvider;
|
|
33
|
+
name: string;
|
|
34
|
+
type: 'object' | 'block' | 'file' | 'archive';
|
|
35
|
+
tier: StorageTier;
|
|
36
|
+
pricePerGBMonth: number;
|
|
37
|
+
region: string;
|
|
38
|
+
redundancy?: string;
|
|
39
|
+
notes?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface EgressPricing {
|
|
42
|
+
provider: CloudProvider;
|
|
43
|
+
freeGBPerMonth: number;
|
|
44
|
+
tiers: EgressTier[];
|
|
45
|
+
notes?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface EgressTier {
|
|
48
|
+
upToGB: number;
|
|
49
|
+
pricePerGB: number;
|
|
50
|
+
}
|
|
51
|
+
export interface KubernetesPricing {
|
|
52
|
+
provider: CloudProvider;
|
|
53
|
+
name: string;
|
|
54
|
+
controlPlaneHourly: number;
|
|
55
|
+
controlPlaneMonthly: number;
|
|
56
|
+
workerNodeIncluded: boolean;
|
|
57
|
+
notes?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface DatabasePricing {
|
|
60
|
+
provider: CloudProvider;
|
|
61
|
+
name: string;
|
|
62
|
+
type: 'relational' | 'nosql' | 'serverless';
|
|
63
|
+
engine?: string;
|
|
64
|
+
vcpus?: number;
|
|
65
|
+
memoryGB?: number;
|
|
66
|
+
hourlyPrice: number;
|
|
67
|
+
monthlyPrice: number;
|
|
68
|
+
notes?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface ComputeComparisonQuery {
|
|
71
|
+
vcpus: number;
|
|
72
|
+
memoryGB: number;
|
|
73
|
+
category?: ComputeCategory;
|
|
74
|
+
region?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface ComputeComparisonResult {
|
|
77
|
+
query: ComputeComparisonQuery;
|
|
78
|
+
matches: ComputeInstance[];
|
|
79
|
+
cheapest: ComputeInstance | null;
|
|
80
|
+
summary: string;
|
|
81
|
+
savingsVsAWS?: number;
|
|
82
|
+
}
|
|
83
|
+
export interface StorageComparisonQuery {
|
|
84
|
+
sizeGB: number;
|
|
85
|
+
tier?: StorageTier;
|
|
86
|
+
type?: 'object' | 'block';
|
|
87
|
+
}
|
|
88
|
+
export interface StorageComparisonResult {
|
|
89
|
+
query: StorageComparisonQuery;
|
|
90
|
+
matches: StoragePricing[];
|
|
91
|
+
cheapest: StoragePricing | null;
|
|
92
|
+
monthlyEstimates: Array<{
|
|
93
|
+
provider: CloudProvider;
|
|
94
|
+
name: string;
|
|
95
|
+
monthlyCost: number;
|
|
96
|
+
}>;
|
|
97
|
+
summary: string;
|
|
98
|
+
}
|
|
99
|
+
export interface EgressComparisonQuery {
|
|
100
|
+
monthlyGB: number;
|
|
101
|
+
}
|
|
102
|
+
export interface EgressComparisonResult {
|
|
103
|
+
query: EgressComparisonQuery;
|
|
104
|
+
estimates: Array<{
|
|
105
|
+
provider: CloudProvider;
|
|
106
|
+
monthlyCost: number;
|
|
107
|
+
breakdown: string;
|
|
108
|
+
}>;
|
|
109
|
+
cheapest: CloudProvider;
|
|
110
|
+
summary: string;
|
|
111
|
+
}
|
|
112
|
+
export interface ProviderPricingData {
|
|
113
|
+
metadata: PricingMetadata;
|
|
114
|
+
compute: ComputeInstance[];
|
|
115
|
+
storage: StoragePricing[];
|
|
116
|
+
egress: EgressPricing;
|
|
117
|
+
kubernetes?: KubernetesPricing;
|
|
118
|
+
database?: DatabasePricing[];
|
|
119
|
+
}
|
|
120
|
+
export interface AllCloudPricing {
|
|
121
|
+
aws: ProviderPricingData;
|
|
122
|
+
azure: ProviderPricingData;
|
|
123
|
+
gcp: ProviderPricingData;
|
|
124
|
+
oci: ProviderPricingData;
|
|
125
|
+
}
|
|
126
|
+
export interface DataFreshnessInfo {
|
|
127
|
+
provider: CloudProvider;
|
|
128
|
+
lastUpdated: string;
|
|
129
|
+
ageInDays: number;
|
|
130
|
+
isStale: boolean;
|
|
131
|
+
source: string;
|
|
132
|
+
canRefresh: boolean;
|
|
133
|
+
}
|
|
134
|
+
export interface WorkloadSpec {
|
|
135
|
+
compute?: {
|
|
136
|
+
vcpus: number;
|
|
137
|
+
memoryGB: number;
|
|
138
|
+
count?: number;
|
|
139
|
+
};
|
|
140
|
+
storage?: {
|
|
141
|
+
objectGB?: number;
|
|
142
|
+
blockGB?: number;
|
|
143
|
+
};
|
|
144
|
+
egress?: {
|
|
145
|
+
monthlyGB: number;
|
|
146
|
+
};
|
|
147
|
+
kubernetes?: {
|
|
148
|
+
nodeCount: number;
|
|
149
|
+
nodeVcpus: number;
|
|
150
|
+
nodeMemoryGB: number;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export interface WorkloadCostEstimate {
|
|
154
|
+
provider: CloudProvider;
|
|
155
|
+
breakdown: Array<{
|
|
156
|
+
category: string;
|
|
157
|
+
item: string;
|
|
158
|
+
quantity: number;
|
|
159
|
+
unitPrice: number;
|
|
160
|
+
monthlyTotal: number;
|
|
161
|
+
}>;
|
|
162
|
+
totalMonthly: number;
|
|
163
|
+
notes: string[];
|
|
164
|
+
}
|
|
165
|
+
export interface WorkloadComparisonResult {
|
|
166
|
+
spec: WorkloadSpec;
|
|
167
|
+
estimates: WorkloadCostEstimate[];
|
|
168
|
+
cheapest: CloudProvider;
|
|
169
|
+
savingsSummary: string;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cloud-cost-mcp",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Multi-cloud pricing comparison MCP server for AWS, Azure, GCP, and OCI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"cloud-cost-mcp": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc && npm run copy-data",
|
|
13
|
+
"copy-data": "mkdir -p dist/data/bundled && cp src/data/bundled/*.json dist/data/bundled/",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"model-context-protocol",
|
|
21
|
+
"cloud",
|
|
22
|
+
"pricing",
|
|
23
|
+
"cost",
|
|
24
|
+
"aws",
|
|
25
|
+
"azure",
|
|
26
|
+
"gcp",
|
|
27
|
+
"oci",
|
|
28
|
+
"comparison",
|
|
29
|
+
"finops",
|
|
30
|
+
"claude"
|
|
31
|
+
],
|
|
32
|
+
"author": {
|
|
33
|
+
"name": "Jason Wilbur",
|
|
34
|
+
"url": "https://jasonwilbur.com"
|
|
35
|
+
},
|
|
36
|
+
"license": "Apache-2.0",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/jasonwilbur/cloud-cost-mcp"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18.0.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^20.10.0",
|
|
49
|
+
"typescript": "^5.3.0"
|
|
50
|
+
},
|
|
51
|
+
"files": [
|
|
52
|
+
"dist",
|
|
53
|
+
"README.md",
|
|
54
|
+
"LICENSE",
|
|
55
|
+
"NOTICE"
|
|
56
|
+
]
|
|
57
|
+
}
|