App Onboard Prepare โ Pricing Guide
โ SELF-CHECK: If
costEstimate.breakdown[]has ANYmonthlyUsd > 0, at least onepricing_getoraz restpricing API call MUST appear in this session. Estimating from memory or training data is NEVER acceptable โ reference values in this file may be outdated. If API fails after 2 attempts, use the reference value WITH disclaimer:"โ ๏ธ Estimated from reference โ live API unavailable."
Free-Tier Shortcut โ Skip API
โ Check this FIRST. If ALL services use free-tier SKUs โ write $0 cost estimate, add disclaimer "Estimate assumes usage within free grant limits", skip to Step 7.
| Service | Free SKU | Skip API? |
|---|---|---|
| App Service | F1 | Yes |
| Static Web Apps | Free | Yes |
| Functions | Consumption (โค1M exec) | Yes |
| Cosmos DB | Free tier (1000 RU/s) | Yes |
| Container Apps | Consumption (โค180K vCPU-s) | Yes |
App Service Quick Reference
| SKU | skuName |
Monthly |
|---|---|---|
| B1 Linux | B1 |
~$13.14 |
โ Case-sensitive: use
B1notb1. UseskuName(notarmSkuName) for Basic/Standard.
How to Use
- Pick SKU from sku-matrix.md based on budget intent.
- Find service section in pricing-guide-services.md for filter strings and formulas.
- Call the pricing router โ tool
mcp_azure_mcp_pricing(VS Code) /azure-pricing(CLI) โ withintent,command: "pricing_get", and aparametersobject (NOT--flags). Parallel OK. โ At least one filter insideparameters:sku,service,region,service-family, orfilter. โskumatchesarmSkuName, notskuNameโ use it ONLY whenarmSkuNameis populated (App Service, MySQL/PostgreSQL, Redis). Empty-armSkuNameservices (ACR, Storage, Cosmos, Key Vault) return[]or 400 forsku/serviceโ use a rawfilteronserviceName+meterNameinstead. - Apply the monthly multiplier from each meter's
unitOfMeasure(see ยง Monthly Multiplier) โ NOT a per-service constant. - Cross-check returned
retailPriceagainst planned SKU.
Monthly Multiplier โ by Meter Unit
โ Read unitOfMeasure per price record โ NEVER blanket ร 730 (one service mixes units, e.g. ACR returns 1/Day + 1 Second + 1 GB/Month):
unitOfMeasure |
Monthly formula |
|---|---|
1 Hour / 1/Hour |
retailPrice ร 730 |
1/Day / 1 Day |
retailPrice ร 30 |
1 GB/Month |
retailPrice ร estimatedGB (already monthly) |
1 Second / 1 GiB Second |
retailPrice ร activeUnitsPerMonth (usage-based) |
10K / 1M operations |
retailPrice ร estimatedOps รท unitSize |
Usage-Based Services
When AI/OpenAI/LLM components detected: add "๐ธ Usage-based โ excluded from total" to costEstimate.breakdown[] and "โ ๏ธ๐ค AI inference costs excluded" to assumptions[]. Surface at EVERY approval gate.
Service Pricing Reference
See pricing-guide-services.md for per-service filter strings, meter names, and monthly formulas.
Key rules:
armSkuNameis empty for most PaaS โ filter bymeterNameorproductName- Monthly multiplier: read
unitOfMeasure(ยง Monthly Multiplier) โ never assume ร730 - Functions Consumption / Static Web Apps: not in API
- Default
isPrimaryMeterRegion eq true+priceType eq 'Consumption'โ but check the service section in pricing-guide-services.md first; some dropisPrimaryMeterRegion(Service Bus, Cosmos 100 RU/s, Redis Basic). - Service names are case-sensitive
Troubleshooting
When pricing_get returns empty: (1) Check armSkuName populated/case-sensitive? (2) HTTP fallback: https://prices.azure.com/api/retail/prices?$filter={filter}. (3) After 2 failures, use pricing-guide-services.md with disclaimer. (4) Log to costEstimate.apiFailures[].
โ Never claim user has free credits remaining. Use: "Check balance at portal."