sample-aws-pricing-calculator-mcp 1.2.2 → 1.2.5
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/catalog/services/ec2Enhancement.json +12 -6
- package/dist/mcp-server.js +49 -45
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"field": "pricingStrategy",
|
|
17
|
-
"hint": "Pricing model. Accepts shorthand strings (ondemand,
|
|
17
|
+
"hint": "Pricing model. Accepts shorthand strings for simple cases OR a full object for committed pricing.\n\nShorthand (On-Demand/Spot only): \"ondemand\", \"spot\"\n\nFull object (required for any committed/discounted pricing):\n- EC2 Instance Savings Plans: {\"model\":\"instanceSavings\",\"term\":\"1 Year\",\"upfrontPayment\":\"None\"}\n- Compute Savings Plans: {\"model\":\"computeSavings\",\"term\":\"1 Year\",\"upfrontPayment\":\"None\"}\n- Standard Reserved Instances (dedicated tenancy only): {\"model\":\"standard\",\"term\":\"1 Year\",\"upfrontPayment\":\"None\"}\n- Convertible Reserved Instances (dedicated tenancy only): {\"model\":\"convertible\",\"term\":\"1 Year\",\"upfrontPayment\":\"None\"}\n\nValid term values: \"1 Year\", \"3 Year\" (exact case, full words)\nValid upfrontPayment values: \"None\", \"Partial\", \"All\" (exact case)\n\nCRITICAL: Do NOT use shorthand \"reserved\" or \"instanceSavings\" for committed pricing — these may silently fall back to On-Demand or produce $0 costs. Always use the full object format for any non-OnDemand, non-Spot pricing. EstimateBuilder normalizes via lib/ec2.js.",
|
|
18
18
|
"enum": [
|
|
19
19
|
"ondemand",
|
|
20
20
|
"reserved",
|
|
@@ -28,12 +28,18 @@
|
|
|
28
28
|
],
|
|
29
29
|
"traps": [
|
|
30
30
|
"Use serviceCode 'ec2Enhancement' with templateId 'template'. The legacy (eC2Next, quickEstimate) format saves cleanly but renders Read-only — the calculator cannot rehydrate it. EstimateBuilder forces this transformation automatically; do not bypass it.",
|
|
31
|
-
"Reserved Instances (standard, convertible) are HIDDEN under shared tenancy. For shared,
|
|
31
|
+
"Reserved Instances (standard, convertible) are HIDDEN under shared tenancy. For shared tenancy with committed pricing, ALWAYS use the full object format: {\"model\":\"instanceSavings\",\"term\":\"1 Year\",\"upfrontPayment\":\"None\"} or {\"model\":\"computeSavings\",\"term\":\"1 Year\",\"upfrontPayment\":\"None\"}. The shorthand \"reserved\" and \"instanceSavings\" strings are unreliable and may produce On-Demand pricing or $0 costs. Real Standard/Convertible RIs require tenancy:\"dedicated\" or \"host\".",
|
|
32
32
|
"pricingStrategy term values are exact-case strings: '1 Year', '3 Year' — full words, capitalized. Lowercase variants silently produce wrong pricing.",
|
|
33
33
|
"pricingStrategy upfrontPayment values: 'None', 'Partial', 'All'. EstimateBuilder accepts shorthand 'No' and converts to 'None'.",
|
|
34
34
|
"The calculator silently demands tenancy, workload, workloadSelection, dataTransferForEC2, detailedMonitoringCheckbox, and ec2AdvancedPricingMetrics — even though the PCT does not mark them validations.required. EstimateBuilder injects all of these via lib/ec2.js#transformConfig.",
|
|
35
|
-
"utilization is HIDDEN inside the pricingStrategy component and does NOT appear in get_service_fields' field list.
|
|
36
|
-
"workload is the INSTANCE COUNT — use it for the user's quantity. For 'two instances' set workload: 2 (one entry) or save two entries with workload: 1 each. Either is fine. Do NOT save workload: 1 for 'two instances' and stash the '2' only in description (the saved estimate prices for one instance and the user reads two). Do NOT compensate for utilization with workload (e.g. workload: 0.8 to fake 80% utilization) — the total cost may match but the saved estimate structurally lies about how many instances are running. Use the explicit utilization field instead."
|
|
35
|
+
"utilization is HIDDEN inside the pricingStrategy component and does NOT appear in get_service_fields' field list. To set utilization, pass top-level utilization: 'N' (string, 1–100); EstimateBuilder routes it into pricingStrategy.value.utilizationValue.",
|
|
36
|
+
"workload is the INSTANCE COUNT — use it for the user's quantity. For 'two instances' set workload: 2 (one entry) or save two entries with workload: 1 each. Either is fine. Do NOT save workload: 1 for 'two instances' and stash the '2' only in description (the saved estimate prices for one instance and the user reads two). Do NOT compensate for utilization with workload (e.g. workload: 0.8 to fake 80% utilization) — the total cost may match but the saved estimate structurally lies about how many instances are running. Use the explicit utilization field instead.",
|
|
37
|
+
"The dataTransferForEC2 field is a composite widget. Its value must be an array of transfer entries, each with entryType, value, unit, and a region field. Valid entryTypes: INBOUND, OUTBOUND, INTRA_REGION.",
|
|
38
|
+
"Unit must be \"tb_month\" or \"gb_month\".",
|
|
39
|
+
"OUTBOUND entries require a \"toRegion\" field — use \"External\" for internet or \"other\" for other AWS regions. INBOUND entries require a \"fromRegion\" field with the same options. INTRA_REGION requires neither.",
|
|
40
|
+
"All three entryTypes (INBOUND, OUTBOUND, INTRA_REGION) must be present in the array even if their value is \"0\".",
|
|
41
|
+
"For Dedicated Hosts (tenancy: \"host\"): instanceType must be the instance FAMILY only (e.g. \"m5\", \"c6g\"), NOT a specific size (e.g. \"m5.metal\", \"m5.xlarge\"). Do NOT set selectedOS — OS is not configured at the host level."
|
|
42
|
+
|
|
37
43
|
],
|
|
38
44
|
"minimalConfig": {
|
|
39
45
|
"region": "us-east-1",
|
|
@@ -46,8 +52,8 @@
|
|
|
46
52
|
"defaultFields": {
|
|
47
53
|
"dataTransferForEC2": {
|
|
48
54
|
"value": [
|
|
49
|
-
{ "entryType": "INBOUND", "value": "", "unit": "tb_month", "fromRegion": "" },
|
|
50
|
-
{ "entryType": "OUTBOUND", "value": "", "unit": "tb_month", "toRegion": "" },
|
|
55
|
+
{ "entryType": "INBOUND", "value": "", "unit": "tb_month", "fromRegion": "External" },
|
|
56
|
+
{ "entryType": "OUTBOUND", "value": "", "unit": "tb_month", "toRegion": "External" },
|
|
51
57
|
{ "entryType": "INTRA_REGION", "value": "", "unit": "tb_month" }
|
|
52
58
|
]
|
|
53
59
|
}
|