AWS Pricing MCP Server
Provides real-time AWS pricing data and cost analysis, including service discovery, pricing queries, multi-region comparisons, and cost optimization recommendations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AWS Pricing MCP ServerHow much does a gp3 EBS volume cost per GB in us-west-2?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AWS Pricing MCP Server (Fork)
An MCP server for accessing real-time AWS pricing information and providing cost analysis capabilities. Forked from awslabs/mcp.
Important Note: This server provides real-time pricing data from the public AWS Price List Bulk API. We cannot guarantee that AI assistants will always construct filters correctly or identify the absolute cheapest options. All API calls are free of charge and require no AWS credentials.
Changes from Upstream
This fork replaces the AWS Pricing Query API (boto3) with the public AWS Price List Bulk API, which means:
No AWS credentials required — no IAM permissions, no
aws configure, noAWS_PROFILEneededNo
boto3dependency — useshttpxfor direct HTTP requests to the public Bulk APILocal filtering — filters are applied locally after fetching price lists, supporting
EQUALS,ANY_OF,CONTAINS, andNONE_OFfilter typesIndex-based pagination — uses simple integer offsets instead of AWS API pagination tokens
Related MCP server: Cost Management MCP
Features
AWS Pricing Discovery & Information
Service catalog exploration: Discover all AWS services with available pricing information
Pricing attribute discovery: Identify filterable dimensions (instance types, regions, storage classes, etc.) for any AWS service
Real-time pricing queries: Access current pricing data with advanced filtering capabilities including multi-option comparisons and pattern matching
Multi-region pricing comparisons: Compare pricing across different AWS regions in a single query
Bulk pricing data access: Download complete pricing datasets in CSV/JSON formats for historical analysis and offline processing
Cost Analysis & Planning
Detailed cost report generation: Create comprehensive cost analysis reports with unit pricing, calculation breakdowns, and usage scenarios
Infrastructure project analysis: Scan CDK and Terraform projects to automatically identify AWS services and their configurations
Architecture pattern guidance: Get detailed architecture patterns and cost considerations, especially for Amazon Bedrock services
Cost optimization recommendations: Receive AWS Well-Architected Framework aligned suggestions for cost optimization
Query pricing data with natural language
Ask questions about AWS pricing in plain English, no complex query languages required
Get instant answers from the AWS Price List Bulk API for any AWS service
Retrieve comprehensive pricing information with flexible filtering options
Prerequisites
Install
uvfrom Astral or the GitHub READMEInstall Python using
uv python install 3.10
No AWS credentials or IAM permissions are needed — this fork uses the public Bulk API.
Installation
From GitHub (recommended)
Configure the MCP server in your MCP client configuration:
For Linux/MacOS:
{
"mcpServers": {
"aws-pricing": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/sebdroid/aws-pricing-mcp-server",
"awslabs.aws-pricing-mcp-server"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}For Windows:
{
"mcpServers": {
"aws-pricing": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/sebdroid/aws-pricing-mcp-server",
"awslabs.aws-pricing-mcp-server.exe"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}From a local clone
git clone https://github.com/sebdroid/aws-pricing-mcp-server.git
cd aws-pricing-mcp-server
uv syncThen configure your MCP client to use the local directory:
{
"mcpServers": {
"aws-pricing": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/aws-pricing-mcp-server",
"awslabs.aws-pricing-mcp-server"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}Using Docker
After a successful docker build -t awslabs/aws-pricing-mcp-server .:
{
"mcpServers": {
"aws-pricing": {
"command": "docker",
"args": [
"run",
"--rm",
"--interactive",
"--env",
"FASTMCP_LOG_LEVEL=ERROR",
"awslabs/aws-pricing-mcp-server:latest"
]
}
}
}Configuration
Variable | Default | Description |
|
| Log level ( |
|
| Fallback region for |
No AWS credentials are needed — all data comes from the public Bulk API.
"env": {
"FASTMCP_LOG_LEVEL": "ERROR",
"AWS_REGION": "us-east-1"
}Available Tools
9 toolsanalyze_cdk_projectARead-only
Analyze a CDK project to identify AWS services used. This tool dynamically extracts service information from CDK constructs without relying on hardcoded service mappings.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | Path to the project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds useful behavioral context by stating that it 'dynamically extracts service information from CDK constructs without relying on hardcoded service mappings,' explaining its methodology beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary purpose, and contains no redundant wording. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one well-documented parameter, a readOnly annotation, and an output schema, the description provides enough information for correct invocation. It covers the tool's purpose and operational approach without needing to explain return values thanks to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, project_path, is fully documented in the schema as 'Path to the project directory.' The description does not add additional meaning about the parameter, so the baseline of 3 for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Analyze' and clear resource 'CDK project', and states the actionable outcome 'identify AWS services used.' It distinguishes itself from the sibling 'analyze_terraform_project' by the project type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates use for CDK projects, which gives context for when to select it. However, it does not explicitly mention alternatives like 'analyze_terraform_project' or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_terraform_projectARead-only
Analyze a Terraform project to identify AWS services used. This tool dynamically extracts service information from Terraform resource declarations.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | Path to the project directory |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the tool as read-only. The description adds valuable behavioral context by noting that the tool 'dynamically extracts service information from Terraform resource declarations', which explains how the analysis works and what data sources are used. This goes beyond the annotation's safety declaration and informs the agent about the tool's operational mechanism.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with no redundant phrasing. The first sentence states the primary purpose, and the second adds a key behavioral detail. It is front-loaded and every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter, an output schema, and a readOnly annotation. The description sufficiently explains the tool's purpose and behavior without needing to detail return values, as the output schema likely covers that. It is complete for the tool's simplicity, though it could mention potential limitations (e.g., only works with Terraform source files), but this is not a critical omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter with a description ('Path to the project directory') and 100% coverage. The tool description adds specificity by clarifying that the path points to a Terraform project, which is not explicit in the parameter's generic wording. This helps the agent infer the expected input format and purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes a Terraform project to identify AWS services used, using the specific verb 'analyze' with the resource 'Terraform project' and the outcome 'identify AWS services'. This distinguishes it from sibling tools like analyze_cdk_project, which targets CDK projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the user has a Terraform project, but it does not explicitly state when to use this tool over alternatives, nor does it mention any exclusions or prerequisites. The existence of sibling analyze_cdk_project suggests a need for differentiation, but the description relies on the tool name and the word 'Terraform' to imply context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_cost_reportARead-only
Generate a detailed cost analysis report based on pricing data for one or more AWS services.
This tool requires AWS pricing data and provides options for adding detailed cost information.
IMPORTANT REQUIREMENTS:
ALWAYS include detailed unit pricing information (e.g., "$0.0008 per 1K input tokens")
ALWAYS show calculation breakdowns (unit price × usage = total cost)
ALWAYS specify the pricing model (e.g., "ON DEMAND")
ALWAYS list all assumptions and exclusions explicitly
Output Format Options:
'markdown' (default): Generates a well-formatted markdown report
'csv': Generates a CSV format report with sections for service information, unit pricing, cost calculations, etc.
Example usage:
{
// Required parameters
"pricing_data": {
// This should contain pricing data retrieved from get_pricing
"status": "success",
"service_name": "bedrock",
"data": "... pricing information ...",
"message": "Retrieved pricing for bedrock from AWS Pricing url"
},
"service_name": "Amazon Bedrock",
// Core parameters (commonly used)
"related_services": ["Lambda", "S3"],
"pricing_model": "ON DEMAND",
"assumptions": [
"Standard ON DEMAND pricing model",
"No caching or optimization applied",
"Average request size of 4KB"
],
"exclusions": [
"Data transfer costs between regions",
"Custom model training costs",
"Development and maintenance costs"
],
"output_file": "cost_analysis_report.md", // or "cost_analysis_report.csv" for CSV format
"format": "markdown", // or "csv" for CSV format
// Advanced parameter for complex scenarios
"detailed_cost_data": {
"services": {
"Amazon Bedrock Foundation Models": {
"usage": "Processing 1M input tokens and 500K output tokens with Claude 3.5 Haiku",
"estimated_cost": "$80.00",
"free_tier_info": "No free tier for Bedrock foundation models",
"unit_pricing": {
"input_tokens": "$0.0008 per 1K tokens",
"output_tokens": "$0.0016 per 1K tokens"
},
"usage_quantities": {
"input_tokens": "1,000,000 tokens",
"output_tokens": "500,000 tokens"
},
"calculation_details": "$0.0008/1K × 1,000K input tokens + $0.0016/1K × 500K output tokens = $80.00"
},
"AWS Lambda": {
"usage": "6,000 requests per month with 512 MB memory",
"estimated_cost": "$0.38",
"free_tier_info": "First 12 months: 1M requests/month free",
"unit_pricing": {
"requests": "$0.20 per 1M requests",
"compute": "$0.0000166667 per GB-second"
},
"usage_quantities": {
"requests": "6,000 requests",
"compute": "6,000 requests × 1s × 0.5GB = 3,000 GB-seconds"
},
"calculation_details": "$0.20/1M × 0.006M requests + $0.0000166667 × 3,000 GB-seconds = $0.38"
}
}
},
// Recommendations parameter - can be provided directly or generated
"recommendations": {
"immediate": [
"Optimize prompt engineering to reduce token usage for Claude 3.5 Haiku",
"Configure Knowledge Base OCUs based on actual query patterns",
"Implement response caching for common queries to reduce token usage"
],
"best_practices": [
"Monitor OCU utilization metrics and adjust capacity as needed",
"Use prompt caching for repeated context across API calls",
"Consider provisioned throughput for predictable workloads"
]
}
}| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format ("markdown" or "csv") | markdown |
| exclusions | No | List of items excluded from cost analysis | |
| assumptions | No | List of assumptions for cost analysis | |
| output_file | No | Path to save the report file | |
| pricing_data | Yes | Raw pricing data from AWS pricing tools | |
| service_name | Yes | Name of the AWS service | |
| pricing_model | No | Pricing model (e.g., "ON DEMAND", "Reserved") | ON DEMAND |
| recommendations | No | Direct recommendations or guidance for generation | |
| related_services | No | List of related AWS services | |
| detailed_cost_data | No | Detailed cost information for complex scenarios |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description is consistent. It adds behavioral expectations: ALWAYS include unit pricing, calculation breakdowns, pricing model, assumptions, and exclusions. It also discloses output format options. This goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but front-loaded with a clear purpose and requirements, followed by structured sections and a comprehensive example. It earns its length for a 10-parameter tool, though the example is quite verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 10 parameters, nested objects, and an output schema, the description covers required input structure, output formats, report content requirements, and example usage. It omits return-value details, but the presence of an output schema reduces that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description substantially enriches parameter semantics with a full JSON example showing the structure of pricing_data, detailed_cost_data, recommendations, and other parameters. It clarifies how pricing_data from get_pricing should be passed and the relationships between fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence uses a specific verb ('Generate') and resource ('cost analysis report') and clarifies the tool's scope (based on pricing data for one or more AWS services). This clearly distinguishes it from siblings that retrieve pricing or analyze projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the prerequisite ('This tool requires AWS pricing data') and provides an example showing pricing_data retrieved from get_pricing, implying a workflow. However, it doesn't explicitly name alternatives or state when not to use it, so it falls short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bedrock_patternsARead-only
Get architecture patterns for Amazon Bedrock applications, including component relationships and cost considerations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation, presenting a 'Get' operation. It does not contradict the annotation. However, it adds only content details (component relationships, cost considerations) and does not disclose other behavioral traits like authentication needs or rate limits, but the annotation already indicates a safe read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It clearly states what the tool does and includes two key content categories without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters and an output schema, the description provides complete context: it identifies the resource, content area, and relevant considerations. The output schema covers return structure, so the description need not detail that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema shows zero parameters, so there is no parameter information to add. The description mentions the scope ('architecture patterns for Amazon Bedrock applications') which implicitly defines the parameter domain, but with 0 parameters the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get architecture patterns for Amazon Bedrock applications', and mentions specific contents (component relationships and cost considerations). This clearly distinguishes it from sibling tools like get_pricing or analyze_cdk_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies when to use the tool, but the description does not provide explicit guidance or mention alternatives like the pricing or CDK/Terraform analysis tools. No exclusions or when-not-to-use instructions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_list_urlsARead-only
Get download URLs for bulk pricing data files.
**PURPOSE:** Access complete AWS pricing datasets as downloadable files for historical analysis and bulk processing.
**WORKFLOW:** Use this for historical pricing analysis or bulk data processing when current pricing from get_pricing() isn't sufficient.
**PARAMETERS:**
- Service code from get_pricing_service_codes() (e.g., 'AmazonEC2', 'AmazonS3')
- AWS region (e.g., 'us-east-1', 'eu-west-1')
- Optional: effective_date for historical pricing (default: current date)
**RETURNS:** Dictionary with download URLs for different formats:
- 'csv': Direct download URL for CSV format
- 'json': Direct download URL for JSON format
**USE CASES:**
- Historical pricing analysis (get_pricing() only provides current pricing)
- Bulk data processing without repeated API calls
- Offline analysis of complete pricing datasets
- Savings Plans analysis across services
**FILE PROCESSING:**
- CSV files: Lines 1-5 are metadata, Line 6 contains headers, Line 7+ contains pricing data
- Use `tail -n +7 pricing.csv | grep "t3.medium"` to filter data
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | AWS region (e.g., "us-east-1", "eu-west-1") | |
| service_code | Yes | AWS service code (e.g., "AmazonEC2", "AmazonS3", "AmazonES") |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description aligns with that while adding substantial behavioral context: return format (dictionary with 'csv' and 'json' keys), default effective_date behavior, and CSV file processing quirks (metadata lines, header location, grep example). However, it mentions an 'optional effective_date' parameter that does not appear in the schema, which slightly undermines accuracy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with clear headings (PURPOSE, WORKFLOW, PARAMETERS, RETURNS, USE CASES, FILE PROCESSING) and front-loaded purpose. Every section delivers actionable information without fluff, making the length appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers purpose, workflow alternatives, parameter usage, return structure, use cases, and file processing details. Combined with the output schema and readOnlyHint annotation, it gives an agent everything needed to invoke the tool correctly and process results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with clear descriptions (100% coverage). The description adds value by pointing to get_pricing_service_codes for valid service codes and providing region examples, but it also documents a non-existent 'effective_date' parameter, creating a mismatch between description and schema. Thus, baseline 3 with a minor penalty for the misleading addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb+resource phrase ('Get download URLs for bulk pricing data files'), immediately distinguishing this tool from siblings like get_pricing (current pricing) and the service code listing tools. It clearly identifies the deliverable (download URLs) and the intended scope (bulk/historical data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: historical pricing analysis or bulk data processing 'when current pricing from get_pricing() isn't sufficient.' It also names an alternative (get_pricing) and refers to get_pricing_service_codes for valid inputs, providing clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingARead-only
Get detailed pricing information from AWS Price List API with optional filters.
**PARAMETERS:**
- service_code (required): AWS service code (e.g., 'AmazonEC2', 'AmazonS3', 'AmazonES')
- region (optional): AWS region string (e.g., 'us-east-1') OR list for multi-region comparison (e.g., ['us-east-1', 'eu-west-1']). Omit for global services like DataTransfer or CloudFront that don't have region-specific pricing.
- filters (optional): List of filter dictionaries in format {'Field': str, 'Type': str, 'Value': str}
- max_allowed_characters (optional): Response size limit in characters (default: 100,000, use -1 for unlimited)
- output_options (optional): OutputOptions object for response transformation and size reduction
- max_results (optional): Maximum number of results to return per page (default: 100, min: 1, max: 100)
- next_token (optional): Pagination token from previous response to get next page of results
**MANDATORY WORKFLOW - ALWAYS FOLLOW:**
**Step 1: Discover Available Options**
```python
service_codes = get_pricing_service_codes() # Find correct service (skip if known)
attributes = get_pricing_service_attributes('AmazonEC2') # Discover filterable dimensions
attribute_values = get_pricing_attribute_values('AmazonEC2', 'memory') # Get valid values for filtering
```
**Step 2: Build Precise Filters**
```python
# Use ONLY values discovered in Step 1
filters = [
{"Field": "memory", "Value": ["8 GiB", "16 GiB", "32 GiB"], "Type": "ANY_OF"}, # Multiple options
{"Field": "instanceType", "Value": "m5", "Type": "CONTAINS"}, # Pattern matching
{"Field": "instanceType", "Value": ["t2", "m4"], "Type": "NONE_OF"} # Exclude older
] ```
**Step 3: Execute Query**
```python
pricing = get_pricing('AmazonEC2', 'us-east-1', filters)
```
**FILTER TYPES:**
- **EQUALS**: Exact match (default) - `{"Field": "instanceType", "Value": "m5.large"}`
- **ANY_OF**: Multiple options - `{"Field": "memory", "Value": ["8 GiB", "16 GiB"], "Type": "ANY_OF"}`
- **CONTAINS**: Pattern match - `{"Field": "instanceType", "Value": "m5", "Type": "CONTAINS"}`
- **NONE_OF**: Exclusion - `{"Field": "instanceType", "Value": ["t2", "m4"], "Type": "NONE_OF"}`
**CRITICAL: ANY_OF FILTER VALUE LIMITS:**
- **1024 CHARACTER LIMIT**: Total length of all values in ANY_OF arrays cannot exceed 1024 characters
- **PROGRESSIVE FILTERING**: Start with minimal qualifying options, expand if needed
- **EXAMPLE VIOLATION**: `["8 GiB", "16 GiB", "32 GiB", "64 GiB", "96 GiB", "128 GiB", ...]` (TOO LONG)
- **CORRECT APPROACH**: `["8 GiB", "16 GiB", "32 GiB", "36 GiB", "48 GiB"]` (TARGETED LIST)
**COMMON USE CASES:**
**COST OPTIMIZATION - EXHAUSTIVE MINIMUM-FIRST APPROACH:** When users ask for "lowest price", "cheapest", or cost optimization
- **LOWER = CHEAPER ASSUMPTION**: For cost optimization, assume lower capabilities cost less than higher ones
* 32 GB storage is cheaper than 300 GB storage
* 8 GiB RAM is cheaper than 64 GiB RAM
- **CRITICAL FOR COST QUERIES**: Start IMMEDIATELY above minimum requirement and test ALL options incrementally
- **EXHAUSTIVE ENUMERATION REQUIRED**: Each storage/memory tier is MUTUALLY EXCLUSIVE - must list each one explicitly
- **STOP AT REASONABLE UPPER BOUND**: For cost optimization, limit upper bound to 2-3x minimum requirement to avoid expensive options
- **exclude_free_products**: ESSENTIAL for cost analysis - removes $0.00 reservation placeholders, SQL licensing variants, and special pricing entries that obscure actual billable instances when finding cheapest options
- Use ANY_OF for efficient multi-option comparison in single API call
- Multi-attribute capability filtering for minimum requirements
- Combine CONTAINS + NONE_OF for refined discovery
**OUTPUT OPTIONS (Response Size & Performance Control):**
- **PURPOSE**: Transform and optimize API responses for ALL services, especially critical for large services (EC2, RDS)
- **IMMEDIATE COMBINED APPROACH**: `{"pricing_terms": ["OnDemand", "FlatRate"], "product_attributes": ["instanceType", "location", "memory"]}`
- **ATTRIBUTE DISCOVERY**: Use get_pricing_service_attributes() - same names for filters and output_options
- **SIZE REDUCTION**: 80%+ reduction with combined pricing_terms + product_attributes
- **exclude_free_products**: Remove products with $0.00 OnDemand pricing (useful when you know service has paid tiers)
- **WHEN TO USE**: Always for large services, recommended for all services to improve performance
**CRITICAL REQUIREMENTS:**
- **NEVER GUESS VALUES**: Always use get_pricing_attribute_values() to discover valid options
- **EXHAUSTIVE ENUMERATION**: For cost optimization, list ALL qualifying tiers individually - they are mutually exclusive
- **USE SPECIFIC FILTERS**: Large services (EC2, RDS) require 2-3 filters minimum
- **NEVER USE MULTIPLE CALLS**: When ANY_OF can handle it in one call
- **VERIFY EXISTENCE**: Ensure all filter values exist in the service before querying
- **FOR "CHEAPEST" QUERIES**: Focus on lower-end options that meet minimum requirements, test incrementally
- **EXPLORE ALTERNATIVES**: When response includes "alternatives" field, MUST fetch their pricing if applicable to the use case before answering
**CONSTRAINTS:**
- **CURRENT PRICING ONLY**: Use get_price_list_urls for historical data
- **NO SPOT/SAVINGS PLANS**: Only OnDemand, FlatRate, and Reserved Instance pricing available (ANY combination possible)
- **CHARACTER LIMIT**: 100,000 characters default response limit (use output_options to reduce)
- **REGION AUTO-FILTER**: Region parameter automatically creates regionCode filter
**ANTI-PATTERNS:**
- DO NOT make multiple API calls that could be combined with ANY_OF
- DO NOT build cross-products manually when API can handle combinations
- DO NOT call get_pricing_service_codes() when service code is already known (e.g., "AmazonEC2")
- DO NOT use EQUALS without first checking get_pricing_attribute_values()
- DO NOT skip discovery workflow for any use case
- DO NOT use broad queries without specific filters on large services
- DO NOT assume attribute values exist across different services/regions
- DO NOT skip intermediate tiers: Missing 50GB, 59GB options when testing 32GB → 75GB jump
- DO NOT set upper bounds too high: Including 500GB+ storage when user needs ≥30GB (wastes character limit)
- DO NOT ignore alternatives field or use only ["OnDemand"] in output_options
**EXAMPLE USE CASES:**
**1. Cost-Optimized Multi-Attribute Filtering (CORRECT APPROACH):**
```python
# Find cheapest EC2 instances meeting minimum requirements (>= 8 GiB memory, >= 30 GB storage)
# EXHAUSTIVE ENUMERATION of qualifying tiers - each is mutually exclusive
filters = [
{"Field": "memory", "Value": ["8 GiB", "16 GiB", "32 GiB"], "Type": "ANY_OF"}, # All tiers ≥8GB up to reasonable limit
{"Field": "storage", "Value": ["1 x 32 SSD", "1 x 60 SSD", "1 x 75 NVMe SSD"], "Type": "ANY_OF"}, # All tiers ≥30GB up to reasonable limit
{"Field": "instanceType", "Value": ["t2", "m4"], "Type": "NONE_OF"}, # Exclude older generations
{"Field": "tenancy", "Value": "Shared", "Type": "EQUALS"} # Exclude more expensive dedicated
]
pricing = get_pricing('AmazonEC2', 'us-east-1', filters)
```
**2. Efficient Multi-Region Comparison:**
```python
# Compare same configuration across regions - use region parameter for multi-region
filters = [{"Field": "instanceType", "Value": "m5.large", "Type": "EQUALS"}]
pricing = get_pricing('AmazonEC2', ['us-east-1', 'us-west-2', 'eu-west-1'], filters)
```
**3. Large service with output optimization (recommended approach):**
```python
output_options = {"pricing_terms": ["OnDemand", "FlatRate"], "product_attributes": ["instanceType", "location"], "exclude_free_products": true}
pricing = get_pricing('AmazonEC2', 'us-east-1', filters, output_options=output_options)
```
**4. Pattern-Based Discovery:**
```python
# Find all Standard storage tiers except expensive ones
filters = [
{"Field": "storageClass", "Value": "Standard", "Type": "CONTAINS"},
{"Field": "storageClass", "Value": ["Standard-IA"], "Type": "NONE_OF"}
]
```
**FILTERING STRATEGY:**
- **Large Services (EC2, RDS)**: ALWAYS use 2-3 specific filters to prevent 200+ record responses
- **Small Services**: May work with single filter or no filters
- **Multi-Option Analysis**: Use ANY_OF instead of multiple API calls
- **Pattern Discovery**: Use CONTAINS for finding families or tiers
- **Smart Exclusion**: Use NONE_OF for compliance or cost filtering
**SUCCESS CRITERIA:**
- Used discovery workflow (skip get_pricing_service_codes() if service known)
- Applied appropriate filters for the service size
- Used exact values from get_pricing_attribute_values()
- Used ANY_OF for multi-option scenarios instead of multiple calls
- For cost optimization: tested ALL qualifying tiers exhaustively (in a reasonable range)
- Included ["OnDemand", "FlatRate"] in output_options and explored all alternatives
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | AWS region(s) - single region string (e.g., "us-east-1") or list for multi-region comparison (e.g., ["us-east-1", "us-west-2", "eu-west-1"]). Optional: omit for global services like DataTransfer or CloudFront that don't have region-specific pricing. | |
| filters | No | Optional list of filters to apply to the pricing query | |
| next_token | No | Pagination token from previous response to get next page of results | |
| max_results | No | Maximum number of results to return per page (default: 100, max: 100) | |
| service_code | Yes | AWS service code (e.g., "AmazonEC2", "AmazonS3", "AmazonES") | |
| output_options | No | Optional output filtering options to reduce response size. Use {"pricing_terms": ["OnDemand", "FlatRate"]} to significantly reduce response size for large services like EC2. | |
| max_allowed_characters | No | Maximum response length in characters (default: 100,000, use -1 for unlimited) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true, the description adds substantial behavioral context beyond that: character limits, region auto-filtering, limitations on spot/savings plans, the 1024-character ANY_OF limit, and the behavior of output_options for size reduction. This exceeds what annotations provide and covers critical operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely long and contains redundancy (e.g., repeated emphasis on exhaustive enumeration and exclude_free_products). While it is well-structured with clear sections and front-loaded summary, it could be significantly trimmed without losing important information. The length may overwhelm agents, despite the effective use of code examples and bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested filter objects, output_options transformation), the description covers all necessary context: discovery workflow, filter construction, output size control, constraints, anti-patterns, and success criteria. The output schema provides return structure, so the description appropriately focuses on methodology and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description goes far beyond the schema. It explains filter types in detail (EQUALS, ANY_OF, CONTAINS, NONE_OF), the meaning of the output_options fields, the max_allowed_characters semantics, and provides concrete examples of valid filter structures and discovery workflows. This adds significant value beyond parameter names and default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: 'Get detailed pricing information from AWS Price List API with optional filters.' It uses a specific verb+resource combination and differentiates from siblings like get_pricing_service_codes and get_pricing_attribute_values, which serve the discovery workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidelines are exceptionally explicit: a mandatory discovery workflow, common use cases (cost optimization, multi-region comparison), anti-patterns, and filtering strategies. It also names alternatives like get_price_list_urls for historical data and explicitly states when to skip discovery steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricing_attribute_valuesARead-only
Get valid values for pricing filter attributes.
**PURPOSE:** Discover what values are available for specific pricing filter attributes of an AWS service.
**WORKFLOW:** Use this after get_pricing_service_attributes() to see valid values for each filter attribute.
**PARAMETERS:**
- Service code from get_pricing_service_codes() (e.g., 'AmazonEC2', 'AmazonRDS')
- region (optional): AWS region (e.g., 'us-east-1', 'eu-west-2'). Defaults to AWS_REGION env var. Set this to match the region you plan to query with get_pricing().
- List of attribute names from get_pricing_service_attributes() (e.g., ['instanceType', 'location'])
- filters (optional): Dictionary mapping attribute names to regex patterns (e.g., {'instanceType': 't3'})
**RETURNS:** Dictionary mapping attribute names to their valid values. Filtered attributes return only matching values, unfiltered attributes return all values.
**EXAMPLE RETURN:**
```
{
'instanceType': ['t2.micro', 't3.medium', 'm5.large', ...],
'location': ['US East (N. Virginia)', 'EU (London)', ...]
}
```
**NEXT STEPS:** Use these values in get_pricing() filters to get specific pricing data.
**ERROR HANDLING:** Uses "all-or-nothing" approach - if any attribute fails, the entire operation fails.
**EXAMPLES:**
- Single attribute: ['instanceType'] returns {'instanceType': ['t2.micro', 't3.medium', ...]}
- Multiple attributes: ['instanceType', 'location'] returns both mappings
- Partial filtering: filters={'instanceType': 't3'} applies only to instanceType, location returns all values
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | AWS region (e.g., "us-east-1", "eu-west-2"). Defaults to AWS_REGION env var (us-east-1). Attributes and values can differ by region, so set this to match the region you plan to query with get_pricing(). | |
| filters | No | Optional dictionary mapping attribute names to regex patterns for filtering their values (e.g., {"instanceType": "t3", "operatingSystem": "Linux"}) | |
| service_code | Yes | AWS service code (e.g., "AmazonEC2", "AmazonS3", "AmazonES") | |
| attribute_names | Yes | List of attribute names (e.g., ["instanceType", "location", "storageClass"]) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=true, so the description only needs to add extra behavioral context. It does so by disclosing the 'all-or-nothing' error handling and explaining how filters partially apply (e.g., 'filters applies only to instanceType, location returns all values'). This goes beyond the annotation and is valuable for predicting tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (PURPOSE, WORKFLOW, PARAMETERS, RETURNS, etc.) and front-loads the core purpose. It is somewhat lengthy and repeats some schema content, but every section adds useful context such as error handling and examples, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers all essential aspects: purpose, workflow, parameter usage, return format, error handling, and examples. It also includes an example return structure, making it fully self-contained for an agent to understand invocation and expected output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter descriptions, so the baseline is 3. The description adds value by including concrete examples for each parameter, clarifying the 'filters' behavior with regex patterns, and explaining the region default and its importance for matching get_pricing() queries. This enriches the semantics beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Get valid values for pricing filter attributes,' which is a specific verb and resource. It clearly distinguishes from sibling tools by noting it is used after get_pricing_service_attributes() to discover valid values, whereas get_pricing_service_attributes returns attribute names themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit workflow context: 'Use this after get_pricing_service_attributes()' and 'Use these values in get_pricing() filters.' It also advises setting the region to match the region used in get_pricing(). However, it does not explicitly state when not to use this tool or mention alternative tools for different scenarios, so it lacks a full when/when-not structure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricing_service_attributesARead-only
Get filterable attributes available for an AWS service in the Pricing API.
**PURPOSE:** Discover what pricing dimensions (filters) are available for a specific AWS service.
**WORKFLOW:** Use this after get_pricing_service_codes() to see what filters you can apply to narrow down pricing queries.
**PARAMETERS:**
- service_code: AWS service code from get_pricing_service_codes() (e.g., 'AmazonEC2', 'AmazonRDS')
- region (optional): AWS region (e.g., 'us-east-1', 'eu-west-2'). Defaults to AWS_REGION env var. Set this to match the region you plan to query with get_pricing().
- filter (optional): Case-insensitive regex pattern to filter attribute names (e.g., "instance" matches "instanceType", "instanceFamily")
**RETURNS:** List of attribute names (e.g., 'instanceType', 'location', 'storageClass') that can be used as filters.
**NEXT STEPS:**
- Use get_pricing_attribute_values() to see valid values for each attribute
- Use these attributes in get_pricing() filters to get specific pricing data
**EXAMPLE:** For 'AmazonRDS' you might get ['engineCode', 'instanceType', 'deploymentOption', 'location'].
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional case-insensitive regex pattern to filter service attribute names | |
| region | No | AWS region (e.g., "us-east-1", "eu-west-2"). Defaults to AWS_REGION env var (us-east-1). Attributes and values can differ by region, so set this to match the region you plan to query with get_pricing(). | |
| service_code | Yes | AWS service code (e.g., "AmazonEC2", "AmazonS3", "AmazonES") |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds context about default region behavior (AWS_REGION env var), case-insensitive regex filtering, and return value format (list of attribute names). This goes beyond the annotation without contradicting it, though it doesn't discuss edge cases like empty results or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear headers (PURPOSE, WORKFLOW, PARAMETERS, RETURNS, NEXT STEPS, EXAMPLE). Every section adds value, and the purpose is front-loaded in the first sentence. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers purpose, parameters, return values, usage order relative to sibling tools, and an example. Even with an output schema present, it explains what the return data looks like ('List of attribute names'), making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds examples for service_code ('AmazonEC2', 'AmazonRDS'), explains the region parameter's default and why it matters, and illustrates the filter regex with examples. This enriches the schema descriptions meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get filterable attributes available for an AWS service in the Pricing API.' It clearly distinguishes itself from siblings by focusing on filterable attributes, and the workflow section explicitly contrasts with get_pricing_service_codes and get_pricing_attribute_values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit workflow guidance: 'Use this after get_pricing_service_codes()' and instructs to use get_pricing_attribute_values() next. It also tells users to match the region to get_pricing(), giving clear when-to-use and alternative paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricing_service_codesARead-only
Get AWS service codes available in the Price List API.
**PURPOSE:** Discover which AWS services have pricing information available in the AWS Price List API.
**PARAMETERS:**
- filter (optional): Case-insensitive regex pattern to filter service codes (e.g., "bedrock" matches "AmazonBedrock", "AmazonBedrockService")
**WORKFLOW:** This is the starting point for any pricing query. Use this first to find the correct service code.
**RETURNS:** List of service codes (e.g., 'AmazonEC2', 'AmazonS3', 'AWSLambda') that can be used with other pricing tools.
**NEXT STEPS:**
- Use get_pricing_service_attributes() to see what filters are available for a service
- Use get_pricing() to get actual pricing data for a service
**NOTE:** Service codes may differ from AWS console names (e.g., 'AmazonES' for OpenSearch, 'AWSLambda' for Lambda).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional case-insensitive regex pattern to filter service codes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, establishing the tool is safe. The description adds valuable behavioral context: it returns a list of service codes, notes that service codes may differ from AWS console names (with examples), and explains filter behavior. This exceeds the bar set by the calibration example get_calls, which only added date-range scope. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (PURPOSE, PARAMETERS, WORKFLOW, RETURNS, NEXT STEPS, NOTE). It is front-loaded with the primary purpose. Every section adds value: the NOTE about naming differences prevents common mistakes, while NEXT STEPS guides further action. Despite being longer than typical, it is appropriately sized for the tool's discovery role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 optional param) and has a documented output schema, but the description goes beyond minimal requirements by explaining the return values, providing usage workflow, and listing sibling tools to use next. It is self-contained for an agent to correctly invoke and interpret the result. The output schema exists, so return-detail explanation is optional, but the description still covers it redundantly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter, but the description enhances understanding with a concrete example: '"bedrock" matches "AmazonBedrock", "AmazonBedrockService"'. This demonstrates regex case-insensitivity and partial matching, which the schema's brief description does not convey. The description also clarifies that the filter is optional, reinforcing the schema's default null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get AWS service codes available in the Price List API.' It uses a specific verb ('Get') and resource ('AWS service codes'), and distinguishes itself from siblings like get_pricing (which retrieves actual pricing data) and get_pricing_service_attributes (which gets filters). This makes the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'This is the starting point for any pricing query. Use this first to find the correct service code.' It also names alternatives in NEXT STEPS: use get_pricing_service_attributes() for filters and get_pricing() for actual pricing data. This provides clear when-to-use and when-to-move-on guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v1.0.24- First observed
analyze_cdk_project - First observed
analyze_terraform_project - First observed
generate_cost_report - First observed
get_bedrock_patterns - First observed
get_price_list_urls - First observed
get_pricing - First observed
get_pricing_attribute_values - First observed
get_pricing_service_attributes - First observed
get_pricing_service_codes
TDQS
Each tool has a distinct role: service discovery, attribute discovery, value discovery, pricing retrieval, bulk download, report generation, project type analysis, and Bedrock patterns. The discovery tools follow a clear progression with no overlap.
All tool names use a verb_noun pattern in snake_case. The verbs vary (get, analyze, generate) but the pattern is consistent and the nouns clearly describe the target resource or action.
Nine tools is well-scoped for an AWS pricing server. It covers the full discovery-to-pricing workflow, plus bulk data access, project analysis, and report generation without unnecessary bloat.
The set covers the complete pricing data lifecycle: discover service codes, attributes, attribute values, fetch current pricing, access historical/bulk data, and generate cost reports. Project analyzers fill the gap of identifying relevant services from code.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for AWS cloud spend: service breakdowns, anomalies, savings and forecasts.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
An MCP server giving access to Grafana dashboards, data and more.
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
21
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn MCP server that exposes AWS EC2 pricing data with an option to search by CPU, RAM, networking21PythonMIT
- AlicenseBqualityCmaintenanceAn MCP server for unified cost tracking and analysis across AWS, OpenAI, and Anthropic. It enables users to query expenditures, compare costs across providers, and analyze usage trends through natural language.10MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that provides tools for automating AWS Pricing Calculator estimate generation.MIT
- FlicenseNot gradedqualityDmaintenanceThis MCP server enables querying Azure resource pricing programmatically through a structured workflow, including listing service families, service names, products, and calculating monthly costs.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sebdroid/aws-pricing-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server