Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ All notable changes to the Azure Pricing MCP Server will be documented in this f
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.5.0] - 2026-03-03

### Added

- **GitHub Pricing Tools** — full GitHub product pricing catalog
- `github_pricing` — look up pricing for Plans, Copilot, Actions runners, Advanced Security, Codespaces, Git LFS, and Packages
- `github_cost_estimate` — estimate monthly/annual GitHub costs based on team size and usage
- Static pricing table verified against github.com/pricing (no API calls required)
- Natural-language product aliases (e.g., 'ci/cd' → Actions, 'pair programmer' → Copilot)
- Full test suite with config validation, service logic, formatter, and handler integration tests

## [3.4.0] - 2026-03-03

### Added
Expand Down
32 changes: 32 additions & 0 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ The Azure Pricing MCP Server provides comprehensive Azure pricing intelligence t
| 📊 **Real-time Data** | Live data from Azure Retail Prices API |
| 🏷️ **Customer Discounts** | Apply discount percentages to all pricing queries |
| ⚡ **PTU Sizing** | Estimate Provisioned Throughput Units for Azure OpenAI deployments |
| 🐙 **GitHub Pricing** | Full GitHub pricing catalog + cost estimation (Plans, Copilot, Actions, Security, Codespaces) |

---

Expand Down Expand Up @@ -166,6 +167,37 @@ PTU sizing calculations are purely offline. Optional cost lookup uses the public

---

## GitHub Pricing Tools

Full GitHub product pricing catalog and cost estimation — no authentication required.

### Capabilities

| Feature | Description |
|---------|-------------|
| **Plan pricing** | Free, Team, Enterprise — per-user monthly rates |
| **Copilot pricing** | Free, Pro, Pro+, Business, Enterprise plans |
| **Actions runners** | Per-minute rates for Linux, Windows, macOS, ARM, GPU runners |
| **Advanced Security** | GHAS per-committer pricing |
| **Codespaces** | Compute (per core-hour) and storage (per GB/month) |
| **Add-ons** | Git LFS, Packages, data transfer |
| **Cost estimation** | Monthly/annual projections based on team size and usage |

### No Authentication Required

GitHub pricing data is maintained as a static table verified against github.com/pricing. All lookups are offline — no API calls required.

### Example Usage

```
"What are the GitHub Copilot pricing plans?"
"How much does GitHub Actions cost for macOS runners?"
"Estimate monthly GitHub cost for 50 users on Team plan with Copilot Business"
"Show me GitHub Advanced Security pricing"
```

---

## Docker Support

Run in containers for easy deployment and isolation. See [INSTALL.md](../INSTALL.md) for Docker setup instructions.
15 changes: 14 additions & 1 deletion docs/TOOLS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Available Tools

The Azure Pricing MCP Server provides 13 tools for querying Azure pricing information.
The Azure Pricing MCP Server provides 15 tools for querying Azure pricing information.

---

Expand Down Expand Up @@ -55,6 +55,17 @@ No authentication required for sizing. Cost lookup uses the public Azure Retail

---

## GitHub Pricing Tools

No authentication required. Data sourced from static pricing tables verified against github.com/pricing.

| Tool | Description |
|------|-------------|
| `github_pricing` | Look up GitHub product pricing: Plans (Free/Team/Enterprise), Copilot (Free/Pro/Pro+/Business/Enterprise), Actions runners, Advanced Security, Codespaces, Git LFS, and Packages |
| `github_cost_estimate` | Estimate monthly and annual GitHub costs based on team size and usage (plan seats, Copilot licenses, Actions minutes, Codespaces hours, LFS packs, GHAS committers) |

---

## Example Queries

Once configured, ask your AI assistant:
Expand All @@ -73,6 +84,8 @@ Once configured, ask your AI assistant:
| **Orphaned Resources** | "Find orphaned resources across all my subscriptions" |
| **PTU Sizing** | "How many PTUs do I need for gpt-4.1 at 100 RPM with 500 input and 200 output tokens?" |
| **PTU Cost** | "Estimate PTU cost for gpt-5 deployment with 50 RPM, 1000 input tokens, 500 output tokens, include cost for eastus" |
| **GitHub Pricing** | "What are the GitHub Copilot plan prices?" |
| **GitHub Cost** | "Estimate monthly GitHub cost for 50 users on Team plan with Copilot Business and 10,000 Actions minutes" |

### Sample Response

Expand Down
250 changes: 250 additions & 0 deletions src/azure_pricing_mcp/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,256 @@
"lakebase": "database serverless",
}

# =============================================================================
# GitHub Pricing Configuration (static catalog — not available via Azure API)
# =============================================================================

# Data version tracks the last manual verification date for static pricing data.
# Bump this when prices are re-verified from https://github.com/pricing
GITHUB_PRICING_DATA_VERSION = "2026-03-03"

# ---------------------------------------------------------------------------
# GitHub Plans (per-user/month)
# ---------------------------------------------------------------------------
GITHUB_PLANS: dict[str, dict] = {
"Free": {
"price_monthly": 0.0,
"price_annual_per_month": 0.0,
"target": "Individual developers & small OSS projects",
"includes": [
"Unlimited public/private repos",
"2,000 Actions minutes/month",
"500 MB Packages storage",
"Community support",
],
},
"Team": {
"price_monthly": 4.0,
"price_annual_per_month": 4.0,
"target": "Small teams wanting collaboration features",
"includes": [
"Everything in Free",
"3,000 Actions minutes/month",
"2 GB Packages storage",
"Required reviewers",
"Code owners",
"Draft pull requests",
"Repository insights",
],
},
"Enterprise": {
"price_monthly": 21.0,
"price_annual_per_month": 21.0,
"target": "Large organisations with advanced security & compliance",
"includes": [
"Everything in Team",
"50,000 Actions minutes/month",
"50 GB Packages storage",
"SAML SSO",
"Advanced auditing",
"GitHub Connect",
"Enterprise Managed Users (optional)",
],
},
}

# ---------------------------------------------------------------------------
# GitHub Copilot Plans
# ---------------------------------------------------------------------------
GITHUB_COPILOT_PLANS: dict[str, dict] = {
"Free": {
"price_monthly": 0.0,
"price_annual": 0.0,
"target": "Individuals — limited completions & chat",
"includes": [
"2,000 code completions/month",
"50 chat messages/month",
"Access to GPT-4o & Claude 3.5 Sonnet",
],
},
"Pro": {
"price_monthly": 10.0,
"price_annual": 100.0,
"target": "Individual developers — unlimited usage",
"includes": [
"Unlimited code completions",
"Unlimited chat messages",
"Access to GPT-4o, Claude 3.5 Sonnet, and more",
"CLI and IDE support",
],
},
"Pro+": {
"price_monthly": 39.0,
"price_annual": 390.0,
"target": "Power users — premium models & agents",
"includes": [
"Everything in Pro",
"Access to GPT-o1, Claude 3.7 Sonnet, Gemini 2.5 Pro",
"Full Copilot agent mode",
"Unlimited premium model usage",
],
},
"Business": {
"price_monthly": 19.0,
"price_annual": 228.0,
"target": "Organisations — per-seat with admin controls",
"includes": [
"Everything in Pro",
"Organisation-wide policy management",
"Audit logs",
"IP indemnity",
"Content exclusions",
],
},
"Enterprise": {
"price_monthly": 39.0,
"price_annual": 468.0,
"target": "Enterprises — advanced customisation & security",
"includes": [
"Everything in Business",
"Fine-tuned custom models",
"Knowledge bases",
"SAML SSO enforcement",
],
},
}

# ---------------------------------------------------------------------------
# GitHub Actions Runner Pricing (per-minute rates)
# ---------------------------------------------------------------------------
GITHUB_ACTIONS_RUNNERS: dict[str, dict] = {
"Linux 2-core": {"per_minute": 0.008, "os": "Linux", "cores": 2},
"Linux 4-core": {"per_minute": 0.016, "os": "Linux", "cores": 4},
"Linux 8-core": {"per_minute": 0.032, "os": "Linux", "cores": 8},
"Linux 16-core": {"per_minute": 0.064, "os": "Linux", "cores": 16},
"Linux 32-core": {"per_minute": 0.128, "os": "Linux", "cores": 32},
"Linux 64-core": {"per_minute": 0.256, "os": "Linux", "cores": 64},
"Windows 2-core": {"per_minute": 0.016, "os": "Windows", "cores": 2},
"Windows 4-core": {"per_minute": 0.032, "os": "Windows", "cores": 4},
"Windows 8-core": {"per_minute": 0.064, "os": "Windows", "cores": 8},
"Windows 16-core": {"per_minute": 0.128, "os": "Windows", "cores": 16},
"Windows 32-core": {"per_minute": 0.256, "os": "Windows", "cores": 32},
"Windows 64-core": {"per_minute": 0.512, "os": "Windows", "cores": 64},
"macOS 3-core (M1)": {"per_minute": 0.08, "os": "macOS", "cores": 3},
"macOS 4-core (M2 Pro)": {"per_minute": 0.16, "os": "macOS", "cores": 4},
"macOS 12-core (Intel)": {"per_minute": 0.12, "os": "macOS", "cores": 12},
"Linux 2-core ARM": {"per_minute": 0.005, "os": "Linux ARM", "cores": 2},
"Linux 4-core ARM": {"per_minute": 0.01, "os": "Linux ARM", "cores": 4},
"Linux 8-core ARM": {"per_minute": 0.02, "os": "Linux ARM", "cores": 8},
"Linux 16-core ARM": {"per_minute": 0.04, "os": "Linux ARM", "cores": 16},
"Linux 32-core ARM": {"per_minute": 0.08, "os": "Linux ARM", "cores": 32},
"Linux 64-core ARM": {"per_minute": 0.16, "os": "Linux ARM", "cores": 64},
"Linux 2-core GPU": {"per_minute": 0.07, "os": "Linux GPU", "cores": 2},
"Linux 4-core GPU": {"per_minute": 0.14, "os": "Linux GPU", "cores": 4},
}

# Free Actions minutes included per plan (Linux minutes; Windows = 2×, macOS = 10×)
GITHUB_ACTIONS_FREE_MINUTES: dict[str, dict] = {
"Free": {"minutes": 2000, "storage_gb": 0.5},
"Team": {"minutes": 3000, "storage_gb": 2},
"Enterprise": {"minutes": 50000, "storage_gb": 50},
}

# ---------------------------------------------------------------------------
# GitHub Advanced Security Products
# ---------------------------------------------------------------------------
GITHUB_SECURITY_PRODUCTS: dict[str, dict] = {
"GitHub Advanced Security (GHAS)": {
"price_monthly_per_committer": 49.0,
"target": "GitHub Enterprise — required for private repos",
"includes": [
"Code scanning (CodeQL)",
"Secret scanning",
"Dependency review",
"Security overview dashboard",
],
},
}

# ---------------------------------------------------------------------------
# GitHub Add-on Services
# ---------------------------------------------------------------------------
GITHUB_ADDONS: dict[str, dict] = {
"Codespaces Compute": {
"unit": "per core-hour",
"price": 0.18,
"description": "Cloud dev environments — $0.18/core-hour",
},
"Codespaces Storage": {
"unit": "per GB/month",
"price": 0.07,
"description": "Codespaces persistent storage — $0.07/GB/month",
},
"Copilot for Pull Requests": {
"unit": "included with Copilot Enterprise",
"price": 0.0,
"description": "AI-generated PR summaries — included with Copilot Enterprise",
},
"Git LFS Data": {
"unit": "per 50 GB pack/month",
"price": 5.0,
"description": "Large File Storage — $5/50 GB data pack per month",
},
"Git LFS Bandwidth": {
"unit": "per 50 GB pack/month",
"price": 5.0,
"description": "Large File Storage bandwidth — $5/50 GB bandwidth pack per month",
},
"GitHub Packages": {
"unit": "per GB/month beyond free tier",
"price": 0.25,
"description": "Container & package storage — $0.25/GB/month beyond free",
},
"GitHub Packages Data Transfer": {
"unit": "per GB beyond free tier",
"price": 0.50,
"description": "Package data transfer — $0.50/GB beyond free",
},
}

# ---------------------------------------------------------------------------
# Aliases for natural-language lookup
# ---------------------------------------------------------------------------
GITHUB_PRODUCT_ALIASES: dict[str, str] = {
# Plans
"plan": "plans",
"plans": "plans",
"github plan": "plans",
"github plans": "plans",
"subscription": "plans",
# Copilot
"copilot": "copilot",
"github copilot": "copilot",
"ai assistant": "copilot",
"code completion": "copilot",
"pair programmer": "copilot",
# Actions
"actions": "actions",
"github actions": "actions",
"ci/cd": "actions",
"ci cd": "actions",
"runners": "actions",
"workflows": "actions",
"build minutes": "actions",
# Security
"security": "security",
"advanced security": "security",
"ghas": "security",
"code scanning": "security",
"secret scanning": "security",
# Codespaces
"codespaces": "codespaces",
"dev environments": "codespaces",
"cloud ide": "codespaces",
# Storage / Add-ons
"lfs": "storage",
"git lfs": "storage",
"large file storage": "storage",
"packages": "storage",
"container registry": "storage",
"storage": "storage",
}

# =============================================================================
# Spot VM Tools Configuration (requires Azure authentication)
# =============================================================================
Expand Down
15 changes: 15 additions & 0 deletions src/azure_pricing_mcp/github_pricing/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""GitHub Pricing package for Azure Pricing MCP Server."""

from .formatters import (
format_github_cost_estimate_response,
format_github_pricing_response,
)
from .handlers import GitHubPricingHandlers
from .tools import get_github_pricing_tool_definitions

__all__ = [
"GitHubPricingHandlers",
"format_github_cost_estimate_response",
"format_github_pricing_response",
"get_github_pricing_tool_definitions",
]
Loading