oci-pricing-mcp 1.2.1

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.
Files changed (49) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +24 -0
  3. package/README.md +299 -0
  4. package/dist/data/cache.d.ts +50 -0
  5. package/dist/data/cache.d.ts.map +1 -0
  6. package/dist/data/cache.js +90 -0
  7. package/dist/data/cache.js.map +1 -0
  8. package/dist/data/fetcher.d.ts +96 -0
  9. package/dist/data/fetcher.d.ts.map +1 -0
  10. package/dist/data/fetcher.js +232 -0
  11. package/dist/data/fetcher.js.map +1 -0
  12. package/dist/data/pricing-data.json +6162 -0
  13. package/dist/index.d.ts +21 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +582 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/tools/calculator.d.ts +17 -0
  18. package/dist/tools/calculator.d.ts.map +1 -0
  19. package/dist/tools/calculator.js +318 -0
  20. package/dist/tools/calculator.js.map +1 -0
  21. package/dist/tools/compute.d.ts +58 -0
  22. package/dist/tools/compute.d.ts.map +1 -0
  23. package/dist/tools/compute.js +172 -0
  24. package/dist/tools/compute.js.map +1 -0
  25. package/dist/tools/core.d.ts +70 -0
  26. package/dist/tools/core.d.ts.map +1 -0
  27. package/dist/tools/core.js +113 -0
  28. package/dist/tools/core.js.map +1 -0
  29. package/dist/tools/database.d.ts +66 -0
  30. package/dist/tools/database.d.ts.map +1 -0
  31. package/dist/tools/database.js +212 -0
  32. package/dist/tools/database.js.map +1 -0
  33. package/dist/tools/kubernetes.d.ts +65 -0
  34. package/dist/tools/kubernetes.d.ts.map +1 -0
  35. package/dist/tools/kubernetes.js +226 -0
  36. package/dist/tools/kubernetes.js.map +1 -0
  37. package/dist/tools/networking.d.ts +63 -0
  38. package/dist/tools/networking.d.ts.map +1 -0
  39. package/dist/tools/networking.js +248 -0
  40. package/dist/tools/networking.js.map +1 -0
  41. package/dist/tools/storage.d.ts +64 -0
  42. package/dist/tools/storage.d.ts.map +1 -0
  43. package/dist/tools/storage.js +175 -0
  44. package/dist/tools/storage.js.map +1 -0
  45. package/dist/types.d.ts +162 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +5 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +53 -0
@@ -0,0 +1,175 @@
1
+ /**
2
+ * OCI Storage Pricing Tools
3
+ */
4
+ import { getStoragePricing, getLastUpdated, getFreeTier } from '../data/fetcher.js';
5
+ /**
6
+ * List available OCI storage options with pricing
7
+ */
8
+ export function listStorageOptions(params = {}) {
9
+ let storage = getStoragePricing();
10
+ // Filter by type
11
+ if (params.type) {
12
+ const typeFilter = params.type.toLowerCase();
13
+ storage = storage.filter((s) => s.storageType?.toLowerCase().includes(typeFilter) ||
14
+ s.type?.toLowerCase().includes(typeFilter));
15
+ }
16
+ // Transform to user-friendly format
17
+ const options = storage.map((s) => ({
18
+ name: s.type,
19
+ type: s.storageType || 'general',
20
+ description: s.description,
21
+ pricePerGB: s.pricePerUnit,
22
+ monthlyPer100GB: Math.round(s.pricePerUnit * 100 * 100) / 100,
23
+ monthlyPerTB: Math.round(s.pricePerUnit * 1024 * 100) / 100,
24
+ performanceTier: s.performanceTier,
25
+ notes: s.notes,
26
+ }));
27
+ // Get free tier info
28
+ const freeTier = getFreeTier();
29
+ const freeTierNote = freeTier?.storage
30
+ ? `Always Free: ${freeTier.storage.blockVolume} block, ${freeTier.storage.objectStorage} object, ${freeTier.storage.archive} archive`
31
+ : 'Always Free tier available';
32
+ // Find cheapest and best performance
33
+ const sortedByPrice = [...options].sort((a, b) => a.pricePerGB - b.pricePerGB);
34
+ const cheapest = sortedByPrice[0];
35
+ const blockOptions = options.filter((o) => o.type.includes('block'));
36
+ const bestPerf = blockOptions.find((o) => o.performanceTier?.includes('Ultra'));
37
+ return {
38
+ options,
39
+ totalCount: options.length,
40
+ lastUpdated: getLastUpdated(),
41
+ freeTierNote,
42
+ comparison: {
43
+ cheapest: cheapest
44
+ ? `${cheapest.name} at $${cheapest.pricePerGB}/GB/month ($${cheapest.monthlyPerTB}/TB)`
45
+ : 'N/A',
46
+ bestPerformance: bestPerf
47
+ ? `${bestPerf.name} at $${bestPerf.pricePerGB}/GB/month (up to 225K IOPS)`
48
+ : 'Block Volume Ultra High Performance',
49
+ },
50
+ tips: [
51
+ 'Archive storage is 10x cheaper than standard object storage for long-term data',
52
+ 'Block Volume Balanced (10 VPU) is included at base price - no extra performance charge',
53
+ 'First 10 GB of Object Storage is free',
54
+ 'Consider Infrequent Access tier for data accessed less than monthly',
55
+ 'File Storage pricing is higher but provides NFS compatibility',
56
+ ],
57
+ };
58
+ }
59
+ export function calculateStorageCost(params) {
60
+ const storage = getStoragePricing();
61
+ const breakdown = [];
62
+ const notes = [];
63
+ // Block Volume
64
+ if (params.blockVolumeGB) {
65
+ let blockType = 'block-storage-balanced'; // Default
66
+ let tierName = 'Balanced';
67
+ switch (params.blockPerformanceTier) {
68
+ case 'basic':
69
+ blockType = 'block-storage-basic';
70
+ tierName = 'Lower Cost';
71
+ break;
72
+ case 'high':
73
+ blockType = 'block-storage-high-performance';
74
+ tierName = 'Higher Performance';
75
+ break;
76
+ case 'ultra':
77
+ blockType = 'block-storage-ultra-high';
78
+ tierName = 'Ultra High Performance';
79
+ break;
80
+ }
81
+ const blockPrice = storage.find((s) => s.type === blockType);
82
+ if (blockPrice) {
83
+ breakdown.push({
84
+ item: `Block Volume (${tierName})`,
85
+ gb: params.blockVolumeGB,
86
+ pricePerGB: blockPrice.pricePerUnit,
87
+ monthlyTotal: Math.round(blockPrice.pricePerUnit * params.blockVolumeGB * 100) / 100,
88
+ });
89
+ }
90
+ }
91
+ // Object Storage
92
+ if (params.objectStorageGB) {
93
+ let objectType = 'object-storage'; // Default standard
94
+ let tierName = 'Standard';
95
+ switch (params.objectStorageTier) {
96
+ case 'infrequent':
97
+ objectType = 'object-storage-ia';
98
+ tierName = 'Infrequent Access';
99
+ break;
100
+ case 'archive':
101
+ objectType = 'object-storage-archive';
102
+ tierName = 'Archive';
103
+ break;
104
+ }
105
+ const objectPrice = storage.find((s) => s.type === objectType);
106
+ if (objectPrice) {
107
+ breakdown.push({
108
+ item: `Object Storage (${tierName})`,
109
+ gb: params.objectStorageGB,
110
+ pricePerGB: objectPrice.pricePerUnit,
111
+ monthlyTotal: Math.round(objectPrice.pricePerUnit * params.objectStorageGB * 100) / 100,
112
+ });
113
+ }
114
+ if (params.objectStorageTier === 'archive') {
115
+ notes.push('Archive storage has 90-day minimum retention and ~1 hour restore time');
116
+ }
117
+ else if (params.objectStorageTier === 'infrequent') {
118
+ notes.push('Infrequent Access has 31-day minimum retention');
119
+ }
120
+ }
121
+ // File Storage
122
+ if (params.fileStorageGB) {
123
+ const filePrice = storage.find((s) => s.type === 'file-storage');
124
+ if (filePrice) {
125
+ breakdown.push({
126
+ item: 'File Storage',
127
+ gb: params.fileStorageGB,
128
+ pricePerGB: filePrice.pricePerUnit,
129
+ monthlyTotal: Math.round(filePrice.pricePerUnit * params.fileStorageGB * 100) / 100,
130
+ });
131
+ }
132
+ }
133
+ const totalMonthly = breakdown.reduce((sum, item) => sum + item.monthlyTotal, 0);
134
+ // Add free tier note
135
+ notes.push('First 200 GB block + 10 GB object + 10 GB archive included in Always Free tier');
136
+ return {
137
+ breakdown,
138
+ totalMonthly: Math.round(totalMonthly * 100) / 100,
139
+ notes,
140
+ };
141
+ }
142
+ /**
143
+ * Compare storage tiers for a given size
144
+ */
145
+ export function compareStorageTiers(sizeGB) {
146
+ const storage = getStoragePricing();
147
+ const comparisons = storage.map((s) => ({
148
+ tier: s.type,
149
+ type: s.storageType || 'general',
150
+ pricePerGB: s.pricePerUnit,
151
+ monthlyTotal: Math.round(s.pricePerUnit * sizeGB * 100) / 100,
152
+ useCase: getStorageUseCase(s.type),
153
+ }));
154
+ // Sort by price
155
+ comparisons.sort((a, b) => a.monthlyTotal - b.monthlyTotal);
156
+ return {
157
+ comparisons,
158
+ recommendation: `For ${sizeGB} GB: Archive ($${comparisons[0]?.monthlyTotal}/mo) for cold data, Object Storage Standard for frequent access, Block Volume for VM storage`,
159
+ };
160
+ }
161
+ function getStorageUseCase(type) {
162
+ const useCases = {
163
+ 'block-storage-basic': 'Dev/test environments, non-critical workloads',
164
+ 'block-storage-balanced': 'General purpose VM storage (default)',
165
+ 'block-storage-high-performance': 'Databases, transaction-heavy applications',
166
+ 'block-storage-ultra-high': 'High-performance databases, real-time analytics',
167
+ 'object-storage': 'Frequently accessed unstructured data, backups',
168
+ 'object-storage-ia': 'Infrequently accessed data (< 1x/month)',
169
+ 'object-storage-archive': 'Long-term retention, compliance archives',
170
+ 'file-storage': 'Shared NFS storage, legacy application migration',
171
+ 'boot-volume': 'VM operating system disks',
172
+ };
173
+ return useCases[type] || 'General storage';
174
+ }
175
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/tools/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiBpF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAmC,EAAE;IAWtE,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAElC,iBAAiB;IACjB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,GAAG,OAAO,CAAC,MAAM,CACtB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACjD,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC7C,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,MAAM,OAAO,GAAwB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;QAChC,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,UAAU,EAAE,CAAC,CAAC,YAAY;QAC1B,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;QAC7D,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG;QAC3D,eAAe,EAAG,CAAkC,CAAC,eAAe;QACpE,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,qBAAqB;IACrB,MAAM,QAAQ,GAAG,WAAW,EAA6F,CAAC;IAC1H,MAAM,YAAY,GAAG,QAAQ,EAAE,OAAO;QACpC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,WAAW,WAAW,QAAQ,CAAC,OAAO,CAAC,aAAa,YAAY,QAAQ,CAAC,OAAO,CAAC,OAAO,UAAU;QACrI,CAAC,CAAC,4BAA4B,CAAC;IAEjC,qCAAqC;IACrC,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAElC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhF,OAAO;QACL,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,WAAW,EAAE,cAAc,EAAE;QAC7B,YAAY;QACZ,UAAU,EAAE;YACV,QAAQ,EAAE,QAAQ;gBAChB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,UAAU,eAAe,QAAQ,CAAC,YAAY,MAAM;gBACvF,CAAC,CAAC,KAAK;YACT,eAAe,EAAE,QAAQ;gBACvB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,UAAU,6BAA6B;gBAC1E,CAAC,CAAC,qCAAqC;SAC1C;QACD,IAAI,EAAE;YACJ,gFAAgF;YAChF,wFAAwF;YACxF,uCAAuC;YACvC,qEAAqE;YACrE,+DAA+D;SAChE;KACF,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,oBAAoB,CAAC,MAAkC;IAKrE,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAkF,EAAE,CAAC;IACpG,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,eAAe;IACf,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,wBAAwB,CAAC,CAAC,UAAU;QACpD,IAAI,QAAQ,GAAG,UAAU,CAAC;QAE1B,QAAQ,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACpC,KAAK,OAAO;gBACV,SAAS,GAAG,qBAAqB,CAAC;gBAClC,QAAQ,GAAG,YAAY,CAAC;gBACxB,MAAM;YACR,KAAK,MAAM;gBACT,SAAS,GAAG,gCAAgC,CAAC;gBAC7C,QAAQ,GAAG,oBAAoB,CAAC;gBAChC,MAAM;YACR,KAAK,OAAO;gBACV,SAAS,GAAG,0BAA0B,CAAC;gBACvC,QAAQ,GAAG,wBAAwB,CAAC;gBACpC,MAAM;QACV,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE,CAAC;YACf,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,iBAAiB,QAAQ,GAAG;gBAClC,EAAE,EAAE,MAAM,CAAC,aAAa;gBACxB,UAAU,EAAE,UAAU,CAAC,YAAY;gBACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG;aACrF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,IAAI,UAAU,GAAG,gBAAgB,CAAC,CAAC,mBAAmB;QACtD,IAAI,QAAQ,GAAG,UAAU,CAAC;QAE1B,QAAQ,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACjC,KAAK,YAAY;gBACf,UAAU,GAAG,mBAAmB,CAAC;gBACjC,QAAQ,GAAG,mBAAmB,CAAC;gBAC/B,MAAM;YACR,KAAK,SAAS;gBACZ,UAAU,GAAG,wBAAwB,CAAC;gBACtC,QAAQ,GAAG,SAAS,CAAC;gBACrB,MAAM;QACV,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAC/D,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,mBAAmB,QAAQ,GAAG;gBACpC,EAAE,EAAE,MAAM,CAAC,eAAe;gBAC1B,UAAU,EAAE,WAAW,CAAC,YAAY;gBACpC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;aACxF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,MAAM,CAAC,iBAAiB,KAAK,YAAY,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACjE,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,EAAE,EAAE,MAAM,CAAC,aAAa;gBACxB,UAAU,EAAE,SAAS,CAAC,YAAY;gBAClC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG;aACpF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAEjF,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAE7F,OAAO;QACL,SAAS;QACT,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;QAClD,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAUhD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;QAChC,UAAU,EAAE,CAAC,CAAC,YAAY;QAC1B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG;QAC7D,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;KACnC,CAAC,CAAC,CAAC;IAEJ,gBAAgB;IAChB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAE5D,OAAO;QACL,WAAW;QACX,cAAc,EAAE,OAAO,MAAM,kBAAkB,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,8FAA8F;KAC1K,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,QAAQ,GAA2B;QACvC,qBAAqB,EAAE,+CAA+C;QACtE,wBAAwB,EAAE,sCAAsC;QAChE,gCAAgC,EAAE,2CAA2C;QAC7E,0BAA0B,EAAE,iDAAiD;QAC7E,gBAAgB,EAAE,gDAAgD;QAClE,mBAAmB,EAAE,yCAAyC;QAC9D,wBAAwB,EAAE,0CAA0C;QACpE,cAAc,EAAE,kDAAkD;QAClE,aAAa,EAAE,2BAA2B;KAC3C,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * OCI Pricing MCP Server - Type Definitions
3
+ */
4
+ export type OCIRegion = 'us-ashburn-1' | 'us-phoenix-1' | 'us-sanjose-1' | 'us-chicago-1' | 'ca-montreal-1' | 'ca-toronto-1' | 'eu-frankfurt-1' | 'eu-amsterdam-1' | 'eu-zurich-1' | 'eu-madrid-1' | 'eu-marseille-1' | 'eu-milan-1' | 'eu-paris-1' | 'eu-stockholm-1' | 'uk-london-1' | 'uk-cardiff-1' | 'ap-tokyo-1' | 'ap-osaka-1' | 'ap-seoul-1' | 'ap-chuncheon-1' | 'ap-mumbai-1' | 'ap-hyderabad-1' | 'ap-singapore-1' | 'ap-sydney-1' | 'ap-melbourne-1' | 'sa-saopaulo-1' | 'sa-santiago-1' | 'sa-vinhedo-1' | 'me-jeddah-1' | 'me-dubai-1' | 'af-johannesburg-1' | 'il-jerusalem-1';
5
+ export type OCIServiceCategory = 'compute' | 'storage' | 'database' | 'networking' | 'kubernetes' | 'analytics' | 'ai-ml' | 'security' | 'observability' | 'integration' | 'developer-services';
6
+ export type PricingUnit = 'OCPU per hour' | 'GB per month' | 'GB per hour' | 'instance per hour' | 'request' | 'GB transferred' | 'unit per hour' | 'node per hour';
7
+ export type ComputeShapeFamily = 'VM.Standard.E4.Flex' | 'VM.Standard.E5.Flex' | 'VM.Standard.A1.Flex' | 'VM.Standard3.Flex' | 'VM.Optimized3.Flex' | 'VM.DenseIO.E4.Flex' | 'BM.Standard.E4.128' | 'BM.Standard.E5.192' | 'BM.Standard.A1.160' | 'BM.GPU.A10.4' | 'BM.GPU.H100.8' | 'BM.GPU.A100-v2.8';
8
+ export type StorageType = 'block-volume' | 'block-volume-performance' | 'object-storage-standard' | 'object-storage-infrequent' | 'object-storage-archive' | 'file-storage';
9
+ export type DatabaseType = 'autonomous-transaction-processing' | 'autonomous-data-warehouse' | 'autonomous-json' | 'mysql-heatwave' | 'postgresql' | 'nosql' | 'base-database-vm' | 'base-database-bm' | 'exadata-cloud';
10
+ export type NetworkingType = 'load-balancer-flexible' | 'load-balancer-network' | 'vcn' | 'fastconnect-1gbps' | 'fastconnect-10gbps' | 'fastconnect-100gbps' | 'outbound-data-transfer' | 'vpn-connect';
11
+ export interface PricingItem {
12
+ service: string;
13
+ type: string;
14
+ description: string;
15
+ unit: PricingUnit;
16
+ pricePerUnit: number;
17
+ currency: 'USD';
18
+ region?: OCIRegion;
19
+ notes?: string;
20
+ }
21
+ export interface ComputeShapePricing extends PricingItem {
22
+ service: 'compute';
23
+ shapeFamily: ComputeShapeFamily;
24
+ ocpuPrice: number;
25
+ memoryPricePerGB: number;
26
+ minOCPU?: number;
27
+ maxOCPU?: number;
28
+ minMemoryGB?: number;
29
+ maxMemoryGB?: number;
30
+ memoryPerOCPURatio?: number;
31
+ gpuCount?: number;
32
+ localStorageGB?: number;
33
+ }
34
+ export interface StoragePricing extends PricingItem {
35
+ service: 'storage';
36
+ storageType: StorageType;
37
+ minCapacityGB?: number;
38
+ maxCapacityGB?: number;
39
+ performanceTier?: string;
40
+ }
41
+ export interface DatabasePricing extends PricingItem {
42
+ service: 'database';
43
+ databaseType: DatabaseType;
44
+ licenseIncluded: boolean;
45
+ byol?: boolean;
46
+ ecpuPrice?: number;
47
+ storagePrice?: number;
48
+ }
49
+ export interface NetworkingPricing extends PricingItem {
50
+ service: 'networking';
51
+ networkingType: NetworkingType;
52
+ bandwidthMbps?: number;
53
+ includedDataGB?: number;
54
+ }
55
+ export interface KubernetesPricing extends PricingItem {
56
+ service: 'kubernetes';
57
+ clusterManagementFee: number;
58
+ nodePoolFee?: number;
59
+ }
60
+ export interface CostEstimateInput {
61
+ compute?: {
62
+ shape: string;
63
+ ocpus: number;
64
+ memoryGB: number;
65
+ hoursPerMonth?: number;
66
+ };
67
+ storage?: {
68
+ blockVolumeGB?: number;
69
+ objectStorageGB?: number;
70
+ archiveStorageGB?: number;
71
+ fileStorageGB?: number;
72
+ };
73
+ database?: {
74
+ type: string;
75
+ ecpus?: number;
76
+ storageGB?: number;
77
+ licenseIncluded?: boolean;
78
+ };
79
+ networking?: {
80
+ loadBalancerBandwidthMbps?: number;
81
+ outboundDataGB?: number;
82
+ };
83
+ region?: OCIRegion;
84
+ }
85
+ export interface CostEstimateResult {
86
+ breakdown: {
87
+ category: string;
88
+ item: string;
89
+ quantity: number;
90
+ unit: string;
91
+ unitPrice: number;
92
+ monthlyTotal: number;
93
+ }[];
94
+ totalMonthly: number;
95
+ currency: 'USD';
96
+ region: OCIRegion;
97
+ notes: string[];
98
+ }
99
+ export interface RegionComparisonResult {
100
+ service: string;
101
+ type: string;
102
+ regions: {
103
+ region: OCIRegion;
104
+ pricePerUnit: number;
105
+ unit: PricingUnit;
106
+ }[];
107
+ cheapestRegion: OCIRegion;
108
+ mostExpensiveRegion: OCIRegion;
109
+ priceDifferencePercent: number;
110
+ }
111
+ export interface ServiceCatalogEntry {
112
+ name: string;
113
+ category: OCIServiceCategory;
114
+ description: string;
115
+ pricingTypes: string[];
116
+ documentationUrl: string;
117
+ }
118
+ export interface PricingMetadata {
119
+ source: string;
120
+ sourceUrl: string;
121
+ verifyUrl: string;
122
+ apiLastUpdated: string;
123
+ bundledDataGenerated: string;
124
+ totalProducts: number;
125
+ totalCategories: number;
126
+ currency: string;
127
+ pricingModel: string;
128
+ notes: string;
129
+ }
130
+ export interface APIProduct {
131
+ partNumber: string;
132
+ displayName: string;
133
+ metricName: string;
134
+ serviceCategory: string;
135
+ priceUSD: number;
136
+ }
137
+ export interface RegionInfo {
138
+ name: string;
139
+ location: string;
140
+ type: string;
141
+ }
142
+ export interface OCIPricingData {
143
+ metadata: PricingMetadata;
144
+ compute: ComputeShapePricing[];
145
+ storage: StoragePricing[];
146
+ database: DatabasePricing[];
147
+ networking: NetworkingPricing[];
148
+ kubernetes: KubernetesPricing[];
149
+ serverless?: PricingItem[];
150
+ containers?: PricingItem[];
151
+ observability?: PricingItem[];
152
+ security?: PricingItem[];
153
+ dataAnalytics?: PricingItem[];
154
+ aiMl?: PricingItem[];
155
+ edge?: PricingItem[];
156
+ products: APIProduct[];
157
+ categories: string[];
158
+ regions: RegionInfo[];
159
+ freeTier: Record<string, unknown>;
160
+ services: ServiceCatalogEntry[];
161
+ }
162
+ //# 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,5 @@
1
+ /**
2
+ * OCI Pricing MCP Server - Type Definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "oci-pricing-mcp",
3
+ "version": "1.2.1",
4
+ "description": "OCI Pricing MCP Server - Model Context Protocol server for Oracle Cloud Infrastructure pricing information",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "oci-pricing-mcp": "./dist/index.js"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "start": "node dist/index.js",
14
+ "dev": "tsc --watch",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "oracle",
21
+ "oci",
22
+ "cloud",
23
+ "pricing",
24
+ "cost",
25
+ "ai",
26
+ "claude"
27
+ ],
28
+ "author": {
29
+ "name": "Jason Wilbur",
30
+ "url": "https://jasonwilbur.com"
31
+ },
32
+ "license": "Apache-2.0",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/jasonwilbur/oci-pricing-mcp"
36
+ },
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@modelcontextprotocol/sdk": "^1.0.0"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^20.10.0",
45
+ "typescript": "^5.3.0"
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "README.md",
50
+ "LICENSE",
51
+ "NOTICE"
52
+ ]
53
+ }