#
tokens: 52493/50000 1/2461 files (page 506/537)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 506 of 537. Use http://codebase.md/awslabs/mcp?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .devcontainer
│   └── devcontainer.json
├── .github
│   ├── actions
│   │   ├── build-and-push-container-image
│   │   │   └── action.yml
│   │   └── clear-space-ubuntu-latest-agressively
│   │       └── action.yml
│   ├── codecov.yml
│   ├── CODEOWNERS
│   ├── dependabot.yml
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.yml
│   │   ├── documentation.yml
│   │   ├── feature_request.yml
│   │   ├── rfc.yml
│   │   └── support_awslabs_mcp_servers.yml
│   ├── pull_request_template.md
│   ├── SECURITY
│   ├── SUPPORT
│   └── workflows
│       ├── aws-api-mcp-upgrade-version.yml
│       ├── bandit-requirements.txt
│       ├── bandit.yml
│       ├── cfn_nag.yml
│       ├── check-gh-pages-builds.yml
│       ├── check-license-header-hash.txt
│       ├── check-license-header.json
│       ├── check-license-header.yml
│       ├── checkov.yml
│       ├── codeql.yml
│       ├── dependency-review-action.yml
│       ├── detect-secrets-requirements.txt
│       ├── gh-pages.yml
│       ├── merge-prevention.yml
│       ├── powershell.yml
│       ├── pre-commit-requirements.txt
│       ├── pre-commit.yml
│       ├── pull-request-lint.yml
│       ├── python.yml
│       ├── RELEASE_INSTRUCTIONS.md
│       ├── release-initiate-branch.yml
│       ├── release-merge-tag.yml
│       ├── release.py
│       ├── release.yml
│       ├── scanners.yml
│       ├── scorecard-analysis.yml
│       ├── semgrep-requirements.txt
│       ├── semgrep.yml
│       ├── stale.yml
│       ├── trivy.yml
│       └── typescript.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .python-version
├── .ruff.toml
├── .secrets.baseline
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DESIGN_GUIDELINES.md
├── DEVELOPER_GUIDE.md
├── docs
│   └── images
│       └── root-readme
│           ├── cline-api-provider-filled.png
│           ├── cline-chat-interface.png
│           ├── cline-custom-instructions.png
│           ├── cline-select-aws-profile.png
│           ├── cline-select-bedrock.png
│           ├── configure-mcp-servers.png
│           ├── install-cline-extension.png
│           ├── mcp-servers-installed.png
│           └── select-mcp-servers.png
├── docusaurus
│   ├── .gitignore
│   ├── docs
│   │   ├── installation.md
│   │   ├── intro.md
│   │   ├── samples
│   │   │   ├── index.md
│   │   │   ├── mcp-integration-with-kb.md
│   │   │   ├── mcp-integration-with-nova-canvas.md
│   │   │   └── stepfunctions-tool-mcp-server.md
│   │   ├── servers
│   │   │   ├── amazon-bedrock-agentcore-mcp-server.md
│   │   │   ├── amazon-keyspaces-mcp-server.md
│   │   │   ├── amazon-mq-mcp-server.md
│   │   │   ├── amazon-neptune-mcp-server.md
│   │   │   ├── amazon-qbusiness-anonymous-mcp-server.md
│   │   │   ├── amazon-qindex-mcp-server.md
│   │   │   ├── amazon-sns-sqs-mcp-server.md
│   │   │   ├── aurora-dsql-mcp-server.md
│   │   │   ├── aws-api-mcp-server.md
│   │   │   ├── aws-appsync-mcp-server.md
│   │   │   ├── aws-bedrock-custom-model-import-mcp-server.md
│   │   │   ├── aws-bedrock-data-automation-mcp-server.md
│   │   │   ├── aws-dataprocessing-mcp-server.md
│   │   │   ├── aws-diagram-mcp-server.md
│   │   │   ├── aws-documentation-mcp-server.md
│   │   │   ├── aws-healthomics-mcp-server.md
│   │   │   ├── aws-iot-sitewise-mcp-server.md
│   │   │   ├── aws-knowledge-mcp-server.md
│   │   │   ├── aws-location-mcp-server.md
│   │   │   ├── aws-msk-mcp-server.md
│   │   │   ├── aws-pricing-mcp-server.md
│   │   │   ├── aws-serverless-mcp-server.md
│   │   │   ├── aws-support-mcp-server.md
│   │   │   ├── bedrock-kb-retrieval-mcp-server.md
│   │   │   ├── billing-cost-management-mcp-server.md
│   │   │   ├── ccapi-mcp-server.md
│   │   │   ├── cdk-mcp-server.md
│   │   │   ├── cfn-mcp-server.md
│   │   │   ├── cloudtrail-mcp-server.md
│   │   │   ├── cloudwatch-appsignals-mcp-server.md
│   │   │   ├── cloudwatch-mcp-server.md
│   │   │   ├── code-doc-gen-mcp-server.md
│   │   │   ├── core-mcp-server.md
│   │   │   ├── cost-explorer-mcp-server.md
│   │   │   ├── documentdb-mcp-server.md
│   │   │   ├── dynamodb-mcp-server.md
│   │   │   ├── ecs-mcp-server.md
│   │   │   ├── eks-mcp-server.md
│   │   │   ├── elasticache-mcp-server.md
│   │   │   ├── finch-mcp-server.md
│   │   │   ├── frontend-mcp-server.md
│   │   │   ├── git-repo-research-mcp-server.md
│   │   │   ├── healthlake-mcp-server.md
│   │   │   ├── iam-mcp-server.md
│   │   │   ├── kendra-index-mcp-server.md
│   │   │   ├── lambda-tool-mcp-server.md
│   │   │   ├── memcached-mcp-server.md
│   │   │   ├── mysql-mcp-server.md
│   │   │   ├── nova-canvas-mcp-server.md
│   │   │   ├── openapi-mcp-server.md
│   │   │   ├── postgres-mcp-server.md
│   │   │   ├── prometheus-mcp-server.md
│   │   │   ├── redshift-mcp-server.md
│   │   │   ├── s3-tables-mcp-server.md
│   │   │   ├── stepfunctions-tool-mcp-server.md
│   │   │   ├── syntheticdata-mcp-server.md
│   │   │   ├── terraform-mcp-server.md
│   │   │   ├── timestream-for-influxdb-mcp-server.md
│   │   │   ├── valkey-mcp-server.md
│   │   │   └── well-architected-security-mcp-server.mdx
│   │   └── vibe_coding.md
│   ├── docusaurus.config.ts
│   ├── package-lock.json
│   ├── package.json
│   ├── README.md
│   ├── sidebars.ts
│   ├── src
│   │   ├── components
│   │   │   ├── HomepageFeatures
│   │   │   │   └── styles.module.css
│   │   │   └── ServerCards
│   │   │       ├── index.tsx
│   │   │       └── styles.module.css
│   │   ├── css
│   │   │   ├── custom.css
│   │   │   └── doc-override.css
│   │   └── pages
│   │       ├── index.module.css
│   │       └── servers.tsx
│   ├── static
│   │   ├── .nojekyll
│   │   ├── assets
│   │   │   ├── icons
│   │   │   │   ├── activity.svg
│   │   │   │   ├── book-open.svg
│   │   │   │   ├── cpu.svg
│   │   │   │   ├── database.svg
│   │   │   │   ├── dollar-sign.svg
│   │   │   │   ├── help-circle.svg
│   │   │   │   ├── key.svg
│   │   │   │   ├── server.svg
│   │   │   │   ├── share-2.svg
│   │   │   │   ├── tool.svg
│   │   │   │   └── zap.svg
│   │   │   └── server-cards.json
│   │   └── img
│   │       ├── aws-logo.svg
│   │       └── logo.png
│   └── tsconfig.json
├── LICENSE
├── NOTICE
├── README.md
├── samples
│   ├── mcp-integration-with-kb
│   │   ├── .env.example
│   │   ├── .python-version
│   │   ├── assets
│   │   │   └── simplified-mcp-flow-diagram.png
│   │   ├── clients
│   │   │   └── client_server.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── user_interfaces
│   │   │   └── chat_bedrock_st.py
│   │   └── uv.lock
│   ├── mcp-integration-with-nova-canvas
│   │   ├── .env.example
│   │   ├── .python-version
│   │   ├── clients
│   │   │   └── client_server.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── user_interfaces
│   │   │   └── image_generator_st.py
│   │   └── uv.lock
│   ├── README.md
│   └── stepfunctions-tool-mcp-server
│       ├── README.md
│       └── sample_state_machines
│           ├── customer-create
│           │   └── app.py
│           ├── customer-id-from-email
│           │   └── app.py
│           ├── customer-info-from-id
│           │   └── app.py
│           └── template.yml
├── scripts
│   ├── README.md
│   └── verify_package_name.py
├── src
│   ├── amazon-bedrock-agentcore-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_bedrock_agentcore_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── config.py
│   │   │       ├── server.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── cache.py
│   │   │           ├── doc_fetcher.py
│   │   │           ├── indexer.py
│   │   │           ├── text_processor.py
│   │   │           └── url_validator.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── SECURITY.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_cache.py
│   │   │   ├── test_config.py
│   │   │   ├── test_doc_fetcher.py
│   │   │   ├── test_indexer.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_server.py
│   │   │   ├── test_text_processor.py
│   │   │   └── test_url_validator.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── amazon-kendra-index-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_kendra_index_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── server.py
│   │   │       └── util.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── amazon-keyspaces-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_keyspaces_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── client.py
│   │   │       ├── config.py
│   │   │       ├── consts.py
│   │   │       ├── llm_context.py
│   │   │       ├── models.py
│   │   │       ├── server.py
│   │   │       └── services.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_client.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_query_analysis_service.py
│   │   │   ├── test_server.py
│   │   │   └── test_services.py
│   │   └── uv.lock
│   ├── amazon-mq-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_mq_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── aws_service_mcp_generator.py
│   │   │       ├── consts.py
│   │   │       ├── rabbitmq
│   │   │       │   ├── __init__.py
│   │   │       │   ├── admin.py
│   │   │       │   ├── connection.py
│   │   │       │   ├── doc
│   │   │       │   │   ├── rabbitmq_broker_sizing_guide.md
│   │   │       │   │   ├── rabbitmq_performance_optimization_best_practice.md
│   │   │       │   │   ├── rabbitmq_production_deployment_guidelines.md
│   │   │       │   │   ├── rabbitmq_quorum_queue_migration_guide.md
│   │   │       │   │   └── rabbitmq_setup_best_practice.md
│   │   │       │   ├── handlers.py
│   │   │       │   └── module.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── example
│   │   │   └── sample_mcp_q_cli.json
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── rabbitmq
│   │   │   │   ├── __init__.py
│   │   │   │   ├── conftest.py
│   │   │   │   ├── test_admin.py
│   │   │   │   ├── test_connection.py
│   │   │   │   ├── test_handlers.py
│   │   │   │   └── test_module.py
│   │   │   ├── test_aws_service_mcp_generator.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── amazon-neptune-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_neptune_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── exceptions.py
│   │   │       ├── graph_store
│   │   │       │   ├── __init__.py
│   │   │       │   ├── analytics.py
│   │   │       │   ├── base.py
│   │   │       │   └── database.py
│   │   │       ├── models.py
│   │   │       ├── neptune.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_analytics.py
│   │   │   ├── test_database.py
│   │   │   ├── test_exceptions.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_models.py
│   │   │   ├── test_neptune.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── amazon-qbusiness-anonymous-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_qbusiness_anonymous_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── clients.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── amazon-qindex-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_qindex_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── clients.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_clients.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── test_server.py
│   │   └── uv.lock
│   ├── amazon-sns-sqs-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── amazon_sns_sqs_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── common.py
│   │   │       ├── consts.py
│   │   │       ├── generator.py
│   │   │       ├── server.py
│   │   │       ├── sns.py
│   │   │       └── sqs.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── print_tools.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── test_common.py
│   │   │   ├── test_generator.py
│   │   │   ├── test_server.py
│   │   │   ├── test_sns.py
│   │   │   └── test_sqs.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aurora-dsql-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aurora_dsql_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── consts.py
│   │   │       ├── mutable_sql_detector.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_connection_reuse.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_profile_option.py
│   │   │   ├── test_readonly_enforcement.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-api-mcp-server
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_api_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── core
│   │   │       │   ├── __init__.py
│   │   │       │   ├── agent_scripts
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── manager.py
│   │   │       │   │   ├── models.py
│   │   │       │   │   └── registry
│   │   │       │   │       ├── __init__.py
│   │   │       │   │       ├── application-failure-troubleshooting.script.md
│   │   │       │   │       ├── cloudtral-mutli-region-setup.script.md
│   │   │       │   │       ├── create_amazon_aurora_db_cluster_with_instances.script.md
│   │   │       │   │       ├── lambda-timeout-debugging.script.md
│   │   │       │   │       ├── scripts_format.md
│   │   │       │   │       └── troubleshoot-permissions-with-cloudtrail-events.script.md
│   │   │       │   ├── aws
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── driver.py
│   │   │       │   │   ├── pagination.py
│   │   │       │   │   ├── regions.py
│   │   │       │   │   ├── service.py
│   │   │       │   │   └── services.py
│   │   │       │   ├── common
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── command_metadata.py
│   │   │       │   │   ├── command.py
│   │   │       │   │   ├── config.py
│   │   │       │   │   ├── errors.py
│   │   │       │   │   ├── file_operations.py
│   │   │       │   │   ├── file_system_controls.py
│   │   │       │   │   ├── helpers.py
│   │   │       │   │   ├── models.py
│   │   │       │   │   └── py.typed
│   │   │       │   ├── data
│   │   │       │   │   └── api_metadata.json
│   │   │       │   ├── metadata
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── read_only_operations_list.py
│   │   │       │   ├── parser
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── custom_validators
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── botocore_param_validator.py
│   │   │       │   │   │   ├── ec2_validator.py
│   │   │       │   │   │   └── ssm_validator.py
│   │   │       │   │   ├── interpretation.py
│   │   │       │   │   ├── lexer.py
│   │   │       │   │   └── parser.py
│   │   │       │   ├── py.typed
│   │   │       │   └── security
│   │   │       │       ├── __init__.py
│   │   │       │       ├── aws_api_customization.json
│   │   │       │       └── policy.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── CONTRIBUTING.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── agent_scripts
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_manager.py
│   │   │   │   └── test_registry
│   │   │   │       ├── another_valid_script.script.md
│   │   │   │       ├── test_script.script.md
│   │   │   │       └── valid_script.script.md
│   │   │   ├── aws
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_driver.py
│   │   │   │   ├── test_pagination.py
│   │   │   │   ├── test_service.py
│   │   │   │   └── test_services.py
│   │   │   ├── common
│   │   │   │   ├── test_command.py
│   │   │   │   ├── test_config.py
│   │   │   │   ├── test_file_operations.py
│   │   │   │   ├── test_file_system_controls.py
│   │   │   │   ├── test_file_validation.py
│   │   │   │   └── test_helpers.py
│   │   │   ├── fixtures.py
│   │   │   ├── history_handler.py
│   │   │   ├── metadata
│   │   │   │   ├── __init__.py
│   │   │   │   └── test_read_only_operations_list.py
│   │   │   ├── parser
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_file_path_detection.py
│   │   │   │   ├── test_lexer.py
│   │   │   │   ├── test_parser_customizations.py
│   │   │   │   └── test_parser.py
│   │   │   ├── test_security_policy.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-appsync-mcp-server
│   │   ├── .dockerignore
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_appsync_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── decorators.py
│   │   │       ├── helpers.py
│   │   │       ├── operations
│   │   │       │   ├── __init__.py
│   │   │       │   ├── create_api_cache.py
│   │   │       │   ├── create_api_key.py
│   │   │       │   ├── create_api.py
│   │   │       │   ├── create_channel_namespace.py
│   │   │       │   ├── create_datasource.py
│   │   │       │   ├── create_domain_name.py
│   │   │       │   ├── create_function.py
│   │   │       │   ├── create_graphql_api.py
│   │   │       │   ├── create_resolver.py
│   │   │       │   └── create_schema.py
│   │   │       ├── server.py
│   │   │       ├── tools
│   │   │       │   ├── __init__.py
│   │   │       │   ├── create_api_cache.py
│   │   │       │   ├── create_api_key.py
│   │   │       │   ├── create_api.py
│   │   │       │   ├── create_channel_namespace.py
│   │   │       │   ├── create_datasource.py
│   │   │       │   ├── create_domain_name.py
│   │   │       │   ├── create_function.py
│   │   │       │   ├── create_graphql_api.py
│   │   │       │   ├── create_resolver.py
│   │   │       │   └── create_schema.py
│   │   │       └── validators.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_all_create_tools_write_protection.py
│   │   │   ├── test_create_api_cache.py
│   │   │   ├── test_create_api_key.py
│   │   │   ├── test_create_api.py
│   │   │   ├── test_create_channel_namespace.py
│   │   │   ├── test_create_datasource_tool.py
│   │   │   ├── test_create_datasource.py
│   │   │   ├── test_create_domain_name.py
│   │   │   ├── test_create_function.py
│   │   │   ├── test_create_graphql_api.py
│   │   │   ├── test_create_resolver.py
│   │   │   ├── test_create_schema_tool.py
│   │   │   ├── test_create_schema.py
│   │   │   ├── test_helpers.py
│   │   │   ├── test_server.py
│   │   │   ├── test_validators.py
│   │   │   └── test_write_operation.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-bedrock-custom-model-import-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_bedrock_custom_model_import_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── client.py
│   │   │       ├── llm_context.py
│   │   │       ├── models.py
│   │   │       ├── prompts.py
│   │   │       ├── server.py
│   │   │       ├── services
│   │   │       │   ├── __init__.py
│   │   │       │   ├── imported_model_service.py
│   │   │       │   └── model_import_service.py
│   │   │       ├── tools
│   │   │       │   ├── create_model_import_job.py
│   │   │       │   ├── delete_imported_model.py
│   │   │       │   ├── get_imported_model.py
│   │   │       │   ├── get_model_import_job.py
│   │   │       │   ├── list_imported_models.py
│   │   │       │   └── list_model_import_jobs.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── aws.py
│   │   │           ├── config.py
│   │   │           ├── consts.py
│   │   │           └── matching.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── services
│   │   │   │   ├── test_imported_model_service.py
│   │   │   │   └── test_model_import_service.py
│   │   │   ├── test_client.py
│   │   │   ├── test_init.py
│   │   │   ├── test_llm_context.py
│   │   │   ├── test_prompts.py
│   │   │   ├── test_server.py
│   │   │   ├── tools
│   │   │   │   ├── test_create_model_import_job.py
│   │   │   │   ├── test_delete_imported_model.py
│   │   │   │   ├── test_get_imported_model.py
│   │   │   │   ├── test_get_model_import_job.py
│   │   │   │   ├── test_list_imported_models.py
│   │   │   │   └── test_list_model_import_jobs.py
│   │   │   └── utils
│   │   │       ├── test_aws.py
│   │   │       ├── test_config.py
│   │   │       └── test_matching.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-bedrock-data-automation-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_bedrock_data_automation_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── helpers.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_helpers.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-dataprocessing-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_dataprocessing_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── core
│   │   │       │   ├── __init__.py
│   │   │       │   └── glue_data_catalog
│   │   │       │       ├── __init__.py
│   │   │       │       ├── data_catalog_database_manager.py
│   │   │       │       ├── data_catalog_handler.py
│   │   │       │       └── data_catalog_table_manager.py
│   │   │       ├── handlers
│   │   │       │   ├── __init__.py
│   │   │       │   ├── athena
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── athena_data_catalog_handler.py
│   │   │       │   │   ├── athena_query_handler.py
│   │   │       │   │   └── athena_workgroup_handler.py
│   │   │       │   ├── commons
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── common_resource_handler.py
│   │   │       │   ├── emr
│   │   │       │   │   ├── emr_ec2_cluster_handler.py
│   │   │       │   │   ├── emr_ec2_instance_handler.py
│   │   │       │   │   └── emr_ec2_steps_handler.py
│   │   │       │   └── glue
│   │   │       │       ├── __init__.py
│   │   │       │       ├── crawler_handler.py
│   │   │       │       ├── data_catalog_handler.py
│   │   │       │       ├── glue_commons_handler.py
│   │   │       │       ├── glue_etl_handler.py
│   │   │       │       ├── interactive_sessions_handler.py
│   │   │       │       └── worklows_handler.py
│   │   │       ├── models
│   │   │       │   ├── __init__.py
│   │   │       │   ├── athena_models.py
│   │   │       │   ├── common_resource_models.py
│   │   │       │   ├── data_catalog_models.py
│   │   │       │   ├── emr_models.py
│   │   │       │   └── glue_models.py
│   │   │       ├── server.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── aws_helper.py
│   │   │           ├── consts.py
│   │   │           ├── logging_helper.py
│   │   │           └── sql_analyzer.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── core
│   │   │   │   ├── __init__.py
│   │   │   │   └── glue_data_catalog
│   │   │   │       ├── __init__.py
│   │   │   │       ├── test_data_catalog_database_manager.py
│   │   │   │       ├── test_data_catalog_handler.py
│   │   │   │       └── test_data_catalog_table_manager.py
│   │   │   ├── handlers
│   │   │   │   ├── __init__.py
│   │   │   │   ├── athena
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── test_athena_data_catalog_handler.py
│   │   │   │   │   ├── test_athena_query_handler.py
│   │   │   │   │   ├── test_athena_workgroup_handler.py
│   │   │   │   │   └── test_custom_tags_athena.py
│   │   │   │   ├── commons
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── test_common_resource_handler.py
│   │   │   │   ├── emr
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── test_custom_tags_emr.py
│   │   │   │   │   ├── test_emr_ec2_cluster_handler.py
│   │   │   │   │   ├── test_emr_ec2_instance_handler.py
│   │   │   │   │   └── test_emr_ec2_steps_handler.py
│   │   │   │   └── glue
│   │   │   │       ├── __init__.py
│   │   │   │       ├── test_crawler_handler.py
│   │   │   │       ├── test_custom_tags_glue.py
│   │   │   │       ├── test_data_catalog_handler.py
│   │   │   │       ├── test_glue_commons_handler.py
│   │   │   │       ├── test_glue_etl_handler.py
│   │   │   │       ├── test_glue_interactive_sessions_handler.py
│   │   │   │       └── test_glue_workflows_handler.py
│   │   │   ├── models
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_athena_models.py
│   │   │   │   ├── test_common_resource_models.py
│   │   │   │   ├── test_data_catalog_models.py
│   │   │   │   ├── test_emr_models.py
│   │   │   │   ├── test_glue_models.py
│   │   │   │   ├── test_interactive_sessions_models.py
│   │   │   │   └── test_workflows_models.py
│   │   │   ├── test_init.py
│   │   │   ├── test_server.py
│   │   │   └── utils
│   │   │       ├── __init__.py
│   │   │       ├── test_aws_helper.py
│   │   │       ├── test_custom_tags.py
│   │   │       ├── test_logging_helper.py
│   │   │       └── test_sql_analyzer.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-diagram-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_diagram_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── diagrams_tools.py
│   │   │       ├── models.py
│   │   │       ├── scanner.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── resources
│   │   │   │   ├── __init__.py
│   │   │   │   └── example_diagrams
│   │   │   │       ├── __init__.py
│   │   │   │       ├── aws_example.py
│   │   │   │       ├── flow_example.py
│   │   │   │       └── sequence_example.py
│   │   │   ├── test_diagrams.py
│   │   │   ├── test_models.py
│   │   │   ├── test_sarif_fix.py
│   │   │   ├── test_scanner.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-documentation-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_documentation_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── models.py
│   │   │       ├── server_aws_cn.py
│   │   │       ├── server_aws.py
│   │   │       ├── server_utils.py
│   │   │       ├── server.py
│   │   │       └── util.py
│   │   ├── basic-usage.gif
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── constants.py
│   │   │   ├── resources
│   │   │   │   └── lambda_sns_raw.html
│   │   │   ├── test_aws_cn_get_available_services_live.py
│   │   │   ├── test_aws_cn_read_documentation_live.py
│   │   │   ├── test_aws_read_documentation_live.py
│   │   │   ├── test_aws_recommend_live.py
│   │   │   ├── test_aws_search_live.py
│   │   │   ├── test_metadata_handling.py
│   │   │   ├── test_models.py
│   │   │   ├── test_server_aws_cn.py
│   │   │   ├── test_server_aws.py
│   │   │   ├── test_server_utils.py
│   │   │   ├── test_server.py
│   │   │   └── test_util.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-healthomics-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_healthomics_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── consts.py
│   │   │       ├── models.py
│   │   │       ├── server.py
│   │   │       ├── tools
│   │   │       │   ├── __init__.py
│   │   │       │   ├── helper_tools.py
│   │   │       │   ├── run_analysis.py
│   │   │       │   ├── troubleshooting.py
│   │   │       │   ├── workflow_analysis.py
│   │   │       │   ├── workflow_execution.py
│   │   │       │   ├── workflow_linting.py
│   │   │       │   └── workflow_management.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── aws_utils.py
│   │   │           ├── s3_utils.py
│   │   │           └── validation_utils.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── docs
│   │   │   └── workflow_linting.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   ├── test_aws_utils.py
│   │   │   ├── test_consts.py
│   │   │   ├── test_helper_tools.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_models.py
│   │   │   ├── test_run_analysis.py
│   │   │   ├── test_s3_utils.py
│   │   │   ├── test_server.py
│   │   │   ├── test_troubleshooting.py
│   │   │   ├── test_workflow_analysis.py
│   │   │   ├── test_workflow_execution.py
│   │   │   ├── test_workflow_linting.py
│   │   │   ├── test_workflow_management.py
│   │   │   └── test_workflow_tools.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-iot-sitewise-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_iot_sitewise_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── client.py
│   │   │       ├── models.py
│   │   │       ├── prompts
│   │   │       │   ├── __init__.py
│   │   │       │   ├── asset_hierarchy.py
│   │   │       │   ├── bulk_import_workflow.py
│   │   │       │   ├── data_exploration.py
│   │   │       │   └── data_ingestion.py
│   │   │       ├── server.py
│   │   │       ├── tool_metadata.py
│   │   │       ├── tools
│   │   │       │   ├── __init__.py
│   │   │       │   ├── sitewise_access.py
│   │   │       │   ├── sitewise_asset_models.py
│   │   │       │   ├── sitewise_assets.py
│   │   │       │   ├── sitewise_data.py
│   │   │       │   ├── sitewise_gateways.py
│   │   │       │   └── sitewise_metadata_transfer.py
│   │   │       └── validation.py
│   │   ├── CHANGELOG.md
│   │   ├── DEVELOPMENT.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── examples
│   │   │   └── wind_farm_example.py
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_server.py
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_client.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_models.py
│   │   │   ├── test_server.py
│   │   │   ├── test_sitewise_access.py
│   │   │   ├── test_sitewise_asset_models.py
│   │   │   ├── test_sitewise_assets.py
│   │   │   ├── test_sitewise_data.py
│   │   │   ├── test_sitewise_gateways.py
│   │   │   ├── test_sitewise_metadata_transfer.py
│   │   │   └── test_validation.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-knowledge-mcp-server
│   │   └── README.md
│   ├── aws-location-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_location_server
│   │   │       ├── __init__.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_server_integration.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-msk-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_msk_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── server.py
│   │   │       └── tools
│   │   │           ├── __init__.py
│   │   │           ├── common_functions
│   │   │           │   ├── __init__.py
│   │   │           │   ├── client_manager.py
│   │   │           │   └── common_functions.py
│   │   │           ├── logs_and_telemetry
│   │   │           │   ├── __init__.py
│   │   │           │   ├── cluster_metrics_tools.py
│   │   │           │   ├── list_customer_iam_access.py
│   │   │           │   └── metric_config.py
│   │   │           ├── mutate_cluster
│   │   │           │   ├── __init__.py
│   │   │           │   ├── batch_associate_scram_secret.py
│   │   │           │   ├── batch_disassociate_scram_secret.py
│   │   │           │   ├── create_cluster_v2.py
│   │   │           │   ├── put_cluster_policy.py
│   │   │           │   ├── reboot_broker.py
│   │   │           │   ├── update_broker_count.py
│   │   │           │   ├── update_broker_storage.py
│   │   │           │   ├── update_broker_type.py
│   │   │           │   ├── update_cluster_configuration.py
│   │   │           │   ├── update_monitoring.py
│   │   │           │   └── update_security.py
│   │   │           ├── mutate_config
│   │   │           │   ├── __init__.py
│   │   │           │   ├── create_configuration.py
│   │   │           │   ├── tag_resource.py
│   │   │           │   ├── untag_resource.py
│   │   │           │   └── update_configuration.py
│   │   │           ├── mutate_vpc
│   │   │           │   ├── __init__.py
│   │   │           │   ├── create_vpc_connection.py
│   │   │           │   ├── delete_vpc_connection.py
│   │   │           │   └── reject_client_vpc_connection.py
│   │   │           ├── read_cluster
│   │   │           │   ├── __init__.py
│   │   │           │   ├── describe_cluster_operation.py
│   │   │           │   ├── describe_cluster.py
│   │   │           │   ├── get_bootstrap_brokers.py
│   │   │           │   ├── get_cluster_policy.py
│   │   │           │   ├── get_compatible_kafka_versions.py
│   │   │           │   ├── list_client_vpc_connections.py
│   │   │           │   ├── list_cluster_operations.py
│   │   │           │   ├── list_nodes.py
│   │   │           │   └── list_scram_secrets.py
│   │   │           ├── read_config
│   │   │           │   ├── __init__.py
│   │   │           │   ├── describe_configuration_revision.py
│   │   │           │   ├── describe_configuration.py
│   │   │           │   ├── list_configuration_revisions.py
│   │   │           │   └── list_tags_for_resource.py
│   │   │           ├── read_global
│   │   │           │   ├── __init__.py
│   │   │           │   ├── list_clusters.py
│   │   │           │   ├── list_configurations.py
│   │   │           │   ├── list_kafka_versions.py
│   │   │           │   └── list_vpc_connections.py
│   │   │           ├── read_vpc
│   │   │           │   ├── __init__.py
│   │   │           │   └── describe_vpc_connection.py
│   │   │           └── static_tools
│   │   │               ├── __init__.py
│   │   │               └── cluster_best_practices.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_client_manager.py
│   │   │   ├── test_cluster_metrics_tools.py
│   │   │   ├── test_common_functions.py
│   │   │   ├── test_create_cluster_v2.py
│   │   │   ├── test_create_configuration.py
│   │   │   ├── test_create_vpc_connection.py
│   │   │   ├── test_delete_vpc_connection.py
│   │   │   ├── test_describe_cluster_operation.py
│   │   │   ├── test_describe_cluster.py
│   │   │   ├── test_describe_configuration_revision.py
│   │   │   ├── test_describe_configuration.py
│   │   │   ├── test_describe_vpc_connection.py
│   │   │   ├── test_get_bootstrap_brokers.py
│   │   │   ├── test_get_cluster_policy.py
│   │   │   ├── test_get_compatible_kafka_versions.py
│   │   │   ├── test_init.py
│   │   │   ├── test_list_client_vpc_connections.py
│   │   │   ├── test_list_cluster_operations.py
│   │   │   ├── test_list_clusters.py
│   │   │   ├── test_list_configuration_revisions.py
│   │   │   ├── test_list_configurations.py
│   │   │   ├── test_list_customer_iam_access.py
│   │   │   ├── test_list_kafka_versions.py
│   │   │   ├── test_list_nodes.py
│   │   │   ├── test_list_scram_secrets.py
│   │   │   ├── test_list_tags_for_resource.py
│   │   │   ├── test_list_vpc_connections.py
│   │   │   ├── test_logs_and_telemetry.py
│   │   │   ├── test_main.py
│   │   │   ├── test_mutate_cluster_init.py
│   │   │   ├── test_mutate_cluster_success_cases.py
│   │   │   ├── test_mutate_cluster.py
│   │   │   ├── test_mutate_config_init.py
│   │   │   ├── test_mutate_vpc_init.py
│   │   │   ├── test_read_cluster_init_updated.py
│   │   │   ├── test_read_cluster_init.py
│   │   │   ├── test_read_config_init.py
│   │   │   ├── test_read_global_init.py
│   │   │   ├── test_read_vpc_init.py
│   │   │   ├── test_reject_client_vpc_connection.py
│   │   │   ├── test_server.py
│   │   │   ├── test_static_tools_init.py
│   │   │   ├── test_tag_resource.py
│   │   │   ├── test_tool_descriptions.py
│   │   │   ├── test_untag_resource.py
│   │   │   └── test_update_configuration.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-pricing-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_pricing_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── cdk_analyzer.py
│   │   │       ├── consts.py
│   │   │       ├── helpers.py
│   │   │       ├── models.py
│   │   │       ├── pricing_client.py
│   │   │       ├── pricing_transformer.py
│   │   │       ├── report_generator.py
│   │   │       ├── server.py
│   │   │       ├── static
│   │   │       │   ├── __init__.py
│   │   │       │   ├── COST_REPORT_TEMPLATE.md
│   │   │       │   └── patterns
│   │   │       │       ├── __init__.py
│   │   │       │       └── BEDROCK.md
│   │   │       └── terraform_analyzer.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_cdk_analyzer.py
│   │   │   ├── test_helpers.py
│   │   │   ├── test_pricing_client.py
│   │   │   ├── test_pricing_transformer.py
│   │   │   ├── test_report_generator.py
│   │   │   ├── test_server.py
│   │   │   └── test_terraform_analyzer.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── aws-serverless-mcp-server
│   │   ├── .pre-commit.config.yaml
│   │   ├── .python-version
│   │   ├── .secrets.baseline
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_serverless_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── models.py
│   │   │       ├── resources
│   │   │       │   ├── __init__.py
│   │   │       │   ├── deployment_details.py
│   │   │       │   ├── deployment_list.py
│   │   │       │   ├── template_details.py
│   │   │       │   └── template_list.py
│   │   │       ├── server.py
│   │   │       ├── template
│   │   │       │   ├── __init__.py
│   │   │       │   ├── registry.py
│   │   │       │   ├── renderer.py
│   │   │       │   └── templates
│   │   │       │       ├── backend.j2
│   │   │       │       ├── frontend.j2
│   │   │       │       ├── fullstack.j2
│   │   │       │       └── README.md
│   │   │       ├── templates
│   │   │       │   ├── __init__.py
│   │   │       │   └── iam_policies.py
│   │   │       ├── tools
│   │   │       │   ├── common
│   │   │       │   │   └── base_tool.py
│   │   │       │   ├── esm
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── esm_diagnosis.py
│   │   │       │   │   ├── esm_guidance.py
│   │   │       │   │   ├── esm_recommend.py
│   │   │       │   │   └── secure_esm_guidance.py
│   │   │       │   ├── guidance
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── deploy_serverless_app_help.py
│   │   │       │   │   ├── get_iac_guidance.py
│   │   │       │   │   ├── get_lambda_event_schemas.py
│   │   │       │   │   ├── get_lambda_guidance.py
│   │   │       │   │   └── get_serverless_templates.py
│   │   │       │   ├── poller
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── esm_diagnosis.py
│   │   │       │   │   ├── esm_guidance.py
│   │   │       │   │   └── esm_recommend.py
│   │   │       │   ├── sam
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── sam_build.py
│   │   │       │   │   ├── sam_deploy.py
│   │   │       │   │   ├── sam_init.py
│   │   │       │   │   ├── sam_local_invoke.py
│   │   │       │   │   └── sam_logs.py
│   │   │       │   ├── schemas
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── describe_schema.py
│   │   │       │   │   ├── list_registries.py
│   │   │       │   │   └── search_schema.py
│   │   │       │   └── webapps
│   │   │       │       ├── __init__.py
│   │   │       │       ├── configure_domain.py
│   │   │       │       ├── deploy_webapp.py
│   │   │       │       ├── get_metrics.py
│   │   │       │       ├── update_webapp_frontend.py
│   │   │       │       ├── utils
│   │   │       │       │   ├── deploy_service.py
│   │   │       │       │   ├── frontend_uploader.py
│   │   │       │       │   └── startup_script_generator.py
│   │   │       │       └── webapp_deployment_help.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── aws_client_helper.py
│   │   │           ├── cloudformation.py
│   │   │           ├── const.py
│   │   │           ├── data_scrubber.py
│   │   │           ├── deployment_manager.py
│   │   │           ├── github.py
│   │   │           └── process.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── test_cloudformation.py
│   │   │   ├── test_configure_domain.py
│   │   │   ├── test_data_scrubber.py
│   │   │   ├── test_deploy_serverless_app_help.py
│   │   │   ├── test_deploy_service.py
│   │   │   ├── test_deploy_webapp.py
│   │   │   ├── test_deployment_details.py
│   │   │   ├── test_deployment_help.py
│   │   │   ├── test_deployment_list.py
│   │   │   ├── test_deployment_manager.py
│   │   │   ├── test_esm_diagnosis.py
│   │   │   ├── test_esm_guidance.py
│   │   │   ├── test_esm_recommend.py
│   │   │   ├── test_frontend_uploader.py
│   │   │   ├── test_get_iac_guidance.py
│   │   │   ├── test_get_lambda_event_schemas.py
│   │   │   ├── test_get_lambda_guidance.py
│   │   │   ├── test_get_metrics.py
│   │   │   ├── test_get_serverless_templates.py
│   │   │   ├── test_github.py
│   │   │   ├── test_iam_policies.py
│   │   │   ├── test_models.py
│   │   │   ├── test_process.py
│   │   │   ├── test_sam_build.py
│   │   │   ├── test_sam_deploy.py
│   │   │   ├── test_sam_init.py
│   │   │   ├── test_sam_local_invoke.py
│   │   │   ├── test_sam_logs.py
│   │   │   ├── test_schemas.py
│   │   │   ├── test_secure_esm_guidance.py
│   │   │   ├── test_server.py
│   │   │   ├── test_startup_script_generator.py
│   │   │   ├── test_template_details.py
│   │   │   ├── test_template_list.py
│   │   │   ├── test_template_registry.py
│   │   │   ├── test_template_renderer.py
│   │   │   └── test_update_webapp_frontend.py
│   │   └── uv.lock
│   ├── aws-support-mcp-server
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── aws_support_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── client.py
│   │   │       ├── consts.py
│   │   │       ├── debug_helper.py
│   │   │       ├── errors.py
│   │   │       ├── formatters.py
│   │   │       ├── models.py
│   │   │       └── server.py
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftests.py
│   │   │   ├── test_aws_support_mcp_server.py
│   │   │   └── test_models.py
│   │   └── uv.lock
│   ├── bedrock-kb-retrieval-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── bedrock_kb_retrieval_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── knowledgebases
│   │   │       │   ├── __init__.py
│   │   │       │   ├── clients.py
│   │   │       │   ├── discovery.py
│   │   │       │   └── retrieval.py
│   │   │       ├── models.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── test_clients.py
│   │   │   ├── test_discovery.py
│   │   │   ├── test_env_config.py
│   │   │   ├── test_models.py
│   │   │   ├── test_retrieval.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── billing-cost-management-mcp-server
│   │   ├── __init__.py
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── billing_cost_management_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── models.py
│   │   │       ├── prompts
│   │   │       │   ├── __init__.py
│   │   │       │   ├── decorator.py
│   │   │       │   ├── graviton_migration.py
│   │   │       │   ├── README.md
│   │   │       │   ├── savings_plans.py
│   │   │       │   └── types.py
│   │   │       ├── server.py
│   │   │       ├── templates
│   │   │       │   └── recommendation_templates
│   │   │       │       ├── ebs_volume.template
│   │   │       │       ├── ec2_asg.template
│   │   │       │       ├── ec2_instance.template
│   │   │       │       ├── ecs_service.template
│   │   │       │       ├── idle.template
│   │   │       │       ├── lambda_function.template
│   │   │       │       ├── rds_database.template
│   │   │       │       ├── reserved_instances.template
│   │   │       │       └── savings_plans.template
│   │   │       ├── tools
│   │   │       │   ├── __init__.py
│   │   │       │   ├── aws_pricing_operations.py
│   │   │       │   ├── aws_pricing_tools.py
│   │   │       │   ├── bcm_pricing_calculator_tools.py
│   │   │       │   ├── budget_tools.py
│   │   │       │   ├── compute_optimizer_tools.py
│   │   │       │   ├── cost_anomaly_tools.py
│   │   │       │   ├── cost_comparison_tools.py
│   │   │       │   ├── cost_explorer_operations.py
│   │   │       │   ├── cost_explorer_tools.py
│   │   │       │   ├── cost_optimization_hub_helpers.py
│   │   │       │   ├── cost_optimization_hub_tools.py
│   │   │       │   ├── free_tier_usage_tools.py
│   │   │       │   ├── recommendation_details_tools.py
│   │   │       │   ├── ri_performance_tools.py
│   │   │       │   ├── sp_performance_tools.py
│   │   │       │   ├── storage_lens_tools.py
│   │   │       │   └── unified_sql_tools.py
│   │   │       └── utilities
│   │   │           ├── __init__.py
│   │   │           ├── aws_service_base.py
│   │   │           ├── constants.py
│   │   │           ├── logging_utils.py
│   │   │           └── sql_utils.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── requirements.txt
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── prompts
│   │   │   │   ├── __init__.py
│   │   │   │   └── test_prompts.py
│   │   │   ├── README.md
│   │   │   ├── test_models.py
│   │   │   ├── test_server.py
│   │   │   ├── tools
│   │   │   │   ├── __init__.py
│   │   │   │   ├── fixtures.py
│   │   │   │   ├── test_aws_bcm_pricing_calculator_tools.py
│   │   │   │   ├── test_aws_pricing_tools.py
│   │   │   │   ├── test_budget_tools.py
│   │   │   │   ├── test_compute_optimizer_tools.py
│   │   │   │   ├── test_cost_anomaly_tools_enhanced.py
│   │   │   │   ├── test_cost_anomaly_tools.py
│   │   │   │   ├── test_cost_comparison_tools.py
│   │   │   │   ├── test_cost_explorer_operations.py
│   │   │   │   ├── test_cost_explorer_tools.py
│   │   │   │   ├── test_cost_optimization_hub_helpers.py
│   │   │   │   ├── test_cost_optimization_hub_tools.py
│   │   │   │   ├── test_free_tier_usage_tools_new.py
│   │   │   │   ├── test_recommendation_details_tools.py
│   │   │   │   ├── test_ri_performance_tools.py
│   │   │   │   ├── test_sp_performance_tools.py
│   │   │   │   ├── test_storage_lens_tools.py
│   │   │   │   └── test_unified_sql_tools.py
│   │   │   └── utilities
│   │   │       ├── test_aws_service_base.py
│   │   │       └── test_sql_utils.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── ccapi-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── ccapi_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── aws_client.py
│   │   │       ├── cloud_control_utils.py
│   │   │       ├── context.py
│   │   │       ├── errors.py
│   │   │       ├── iac_generator.py
│   │   │       ├── impl
│   │   │       │   ├── __init__.py
│   │   │       │   ├── tools
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── explanation.py
│   │   │       │   │   ├── infrastructure_generation.py
│   │   │       │   │   ├── resource_operations.py
│   │   │       │   │   ├── security_scanning.py
│   │   │       │   │   └── session_management.py
│   │   │       │   └── utils
│   │   │       │       ├── __init__.py
│   │   │       │       └── validation.py
│   │   │       ├── infrastructure_generator.py
│   │   │       ├── models
│   │   │       │   ├── __init__.py
│   │   │       │   └── models.py
│   │   │       ├── schema_manager.py
│   │   │       ├── server.py
│   │   │       └── static
│   │   │           └── __init__.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_aws_client.py
│   │   │   ├── test_checkov_install.py
│   │   │   ├── test_cloud_control_utils.py
│   │   │   ├── test_context.py
│   │   │   ├── test_errors.py
│   │   │   ├── test_explanation.py
│   │   │   ├── test_iac_generator.py
│   │   │   ├── test_infrastructure_generation.py
│   │   │   ├── test_infrastructure_generator.py
│   │   │   ├── test_models.py
│   │   │   ├── test_resource_operations.py
│   │   │   ├── test_schema_manager.py
│   │   │   ├── test_security_scanning.py
│   │   │   ├── test_server.py
│   │   │   ├── test_session_management.py
│   │   │   └── test_validation.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── cdk-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── cdk_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── core
│   │   │       │   ├── __init__.py
│   │   │       │   ├── resources.py
│   │   │       │   ├── search_utils.py
│   │   │       │   ├── server.py
│   │   │       │   └── tools.py
│   │   │       ├── data
│   │   │       │   ├── __init__.py
│   │   │       │   ├── cdk_nag_parser.py
│   │   │       │   ├── construct_descriptions.py
│   │   │       │   ├── genai_cdk_loader.py
│   │   │       │   ├── lambda_layer_parser.py
│   │   │       │   ├── lambda_powertools_loader.py
│   │   │       │   ├── schema_generator.py
│   │   │       │   └── solutions_constructs_parser.py
│   │   │       ├── server.py
│   │   │       └── static
│   │   │           ├── __init__.py
│   │   │           ├── CDK_GENERAL_GUIDANCE.md
│   │   │           ├── CDK_NAG_GUIDANCE.md
│   │   │           └── lambda_powertools
│   │   │               ├── bedrock.md
│   │   │               ├── cdk.md
│   │   │               ├── dependencies.md
│   │   │               ├── index.md
│   │   │               ├── insights.md
│   │   │               ├── logging.md
│   │   │               ├── metrics.md
│   │   │               └── tracing.md
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── core
│   │   │   │   ├── test_resources_enhanced.py
│   │   │   │   ├── test_resources.py
│   │   │   │   ├── test_search_utils.py
│   │   │   │   ├── test_server.py
│   │   │   │   └── test_tools.py
│   │   │   └── data
│   │   │       ├── test_cdk_nag_parser.py
│   │   │       ├── test_genai_cdk_loader.py
│   │   │       ├── test_lambda_powertools_loader.py
│   │   │       ├── test_schema_generator.py
│   │   │       └── test_solutions_constructs_parser.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── cfn-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── cfn_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── aws_client.py
│   │   │       ├── cloud_control_utils.py
│   │   │       ├── context.py
│   │   │       ├── errors.py
│   │   │       ├── iac_generator.py
│   │   │       ├── schema_manager.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_aws_client.py
│   │   │   ├── test_cloud_control_utils.py
│   │   │   ├── test_errors.py
│   │   │   ├── test_iac_generator.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_schema_manager.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── cloudtrail-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── cloudtrail_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── common.py
│   │   │       ├── models.py
│   │   │       ├── server.py
│   │   │       └── tools.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_models.py
│   │   │   ├── test_server.py
│   │   │   └── test_tools.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── cloudwatch-appsignals-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── cloudwatch_appsignals_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── audit_presentation_utils.py
│   │   │       ├── audit_utils.py
│   │   │       ├── aws_clients.py
│   │   │       ├── canary_utils.py
│   │   │       ├── server.py
│   │   │       ├── service_audit_utils.py
│   │   │       ├── service_tools.py
│   │   │       ├── sli_report_client.py
│   │   │       ├── slo_tools.py
│   │   │       ├── trace_tools.py
│   │   │       └── utils.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   ├── test_audit_presentation_utils.py
│   │   │   ├── test_audit_utils.py
│   │   │   ├── test_aws_profile.py
│   │   │   ├── test_canary_utils.py
│   │   │   ├── test_initialization.py
│   │   │   ├── test_server_audit_functions.py
│   │   │   ├── test_server_audit_tools.py
│   │   │   ├── test_server.py
│   │   │   ├── test_service_audit_utils.py
│   │   │   ├── test_service_tools_operations.py
│   │   │   ├── test_sli_report_client.py
│   │   │   ├── test_slo_tools.py
│   │   │   └── test_utils.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── cloudwatch-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── cloudwatch_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── cloudwatch_alarms
│   │   │       │   ├── models.py
│   │   │       │   └── tools.py
│   │   │       ├── cloudwatch_logs
│   │   │       │   ├── models.py
│   │   │       │   └── tools.py
│   │   │       ├── cloudwatch_metrics
│   │   │       │   ├── data
│   │   │       │   │   └── metric_metadata.json
│   │   │       │   ├── models.py
│   │   │       │   └── tools.py
│   │   │       ├── common.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── cloudwatch_alarms
│   │   │   │   ├── test_active_alarms.py
│   │   │   │   ├── test_alarm_history_integration.py
│   │   │   │   ├── test_alarm_history.py
│   │   │   │   └── test_alarms_error_handling.py
│   │   │   ├── cloudwatch_logs
│   │   │   │   ├── test_logs_error_handling.py
│   │   │   │   ├── test_logs_models.py
│   │   │   │   └── test_logs_server.py
│   │   │   ├── cloudwatch_metrics
│   │   │   │   ├── test_metrics_error_handling.py
│   │   │   │   ├── test_metrics_models.py
│   │   │   │   ├── test_metrics_server.py
│   │   │   │   └── test_validation_error.py
│   │   │   ├── test_common_and_server.py
│   │   │   ├── test_init.py
│   │   │   └── test_main.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── code-doc-gen-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── code_doc_gen_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── server.py
│   │   │       └── utils
│   │   │           ├── doc_generator.py
│   │   │           ├── models.py
│   │   │           ├── repomix_manager.py
│   │   │           └── templates.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_doc_generator_edge_cases.py
│   │   │   ├── test_doc_generator.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_repomix_manager_scenarios.py
│   │   │   ├── test_repomix_manager.py
│   │   │   ├── test_repomix_statistics.py
│   │   │   ├── test_server_extended.py
│   │   │   ├── test_server.py
│   │   │   └── test_templates.py
│   │   └── uv.lock
│   ├── core-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── core_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── server.py
│   │   │       └── static
│   │   │           ├── __init__.py
│   │   │           └── PROMPT_UNDERSTANDING.md
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_response_types.py
│   │   │   ├── test_server.py
│   │   │   └── test_static.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── cost-explorer-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── cost_explorer_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── comparison_handler.py
│   │   │       ├── constants.py
│   │   │       ├── cost_usage_handler.py
│   │   │       ├── forecasting_handler.py
│   │   │       ├── helpers.py
│   │   │       ├── metadata_handler.py
│   │   │       ├── models.py
│   │   │       ├── server.py
│   │   │       └── utility_handler.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_comparison_handler.py
│   │   │   ├── test_cost_usage_handler.py
│   │   │   ├── test_forecasting_handler.py
│   │   │   ├── test_helpers.py
│   │   │   ├── test_metadata_handler.py
│   │   │   ├── test_models.py
│   │   │   ├── test_server.py
│   │   │   └── test_utility_handler.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── documentdb-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   └── documentdb_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── analytic_tools.py
│   │   │       ├── config.py
│   │   │       ├── connection_tools.py
│   │   │       ├── db_management_tools.py
│   │   │       ├── query_tools.py
│   │   │       ├── server.py
│   │   │       └── write_tools.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   ├── test_analytic_tools.py
│   │   │   ├── test_connection_tools.py
│   │   │   ├── test_db_management_tools.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_query_tools.py
│   │   │   └── test_write_tools.py
│   │   └── uv.lock
│   ├── dynamodb-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── dynamodb_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── common.py
│   │   │       ├── database_analysis_queries.py
│   │   │       ├── database_analyzers.py
│   │   │       ├── prompts
│   │   │       │   └── dynamodb_architect.md
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── evals
│   │   │   │   ├── dynamic_evaluators.py
│   │   │   │   ├── evaluation_registry.py
│   │   │   │   ├── logging_config.py
│   │   │   │   ├── multiturn_evaluator.py
│   │   │   │   ├── README.md
│   │   │   │   ├── scenarios.py
│   │   │   │   └── test_dspy_evals.py
│   │   │   ├── test_dynamodb_server.py
│   │   │   └── test_source_db_integration.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── ecs-mcp-server
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── ecs_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── api
│   │   │       │   ├── __init__.py
│   │   │       │   ├── containerize.py
│   │   │       │   ├── delete.py
│   │   │       │   ├── ecs_troubleshooting.py
│   │   │       │   ├── infrastructure.py
│   │   │       │   ├── resource_management.py
│   │   │       │   ├── status.py
│   │   │       │   └── troubleshooting_tools
│   │   │       │       ├── __init__.py
│   │   │       │       ├── detect_image_pull_failures.py
│   │   │       │       ├── fetch_cloudformation_status.py
│   │   │       │       ├── fetch_network_configuration.py
│   │   │       │       ├── fetch_service_events.py
│   │   │       │       ├── fetch_task_failures.py
│   │   │       │       ├── fetch_task_logs.py
│   │   │       │       ├── get_ecs_troubleshooting_guidance.py
│   │   │       │       └── utils.py
│   │   │       ├── main.py
│   │   │       ├── modules
│   │   │       │   ├── __init__.py
│   │   │       │   ├── aws_knowledge_proxy.py
│   │   │       │   ├── containerize.py
│   │   │       │   ├── delete.py
│   │   │       │   ├── deployment_status.py
│   │   │       │   ├── infrastructure.py
│   │   │       │   ├── resource_management.py
│   │   │       │   └── troubleshooting.py
│   │   │       ├── templates
│   │   │       │   ├── ecr_infrastructure.json
│   │   │       │   └── ecs_infrastructure.json
│   │   │       └── utils
│   │   │           ├── arn_parser.py
│   │   │           ├── aws.py
│   │   │           ├── config.py
│   │   │           ├── docker.py
│   │   │           ├── security.py
│   │   │           ├── templates.py
│   │   │           └── time_utils.py
│   │   ├── DEVELOPMENT.md
│   │   ├── pyproject.toml
│   │   ├── pyrightconfig.json
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── integ
│   │   │   │   └── mcp-inspector
│   │   │   │       ├── .gitignore
│   │   │   │       ├── README.md
│   │   │   │       ├── run-tests.sh
│   │   │   │       └── scenarios
│   │   │   │           ├── 01_comprehensive_troubleshooting
│   │   │   │           │   ├── 01_create.sh
│   │   │   │           │   ├── 02_validate.sh
│   │   │   │           │   ├── 03_cleanup.sh
│   │   │   │           │   ├── description.txt
│   │   │   │           │   └── utils
│   │   │   │           │       ├── mcp_helpers.sh
│   │   │   │           │       └── validation_helpers.sh
│   │   │   │           └── 02_test_knowledge_proxy_tools
│   │   │   │               ├── 01_create.sh
│   │   │   │               ├── 02_validate.sh
│   │   │   │               ├── 03_cleanup.sh
│   │   │   │               ├── description.txt
│   │   │   │               └── utils
│   │   │   │                   ├── knowledge_validation_helpers.sh
│   │   │   │                   └── mcp_knowledge_helpers.sh
│   │   │   ├── llm_testing
│   │   │   │   ├── invalid_cfn_template.yaml
│   │   │   │   ├── README.md
│   │   │   │   ├── run_tests.sh
│   │   │   │   ├── scenarios
│   │   │   │   │   ├── 01_cloudformation_failure
│   │   │   │   │   │   ├── 01_create.sh
│   │   │   │   │   │   ├── 02_validate.sh
│   │   │   │   │   │   ├── 03_prompts.txt
│   │   │   │   │   │   ├── 04_evaluation.md
│   │   │   │   │   │   ├── 05_cleanup.sh
│   │   │   │   │   │   └── description.txt
│   │   │   │   │   ├── 02_service_failure
│   │   │   │   │   │   ├── 01_create.sh
│   │   │   │   │   │   ├── 02_validate.sh
│   │   │   │   │   │   ├── 03_prompts.txt
│   │   │   │   │   │   ├── 04_evaluation.md
│   │   │   │   │   │   ├── 05_cleanup.sh
│   │   │   │   │   │   └── description.txt
│   │   │   │   │   ├── 03_task_exit_failure
│   │   │   │   │   │   ├── 01_create.sh
│   │   │   │   │   │   ├── 02_validate.sh
│   │   │   │   │   │   ├── 03_prompts.txt
│   │   │   │   │   │   ├── 04_evaluation.md
│   │   │   │   │   │   ├── 05_cleanup.sh
│   │   │   │   │   │   └── description.txt
│   │   │   │   │   ├── 04_network_configuration_failure
│   │   │   │   │   │   ├── 01_create.sh
│   │   │   │   │   │   ├── 02_validate.sh
│   │   │   │   │   │   ├── 03_prompts.txt
│   │   │   │   │   │   ├── 05_cleanup.sh
│   │   │   │   │   │   └── description.txt
│   │   │   │   │   ├── 05_resource_constraint_failure
│   │   │   │   │   │   ├── 01_create.sh
│   │   │   │   │   │   ├── 02_validate.sh
│   │   │   │   │   │   ├── 03_prompts.txt
│   │   │   │   │   │   ├── 05_cleanup.sh
│   │   │   │   │   │   └── description.txt
│   │   │   │   │   └── 06_load_balancer_failure
│   │   │   │   │       ├── 01_create.sh
│   │   │   │   │       ├── 02_validate.sh
│   │   │   │   │       ├── 03_prompts.txt
│   │   │   │   │       ├── 05_cleanup.sh
│   │   │   │   │       └── description.txt
│   │   │   │   ├── SCRIPT_IMPROVEMENTS.md
│   │   │   │   └── utils
│   │   │   │       ├── aws_helpers.sh
│   │   │   │       └── evaluation_template.md
│   │   │   └── unit
│   │   │       ├── __init__.py
│   │   │       ├── api
│   │   │       │   ├── conftest.py
│   │   │       │   ├── test_delete_api.py
│   │   │       │   ├── test_ecs_troubleshooting.py
│   │   │       │   ├── test_resource_management_api.py
│   │   │       │   └── troubleshooting_tools
│   │   │       │       └── test_fetch_network_configuration.py
│   │   │       ├── conftest.py
│   │   │       ├── modules
│   │   │       │   ├── test_aws_knowledge_proxy.py
│   │   │       │   └── test_resource_management_module.py
│   │   │       ├── test_aws_role_utils.py
│   │   │       ├── test_aws_utils.py
│   │   │       ├── test_containerize.py
│   │   │       ├── test_delete.py
│   │   │       ├── test_docker_utils.py
│   │   │       ├── test_docker_with_role.py
│   │   │       ├── test_image_pull_failure_extended.py
│   │   │       ├── test_image_pull_failure.py
│   │   │       ├── test_infrastructure_role.py
│   │   │       ├── test_infrastructure.py
│   │   │       ├── test_integration.py
│   │   │       ├── test_main.py
│   │   │       ├── test_resource_management_api_operation.py
│   │   │       ├── test_resource_management_tool.py
│   │   │       ├── test_resource_management.py
│   │   │       ├── test_security_integration.py
│   │   │       ├── test_status_pytest.py
│   │   │       ├── test_status.py
│   │   │       ├── troubleshooting_tools
│   │   │       │   ├── __init__.py
│   │   │       │   ├── conftest.py
│   │   │       │   ├── test_detect_image_pull_failures.py
│   │   │       │   ├── test_fetch_cloudformation_status.py
│   │   │       │   ├── test_fetch_service_events.py
│   │   │       │   ├── test_fetch_task_failures.py
│   │   │       │   ├── test_fetch_task_logs.py
│   │   │       │   ├── test_get_ecs_troubleshooting_guidance.py
│   │   │       │   ├── test_is_ecr_image_security.py
│   │   │       │   └── test_utils.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── async_test_utils.py
│   │   │           ├── test_arn_parser.py
│   │   │           ├── test_config.py
│   │   │           ├── test_docker.py
│   │   │           ├── test_response_sanitization.py
│   │   │           ├── test_security_extended.py
│   │   │           ├── test_security.py
│   │   │           ├── test_templates.py
│   │   │           └── test_time_utils.py
│   │   └── uv.lock
│   ├── eks-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── eks_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── aws_helper.py
│   │   │       ├── cloudwatch_handler.py
│   │   │       ├── cloudwatch_metrics_guidance_handler.py
│   │   │       ├── consts.py
│   │   │       ├── data
│   │   │       │   └── eks_cloudwatch_metrics_guidance.json
│   │   │       ├── eks_kb_handler.py
│   │   │       ├── eks_stack_handler.py
│   │   │       ├── iam_handler.py
│   │   │       ├── insights_handler.py
│   │   │       ├── k8s_apis.py
│   │   │       ├── k8s_client_cache.py
│   │   │       ├── k8s_handler.py
│   │   │       ├── logging_helper.py
│   │   │       ├── models.py
│   │   │       ├── scripts
│   │   │       │   └── update_eks_cloudwatch_metrics_guidance.py
│   │   │       ├── server.py
│   │   │       ├── templates
│   │   │       │   ├── eks-templates
│   │   │       │   │   └── eks-with-vpc.yaml
│   │   │       │   └── k8s-templates
│   │   │       │       ├── deployment.yaml
│   │   │       │       └── service.yaml
│   │   │       └── vpc_config_handler.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_aws_helper.py
│   │   │   ├── test_cloudwatch_handler.py
│   │   │   ├── test_cloudwatch_metrics_guidance_handler.py
│   │   │   ├── test_eks_kb_handler.py
│   │   │   ├── test_eks_stack_handler.py
│   │   │   ├── test_iam_handler.py
│   │   │   ├── test_init.py
│   │   │   ├── test_insights_handler.py
│   │   │   ├── test_k8s_apis.py
│   │   │   ├── test_k8s_client_cache.py
│   │   │   ├── test_k8s_handler.py
│   │   │   ├── test_logging_helper.py
│   │   │   ├── test_main.py
│   │   │   ├── test_models.py
│   │   │   ├── test_server.py
│   │   │   └── test_vpc_config_handler.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── elasticache-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── elasticache_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── common
│   │   │       │   ├── __init__.py
│   │   │       │   ├── connection.py
│   │   │       │   ├── decorators.py
│   │   │       │   └── server.py
│   │   │       ├── context.py
│   │   │       ├── main.py
│   │   │       └── tools
│   │   │           ├── __init__.py
│   │   │           ├── cc
│   │   │           │   ├── __init__.py
│   │   │           │   ├── connect.py
│   │   │           │   ├── create.py
│   │   │           │   ├── delete.py
│   │   │           │   ├── describe.py
│   │   │           │   ├── modify.py
│   │   │           │   ├── parsers.py
│   │   │           │   └── processors.py
│   │   │           ├── ce
│   │   │           │   ├── __init__.py
│   │   │           │   └── get_cost_and_usage.py
│   │   │           ├── cw
│   │   │           │   ├── __init__.py
│   │   │           │   └── get_metric_statistics.py
│   │   │           ├── cwlogs
│   │   │           │   ├── __init__.py
│   │   │           │   ├── create_log_group.py
│   │   │           │   ├── describe_log_groups.py
│   │   │           │   ├── describe_log_streams.py
│   │   │           │   ├── filter_log_events.py
│   │   │           │   └── get_log_events.py
│   │   │           ├── firehose
│   │   │           │   ├── __init__.py
│   │   │           │   └── list_delivery_streams.py
│   │   │           ├── misc
│   │   │           │   ├── __init__.py
│   │   │           │   ├── batch_apply_update_action.py
│   │   │           │   ├── batch_stop_update_action.py
│   │   │           │   ├── describe_cache_engine_versions.py
│   │   │           │   ├── describe_engine_default_parameters.py
│   │   │           │   ├── describe_events.py
│   │   │           │   └── describe_service_updates.py
│   │   │           ├── rg
│   │   │           │   ├── __init__.py
│   │   │           │   ├── complete_migration.py
│   │   │           │   ├── connect.py
│   │   │           │   ├── create.py
│   │   │           │   ├── delete.py
│   │   │           │   ├── describe.py
│   │   │           │   ├── modify.py
│   │   │           │   ├── parsers.py
│   │   │           │   ├── processors.py
│   │   │           │   ├── start_migration.py
│   │   │           │   └── test_migration.py
│   │   │           └── serverless
│   │   │               ├── __init__.py
│   │   │               ├── connect.py
│   │   │               ├── create.py
│   │   │               ├── delete.py
│   │   │               ├── describe.py
│   │   │               ├── models.py
│   │   │               └── modify.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_connection.py
│   │   │   ├── test_decorators.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── tools
│   │   │       ├── cc
│   │   │       │   ├── __init__.py
│   │   │       │   ├── test_connect_additional.py
│   │   │       │   ├── test_connect_coverage_additional.py
│   │   │       │   ├── test_connect_coverage.py
│   │   │       │   ├── test_connect.py
│   │   │       │   ├── test_create_additional.py
│   │   │       │   ├── test_create.py
│   │   │       │   ├── test_delete.py
│   │   │       │   ├── test_describe.py
│   │   │       │   ├── test_modify.py
│   │   │       │   ├── test_parsers.py
│   │   │       │   └── test_processors.py
│   │   │       ├── ce
│   │   │       │   ├── __init__.py
│   │   │       │   └── test_get_cost_and_usage.py
│   │   │       ├── cw
│   │   │       │   └── test_get_metric_statistics.py
│   │   │       ├── cwlogs
│   │   │       │   ├── __init__.py
│   │   │       │   ├── test_create_log_group.py
│   │   │       │   ├── test_describe_log_groups.py
│   │   │       │   ├── test_describe_log_streams.py
│   │   │       │   ├── test_filter_log_events.py
│   │   │       │   └── test_get_log_events.py
│   │   │       ├── firehose
│   │   │       │   └── test_list_delivery_streams.py
│   │   │       ├── misc
│   │   │       │   ├── __init__.py
│   │   │       │   ├── test_batch_apply_update_action.py
│   │   │       │   ├── test_batch_stop_update_action.py
│   │   │       │   ├── test_describe_cache_engine_versions.py
│   │   │       │   ├── test_describe_engine_default_parameters.py
│   │   │       │   ├── test_describe_events.py
│   │   │       │   └── test_describe_service_updates.py
│   │   │       ├── rg
│   │   │       │   ├── __init__.py
│   │   │       │   ├── test_complete_migration.py
│   │   │       │   ├── test_connect_additional.py
│   │   │       │   ├── test_connect_coverage_additional.py
│   │   │       │   ├── test_connect_optional_fields.py
│   │   │       │   ├── test_connect_partial_coverage.py
│   │   │       │   ├── test_connect.py
│   │   │       │   ├── test_create.py
│   │   │       │   ├── test_delete.py
│   │   │       │   ├── test_describe.py
│   │   │       │   ├── test_modify.py
│   │   │       │   ├── test_parsers.py
│   │   │       │   ├── test_processors.py
│   │   │       │   ├── test_start_migration.py
│   │   │       │   └── test_test_migration.py
│   │   │       └── serverless
│   │   │           ├── test_connect_additional.py
│   │   │           ├── test_connect_coverage_additional.py
│   │   │           ├── test_connect_optional_fields.py
│   │   │           ├── test_connect.py
│   │   │           ├── test_create.py
│   │   │           ├── test_delete.py
│   │   │           ├── test_describe.py
│   │   │           └── test_modify.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── finch-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── finch_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── consts.py
│   │   │       ├── models.py
│   │   │       ├── server.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── build.py
│   │   │           ├── common.py
│   │   │           ├── ecr.py
│   │   │           ├── push.py
│   │   │           └── vm.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── test_cli_flags.py
│   │   │   ├── test_logging_configuration.py
│   │   │   ├── test_server.py
│   │   │   ├── test_utils_build.py
│   │   │   ├── test_utils_common.py
│   │   │   ├── test_utils_ecr.py
│   │   │   ├── test_utils_push.py
│   │   │   └── test_utils_vm.py
│   │   └── uv.lock
│   ├── frontend-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── frontend_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── server.py
│   │   │       ├── static
│   │   │       │   └── react
│   │   │       │       ├── essential-knowledge.md
│   │   │       │       └── troubleshooting.md
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           └── file_utils.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_file_utils.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── test_server.py
│   │   └── uv.lock
│   ├── git-repo-research-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── git_repo_research_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── defaults.py
│   │   │       ├── embeddings.py
│   │   │       ├── github_search.py
│   │   │       ├── indexer.py
│   │   │       ├── models.py
│   │   │       ├── repository.py
│   │   │       ├── search.py
│   │   │       ├── server.py
│   │   │       └── utils.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_errors_repository.py
│   │   │   ├── test_github_search_edge_cases.py
│   │   │   ├── test_graphql_github_search.py
│   │   │   ├── test_local_repository.py
│   │   │   ├── test_repository_utils.py
│   │   │   ├── test_rest_github_search.py
│   │   │   ├── test_search.py
│   │   │   ├── test_server.py
│   │   │   └── test_url_repository.py
│   │   └── uv.lock
│   ├── healthlake-mcp-server
│   │   ├── .dockerignore
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── healthlake_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── fhir_operations.py
│   │   │       ├── main.py
│   │   │       ├── models.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── CONTRIBUTING.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── examples
│   │   │   ├── mcp_config.json
│   │   │   └── README.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   ├── test_fhir_client_comprehensive.py
│   │   │   ├── test_fhir_error_scenarios.py
│   │   │   ├── test_fhir_operations.py
│   │   │   ├── test_integration_mock_based.py
│   │   │   ├── test_main_edge_cases.py
│   │   │   ├── test_main.py
│   │   │   ├── test_mcp_integration_coverage.py
│   │   │   ├── test_models_edge_cases.py
│   │   │   ├── test_models.py
│   │   │   ├── test_readonly_mode.py
│   │   │   ├── test_server_core.py
│   │   │   ├── test_server_error_handling.py
│   │   │   ├── test_server_mcp_handlers.py
│   │   │   ├── test_server_toolhandler.py
│   │   │   └── test_server_validation.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── iam-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── iam_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── aws_client.py
│   │   │       ├── context.py
│   │   │       ├── errors.py
│   │   │       ├── models.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── DESIGN_COMPLIANCE.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── examples
│   │   │   ├── get_policy_document_example.py
│   │   │   └── inline_policy_demo.py
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── run_tests.sh
│   │   ├── tests
│   │   │   ├── test_context.py
│   │   │   ├── test_errors.py
│   │   │   ├── test_inline_policies.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── lambda-tool-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── lambda_tool_mcp_server
│   │   │       ├── __init__.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── examples
│   │   │   ├── README.md
│   │   │   └── sample_functions
│   │   │       ├── customer-create
│   │   │       │   └── app.py
│   │   │       ├── customer-id-from-email
│   │   │       │   └── app.py
│   │   │       ├── customer-info-from-id
│   │   │       │   └── app.py
│   │   │       └── template.yml
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── test_format_lambda_response.py
│   │   │   ├── test_integration_coverage.py
│   │   │   ├── test_integration.py
│   │   │   ├── test_register_lambda_functions.py
│   │   │   ├── test_schema_integration.py
│   │   │   ├── test_server_coverage_additional.py
│   │   │   ├── test_server_coverage.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── mcp-lambda-handler
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   └── mcp_lambda_handler
│   │   │       ├── __init__.py
│   │   │       ├── mcp_lambda_handler.py
│   │   │       ├── session.py
│   │   │       └── types.py
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   └── test_lambda_handler.py
│   │   └── uv.lock
│   ├── memcached-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── memcached_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── common
│   │   │       │   ├── config.py
│   │   │       │   ├── connection.py
│   │   │       │   └── server.py
│   │   │       ├── context.py
│   │   │       ├── main.py
│   │   │       └── tools
│   │   │           └── cache.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── ELASTICACHECONNECT.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_cache_readonly.py
│   │   │   ├── test_cache.py
│   │   │   ├── test_connection.py
│   │   │   ├── test_init.py
│   │   │   └── test_main.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── mysql-mcp-server
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── mysql_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── mutable_sql_detector.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── nova-canvas-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── nova_canvas_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── consts.py
│   │   │       ├── models.py
│   │   │       ├── novacanvas.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── test_models.py
│   │   │   ├── test_novacanvas.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── openapi-mcp-server
│   │   ├── .coveragerc
│   │   ├── .dockerignore
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── AUTHENTICATION.md
│   │   ├── AWS_BEST_PRACTICES.md
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── openapi_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── api
│   │   │       │   ├── __init__.py
│   │   │       │   └── config.py
│   │   │       ├── auth
│   │   │       │   ├── __init__.py
│   │   │       │   ├── api_key_auth.py
│   │   │       │   ├── auth_cache.py
│   │   │       │   ├── auth_errors.py
│   │   │       │   ├── auth_factory.py
│   │   │       │   ├── auth_protocol.py
│   │   │       │   ├── auth_provider.py
│   │   │       │   ├── base_auth.py
│   │   │       │   ├── basic_auth.py
│   │   │       │   ├── bearer_auth.py
│   │   │       │   ├── cognito_auth.py
│   │   │       │   └── register.py
│   │   │       ├── patch
│   │   │       │   └── __init__.py
│   │   │       ├── prompts
│   │   │       │   ├── __init__.py
│   │   │       │   ├── generators
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── operation_prompts.py
│   │   │       │   │   └── workflow_prompts.py
│   │   │       │   ├── models.py
│   │   │       │   └── prompt_manager.py
│   │   │       ├── server.py
│   │   │       └── utils
│   │   │           ├── __init__.py
│   │   │           ├── cache_provider.py
│   │   │           ├── config.py
│   │   │           ├── error_handler.py
│   │   │           ├── http_client.py
│   │   │           ├── metrics_provider.py
│   │   │           ├── openapi_validator.py
│   │   │           └── openapi.py
│   │   ├── CHANGELOG.md
│   │   ├── DEPLOYMENT.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── OBSERVABILITY.md
│   │   ├── pyproject.toml
│   │   ├── pyrightconfig.json
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── api
│   │   │   │   └── test_config.py
│   │   │   ├── auth
│   │   │   │   ├── test_api_key_auth.py
│   │   │   │   ├── test_auth_cache.py
│   │   │   │   ├── test_auth_errors.py
│   │   │   │   ├── test_auth_factory_caching.py
│   │   │   │   ├── test_auth_factory_coverage.py
│   │   │   │   ├── test_auth_factory.py
│   │   │   │   ├── test_auth_protocol_additional.py
│   │   │   │   ├── test_auth_protocol_boost.py
│   │   │   │   ├── test_auth_protocol_coverage.py
│   │   │   │   ├── test_auth_protocol_extended.py
│   │   │   │   ├── test_auth_protocol_improved.py
│   │   │   │   ├── test_auth_protocol.py
│   │   │   │   ├── test_auth_provider_additional.py
│   │   │   │   ├── test_base_auth_coverage.py
│   │   │   │   ├── test_base_auth.py
│   │   │   │   ├── test_basic_auth.py
│   │   │   │   ├── test_bearer_auth.py
│   │   │   │   ├── test_cognito_auth_additional_coverage.py
│   │   │   │   ├── test_cognito_auth_boost_coverage.py
│   │   │   │   ├── test_cognito_auth_client_credentials.py
│   │   │   │   ├── test_cognito_auth_coverage_boost.py
│   │   │   │   ├── test_cognito_auth_exceptions.py
│   │   │   │   ├── test_cognito_auth.py
│   │   │   │   ├── test_register_coverage.py
│   │   │   │   └── test_register.py
│   │   │   ├── prompts
│   │   │   │   ├── standalone
│   │   │   │   │   ├── test_operation_prompt.py
│   │   │   │   │   ├── test_prompt_arguments.py
│   │   │   │   │   └── test_secure_operation_prompt.py
│   │   │   │   ├── test_mcp_prompt_manager_integration.py
│   │   │   │   ├── test_mcp_prompt_manager.py
│   │   │   │   ├── test_models_dict_method.py
│   │   │   │   ├── test_operation_prompts_extended.py
│   │   │   │   ├── test_prompt_manager_additional.py
│   │   │   │   ├── test_prompt_manager_comprehensive.py
│   │   │   │   ├── test_prompt_manager_coverage.py
│   │   │   │   └── test_prompt_registration.py
│   │   │   ├── README.md
│   │   │   ├── test_api_name.py
│   │   │   ├── test_cache_coverage_89.py
│   │   │   ├── test_client.py
│   │   │   ├── test_coverage_boost.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main_extended.py
│   │   │   ├── test_main.py
│   │   │   ├── test_openapi_coverage_89.py
│   │   │   ├── test_server_auth_errors.py
│   │   │   ├── test_server_coverage_boost_2.py
│   │   │   ├── test_server_coverage_boost.py
│   │   │   ├── test_server_exception_handling.py
│   │   │   ├── test_server_extended.py
│   │   │   ├── test_server_httpx_version.py
│   │   │   ├── test_server_part1.py
│   │   │   ├── test_server_route_logging.py
│   │   │   ├── test_server_signal_handlers.py
│   │   │   ├── test_server.py
│   │   │   └── utils
│   │   │       ├── test_cache_provider.py
│   │   │       ├── test_error_handler_boost.py
│   │   │       ├── test_error_handler_extended.py
│   │   │       ├── test_error_handler_fix.py
│   │   │       ├── test_error_handler.py
│   │   │       ├── test_http_client_comprehensive.py
│   │   │       ├── test_http_client_extended.py
│   │   │       ├── test_http_client_extended2.py
│   │   │       ├── test_http_client_import_error.py
│   │   │       ├── test_http_client.py
│   │   │       ├── test_metrics_provider_decorators.py
│   │   │       ├── test_metrics_provider_extended2.py
│   │   │       ├── test_metrics_provider_prometheus.py
│   │   │       ├── test_metrics_provider.py
│   │   │       ├── test_openapi_validator.py
│   │   │       └── test_openapi.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── postgres-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── postgres_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── connection
│   │   │       │   ├── __init__.py
│   │   │       │   ├── abstract_db_connection.py
│   │   │       │   ├── db_connection_singleton.py
│   │   │       │   ├── psycopg_pool_connection.py
│   │   │       │   └── rds_api_connection.py
│   │   │       ├── mutable_sql_detector.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   ├── test_psycopg_connector.py
│   │   │   ├── test_server.py
│   │   │   └── test_singleton.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── prometheus-mcp-server
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── prometheus_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── consts.py
│   │   │       ├── models.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── conftest.py
│   │   │   ├── test_aws_credentials.py
│   │   │   ├── test_config_manager.py
│   │   │   ├── test_consts.py
│   │   │   ├── test_coverage_gaps.py
│   │   │   ├── test_coverage_improvement.py
│   │   │   ├── test_final_coverage.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_models.py
│   │   │   ├── test_prometheus_client.py
│   │   │   ├── test_prometheus_connection.py
│   │   │   ├── test_security_validator.py
│   │   │   ├── test_server_coverage.py
│   │   │   ├── test_tools.py
│   │   │   └── test_workspace_config.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── redshift-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── redshift_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── consts.py
│   │   │       ├── models.py
│   │   │       ├── redshift.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_redshift.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── s3-tables-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── s3_tables_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── constants.py
│   │   │       ├── database.py
│   │   │       ├── engines
│   │   │       │   ├── __init__.py
│   │   │       │   └── pyiceberg.py
│   │   │       ├── file_processor
│   │   │       │   ├── __init__.py
│   │   │       │   ├── csv.py
│   │   │       │   ├── parquet.py
│   │   │       │   └── utils.py
│   │   │       ├── models.py
│   │   │       ├── namespaces.py
│   │   │       ├── resources.py
│   │   │       ├── s3_operations.py
│   │   │       ├── server.py
│   │   │       ├── table_buckets.py
│   │   │       ├── tables.py
│   │   │       └── utils.py
│   │   ├── CHANGELOG.md
│   │   ├── CONTEXT.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_csv.py
│   │   │   ├── test_database.py
│   │   │   ├── test_file_processor_utils.py
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   ├── test_namespaces.py
│   │   │   ├── test_parquet.py
│   │   │   ├── test_pyiceberg.py
│   │   │   ├── test_resources.py
│   │   │   ├── test_s3_operations.py
│   │   │   ├── test_server.py
│   │   │   ├── test_table_buckets.py
│   │   │   ├── test_tables.py
│   │   │   └── test_utils.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── stepfunctions-tool-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── stepfunctions_tool_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── aws_helper.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── test_aws_helper.py
│   │   │   ├── test_create_state_machine_tool.py
│   │   │   ├── test_filter_state_machines_by_tag.py
│   │   │   ├── test_format_state_machine_response.py
│   │   │   ├── test_get_schema_arn_from_state_machine_arn.py
│   │   │   ├── test_get_schema_from_registry.py
│   │   │   ├── test_invoke_express_state_machine_impl.py
│   │   │   ├── test_invoke_standard_state_machine_impl.py
│   │   │   ├── test_main.py
│   │   │   ├── test_register_state_machines.py
│   │   │   ├── test_sanitize_tool_name.py
│   │   │   ├── test_server.py
│   │   │   └── test_validate_state_machine_name.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── syntheticdata-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── syntheticdata_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── pandas_interpreter.py
│   │   │       ├── server.py
│   │   │       └── storage
│   │   │           ├── __init__.py
│   │   │           ├── base.py
│   │   │           ├── loader.py
│   │   │           └── s3.py
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── conftest.py
│   │   │   ├── test_constants.py
│   │   │   ├── test_pandas_interpreter.py
│   │   │   ├── test_server.py
│   │   │   └── test_storage
│   │   │       ├── __init__.py
│   │   │       ├── test_loader.py
│   │   │       └── test_s3.py
│   │   └── uv.lock
│   ├── terraform-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── terraform_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── impl
│   │   │       │   ├── resources
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── terraform_aws_provider_resources_listing.py
│   │   │       │   │   └── terraform_awscc_provider_resources_listing.py
│   │   │       │   └── tools
│   │   │       │       ├── __init__.py
│   │   │       │       ├── execute_terraform_command.py
│   │   │       │       ├── execute_terragrunt_command.py
│   │   │       │       ├── run_checkov_scan.py
│   │   │       │       ├── search_aws_provider_docs.py
│   │   │       │       ├── search_awscc_provider_docs.py
│   │   │       │       ├── search_specific_aws_ia_modules.py
│   │   │       │       ├── search_user_provided_module.py
│   │   │       │       └── utils.py
│   │   │       ├── models
│   │   │       │   ├── __init__.py
│   │   │       │   └── models.py
│   │   │       ├── scripts
│   │   │       │   ├── generate_aws_provider_resources.py
│   │   │       │   ├── generate_awscc_provider_resources.py
│   │   │       │   └── scrape_aws_terraform_best_practices.py
│   │   │       ├── server.py
│   │   │       └── static
│   │   │           ├── __init__.py
│   │   │           ├── AWS_PROVIDER_RESOURCES.md
│   │   │           ├── AWS_TERRAFORM_BEST_PRACTICES.md
│   │   │           ├── AWSCC_PROVIDER_RESOURCES.md
│   │   │           ├── MCP_INSTRUCTIONS.md
│   │   │           └── TERRAFORM_WORKFLOW_GUIDE.md
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── __init__.py
│   │   │   ├── .gitignore
│   │   │   ├── conftest.py
│   │   │   ├── README.md
│   │   │   ├── test_command_impl.py
│   │   │   ├── test_execute_terraform_command.py
│   │   │   ├── test_execute_terragrunt_command.py
│   │   │   ├── test_models.py
│   │   │   ├── test_parameter_annotations.py
│   │   │   ├── test_resources.py
│   │   │   ├── test_run_checkov_scan.py
│   │   │   ├── test_search_user_provided_module.py
│   │   │   ├── test_server.py
│   │   │   ├── test_tool_implementations.py
│   │   │   ├── test_utils_additional.py
│   │   │   └── test_utils.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── timestream-for-influxdb-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── timestream_for_influxdb_mcp_server
│   │   │       ├── __init__.py
│   │   │       └── server.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_init.py
│   │   │   ├── test_main.py
│   │   │   └── test_server.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   ├── valkey-mcp-server
│   │   ├── .gitignore
│   │   ├── .python-version
│   │   ├── awslabs
│   │   │   ├── __init__.py
│   │   │   └── valkey_mcp_server
│   │   │       ├── __init__.py
│   │   │       ├── common
│   │   │       │   ├── __init__.py
│   │   │       │   ├── config.py
│   │   │       │   ├── connection.py
│   │   │       │   └── server.py
│   │   │       ├── context.py
│   │   │       ├── main.py
│   │   │       ├── tools
│   │   │       │   ├── __init__.py
│   │   │       │   ├── bitmap.py
│   │   │       │   ├── hash.py
│   │   │       │   ├── hyperloglog.py
│   │   │       │   ├── json.py
│   │   │       │   ├── list.py
│   │   │       │   ├── misc.py
│   │   │       │   ├── server_management.py
│   │   │       │   ├── set.py
│   │   │       │   ├── sorted_set.py
│   │   │       │   ├── stream.py
│   │   │       │   └── string.py
│   │   │       └── version.py
│   │   ├── CHANGELOG.md
│   │   ├── docker-healthcheck.sh
│   │   ├── Dockerfile
│   │   ├── ELASTICACHECONNECT.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── pyproject.toml
│   │   ├── README.md
│   │   ├── tests
│   │   │   ├── test_bitmap.py
│   │   │   ├── test_config.py
│   │   │   ├── test_connection.py
│   │   │   ├── test_hash.py
│   │   │   ├── test_hyperloglog.py
│   │   │   ├── test_init.py
│   │   │   ├── test_json_additional.py
│   │   │   ├── test_json_readonly.py
│   │   │   ├── test_json.py
│   │   │   ├── test_list_additional.py
│   │   │   ├── test_list_readonly.py
│   │   │   ├── test_list.py
│   │   │   ├── test_main.py
│   │   │   ├── test_misc.py
│   │   │   ├── test_server_management.py
│   │   │   ├── test_set_readonly.py
│   │   │   ├── test_set.py
│   │   │   ├── test_sorted_set_additional.py
│   │   │   ├── test_sorted_set_readonly.py
│   │   │   ├── test_sorted_set.py
│   │   │   ├── test_stream_additional.py
│   │   │   ├── test_stream_readonly.py
│   │   │   ├── test_stream.py
│   │   │   └── test_string.py
│   │   ├── uv-requirements.txt
│   │   └── uv.lock
│   └── well-architected-security-mcp-server
│       ├── .python-version
│       ├── awslabs
│       │   └── well_architected_security_mcp_server
│       │       ├── __init__.py
│       │       ├── consts.py
│       │       ├── server.py
│       │       └── util
│       │           ├── __init__.py
│       │           ├── network_security.py
│       │           ├── prompt_utils.py
│       │           ├── resource_utils.py
│       │           ├── security_services.py
│       │           └── storage_security.py
│       ├── PROMPT_TEMPLATE.md
│       ├── pyproject.toml
│       ├── README.md
│       ├── tests
│       │   ├── __init__.py
│       │   ├── conftest.py
│       │   ├── README.md
│       │   ├── test_access_analyzer_fix.py
│       │   ├── test_network_security_additional.py
│       │   ├── test_network_security.py
│       │   ├── test_prompt_utils_coverage.py
│       │   ├── test_prompt_utils.py
│       │   ├── test_resource_utils_fix.py
│       │   ├── test_resource_utils.py
│       │   ├── test_security_services_additional.py
│       │   ├── test_security_services_coverage.py
│       │   ├── test_security_services.py
│       │   ├── test_server_additional.py
│       │   ├── test_server_coverage.py
│       │   ├── test_server_prompts.py
│       │   ├── test_server_security_findings.py
│       │   ├── test_server.py
│       │   ├── test_storage_security_additional.py
│       │   ├── test_storage_security_comprehensive.py
│       │   ├── test_storage_security_edge_cases.py
│       │   ├── test_storage_security_recommendations.py
│       │   ├── test_storage_security.py
│       │   └── test_user_agent_config.py
│       └── uv.lock
└── VIBE_CODING_TIPS_TRICKS.md
```

# Files

--------------------------------------------------------------------------------
/src/eks-mcp-server/tests/test_eks_stack_handler.py:
--------------------------------------------------------------------------------

```python
   1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   2 | #
   3 | # Licensed under the Apache License, Version 2.0 (the "License");
   4 | # you may not use this file except in compliance with the License.
   5 | # You may obtain a copy of the License at
   6 | #
   7 | #     http://www.apache.org/licenses/LICENSE-2.0
   8 | #
   9 | # Unless required by applicable law or agreed to in writing, software
  10 | # distributed under the License is distributed on an "AS IS" BASIS,
  11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12 | # See the License for the specific language governing permissions and
  13 | # limitations under the License.
  14 | # ruff: noqa: D101, D102, D103
  15 | """Tests for the EKS Stack Handler."""
  16 | 
  17 | import pytest
  18 | import yaml
  19 | from awslabs.eks_mcp_server.aws_helper import AwsHelper
  20 | from awslabs.eks_mcp_server.consts import (
  21 |     CFN_CAPABILITY_IAM,
  22 |     CFN_ON_FAILURE_DELETE,
  23 |     CFN_STACK_TAG_KEY,
  24 |     CFN_STACK_TAG_VALUE,
  25 | )
  26 | from awslabs.eks_mcp_server.eks_stack_handler import EksStackHandler
  27 | from awslabs.eks_mcp_server.models import (
  28 |     DeleteStackResponse,
  29 |     DeployStackResponse,
  30 |     DescribeStackResponse,
  31 |     GenerateTemplateResponse,
  32 | )
  33 | from mcp.server.fastmcp import Context
  34 | from mcp.types import TextContent
  35 | from unittest.mock import MagicMock, mock_open, patch
  36 | 
  37 | 
  38 | class TestEksStackHandler:
  39 |     """Tests for the EksStackHandler class."""
  40 | 
  41 |     def test_init_default(self):
  42 |         """Test that the handler is initialized correctly and registers its tools with default allow_write=False."""
  43 |         # Create a mock MCP server
  44 |         mock_mcp = MagicMock()
  45 | 
  46 |         # Initialize the EKS handler with the mock MCP server
  47 |         handler = EksStackHandler(mock_mcp)
  48 | 
  49 |         # Verify that the handler has the correct attributes
  50 |         assert handler.mcp == mock_mcp
  51 |         assert handler.allow_write is False
  52 | 
  53 |         # Verify that the manage_eks_stacks tool was registered
  54 |         mock_mcp.tool.assert_called_once()
  55 |         args, kwargs = mock_mcp.tool.call_args
  56 |         assert kwargs['name'] == 'manage_eks_stacks'
  57 | 
  58 |     def test_init_write_access_disabled(self):
  59 |         """Test that the handler is initialized correctly with allow_write=False."""
  60 |         # Create a mock MCP server
  61 |         mock_mcp = MagicMock()
  62 | 
  63 |         # Initialize the EKS handler with the mock MCP server and allow_write=False
  64 |         handler = EksStackHandler(mock_mcp, allow_write=False)
  65 | 
  66 |         # Verify that the handler has the correct attributes
  67 |         assert handler.mcp == mock_mcp
  68 |         assert handler.allow_write is False
  69 | 
  70 |         # Verify that the manage_eks_stacks tool was registered
  71 |         mock_mcp.tool.assert_called_once()
  72 |         args, kwargs = mock_mcp.tool.call_args
  73 |         assert kwargs['name'] == 'manage_eks_stacks'
  74 | 
  75 |     @pytest.mark.asyncio
  76 |     async def test_deploy_stack_success(self):
  77 |         """Test that _deploy_stack deploys a stack successfully."""
  78 |         # Create a mock MCP server
  79 |         mock_mcp = MagicMock()
  80 | 
  81 |         # Initialize the EKS handler with the mock MCP server
  82 |         handler = EksStackHandler(mock_mcp)
  83 | 
  84 |         # Create a mock context
  85 |         mock_ctx = MagicMock(spec=Context)
  86 | 
  87 |         # Create a mock CloudFormation client
  88 |         mock_cfn_client = MagicMock()
  89 |         mock_cfn_client.create_stack.return_value = {'StackId': 'test-stack-id'}
  90 | 
  91 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
  92 |         with patch.object(
  93 |             AwsHelper, 'create_boto3_client', return_value=mock_cfn_client
  94 |         ) as mock_create_client:
  95 |             # Mock the _ensure_stack_ownership method to simulate stack not existing
  96 |             with patch.object(
  97 |                 handler,
  98 |                 '_ensure_stack_ownership',
  99 |                 return_value=(False, None, 'Stack does not exist'),
 100 |             ):
 101 |                 # Mock the open function to return a mock file
 102 |                 mock_template_content = 'test template content'
 103 |                 with patch('builtins.open', mock_open(read_data=mock_template_content)):
 104 |                     # Call the _deploy_stack method
 105 |                     result = await handler._deploy_stack(
 106 |                         ctx=mock_ctx,
 107 |                         template_file='/path/to/template.yaml',
 108 |                         stack_name='eks-test-cluster-stack',
 109 |                         cluster_name='test-cluster',
 110 |                     )
 111 | 
 112 |                 # Verify that AwsHelper.create_boto3_client was called with the correct parameters
 113 |                 # Since we're mocking _ensure_stack_ownership, it's only called once in _deploy_stack
 114 |                 assert mock_create_client.call_count == 1
 115 |                 args, kwargs = mock_create_client.call_args
 116 |                 assert args[0] == 'cloudformation'
 117 | 
 118 |                 # Verify that create_stack was called with the correct parameters
 119 |                 mock_cfn_client.create_stack.assert_called_once()
 120 |                 args, kwargs = mock_cfn_client.create_stack.call_args
 121 |                 assert kwargs['StackName'] == 'eks-test-cluster-stack'
 122 |                 assert kwargs['TemplateBody'] == mock_template_content
 123 |                 assert kwargs['Capabilities'] == [CFN_CAPABILITY_IAM]
 124 |                 assert kwargs['OnFailure'] == CFN_ON_FAILURE_DELETE
 125 |                 assert kwargs['Tags'] == [{'Key': CFN_STACK_TAG_KEY, 'Value': CFN_STACK_TAG_VALUE}]
 126 | 
 127 |                 # Verify the result
 128 |                 assert not result.isError
 129 |                 assert result.stack_name == 'eks-test-cluster-stack'
 130 |                 assert result.stack_arn == 'test-stack-id'
 131 |                 assert result.cluster_name == 'test-cluster'
 132 |                 assert len(result.content) == 1
 133 |                 assert result.content[0].type == 'text'
 134 |                 assert 'CloudFormation stack creation initiated' in result.content[0].text
 135 | 
 136 |     def test_ensure_stack_ownership_owned_stack(self):
 137 |         """Test that _ensure_stack_ownership correctly identifies a stack owned by our tool."""
 138 |         # Create a mock MCP server
 139 |         mock_mcp = MagicMock()
 140 | 
 141 |         # Initialize the EKS handler with the mock MCP server
 142 |         handler = EksStackHandler(mock_mcp)
 143 | 
 144 |         # Create a mock context
 145 |         mock_ctx = MagicMock(spec=Context)
 146 | 
 147 |         # Create a mock CloudFormation client
 148 |         mock_cfn_client = MagicMock()
 149 |         mock_cfn_client.describe_stacks.return_value = {
 150 |             'Stacks': [
 151 |                 {
 152 |                     'StackId': 'test-stack-id',
 153 |                     'Tags': [{'Key': CFN_STACK_TAG_KEY, 'Value': CFN_STACK_TAG_VALUE}],
 154 |                 }
 155 |             ]
 156 |         }
 157 | 
 158 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 159 |         with patch.object(
 160 |             AwsHelper, 'create_boto3_client', return_value=mock_cfn_client
 161 |         ) as mock_create_client:
 162 |             # Call the _ensure_stack_ownership method
 163 |             success, stack, error_message = handler._ensure_stack_ownership(
 164 |                 ctx=mock_ctx, stack_name='eks-test-cluster-stack', operation='update'
 165 |             )
 166 | 
 167 |             # Verify that AwsHelper.create_boto3_client was called with the correct parameters
 168 |             assert mock_create_client.call_count == 1
 169 |             args, kwargs = mock_create_client.call_args
 170 |             assert args[0] == 'cloudformation'
 171 | 
 172 |             # Verify that describe_stacks was called with the correct parameters
 173 |             mock_cfn_client.describe_stacks.assert_called_once_with(
 174 |                 StackName='eks-test-cluster-stack'
 175 |             )
 176 | 
 177 |             # Verify the result
 178 |             assert success is True
 179 |             assert stack == mock_cfn_client.describe_stacks.return_value['Stacks'][0]
 180 |             assert error_message is None
 181 | 
 182 |     def test_ensure_stack_ownership_not_owned_stack(self):
 183 |         """Test that _ensure_stack_ownership correctly identifies a stack not owned by our tool."""
 184 |         # Create a mock MCP server
 185 |         mock_mcp = MagicMock()
 186 | 
 187 |         # Initialize the EKS handler with the mock MCP server
 188 |         handler = EksStackHandler(mock_mcp)
 189 | 
 190 |         # Create a mock context
 191 |         mock_ctx = MagicMock(spec=Context)
 192 | 
 193 |         # Create a mock CloudFormation client
 194 |         mock_cfn_client = MagicMock()
 195 |         mock_cfn_client.describe_stacks.return_value = {
 196 |             'Stacks': [
 197 |                 {
 198 |                     'StackId': 'test-stack-id',
 199 |                     'Tags': [{'Key': 'SomeOtherTag', 'Value': 'SomeOtherValue'}],
 200 |                 }
 201 |             ]
 202 |         }
 203 | 
 204 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 205 |         with patch.object(
 206 |             AwsHelper, 'create_boto3_client', return_value=mock_cfn_client
 207 |         ) as mock_create_client:
 208 |             # Call the _ensure_stack_ownership method
 209 |             success, stack, error_message = handler._ensure_stack_ownership(
 210 |                 ctx=mock_ctx, stack_name='eks-test-cluster-stack', operation='update'
 211 |             )
 212 | 
 213 |             # Verify that AwsHelper.create_boto3_client was called with the correct parameters
 214 |             mock_create_client.assert_called_once_with('cloudformation')
 215 | 
 216 |             # Verify that describe_stacks was called with the correct parameters
 217 |             mock_cfn_client.describe_stacks.assert_called_once_with(
 218 |                 StackName='eks-test-cluster-stack'
 219 |             )
 220 | 
 221 |             # Verify the result
 222 |             assert success is False
 223 |             assert stack == mock_cfn_client.describe_stacks.return_value['Stacks'][0]
 224 |             assert error_message is not None
 225 |             assert 'not created by' in error_message
 226 | 
 227 |     def test_ensure_stack_ownership_stack_not_found(self):
 228 |         """Test that _ensure_stack_ownership correctly handles a stack that doesn't exist."""
 229 |         # Create a mock MCP server
 230 |         mock_mcp = MagicMock()
 231 | 
 232 |         # Initialize the EKS handler with the mock MCP server
 233 |         handler = EksStackHandler(mock_mcp)
 234 | 
 235 |         # Create a mock context
 236 |         mock_ctx = MagicMock(spec=Context)
 237 | 
 238 |         # Create a mock CloudFormation client
 239 |         mock_cfn_client = MagicMock()
 240 |         mock_cfn_client.describe_stacks.side_effect = Exception('Stack does not exist')
 241 | 
 242 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 243 |         with patch.object(
 244 |             AwsHelper, 'create_boto3_client', return_value=mock_cfn_client
 245 |         ) as mock_create_client:
 246 |             # Call the _ensure_stack_ownership method
 247 |             success, stack, error_message = handler._ensure_stack_ownership(
 248 |                 ctx=mock_ctx, stack_name='eks-test-cluster-stack', operation='update'
 249 |             )
 250 | 
 251 |             # Verify that AwsHelper.create_boto3_client was called with the correct parameters
 252 |             mock_create_client.assert_called_once_with('cloudformation')
 253 | 
 254 |             # Verify that describe_stacks was called with the correct parameters
 255 |             mock_cfn_client.describe_stacks.assert_called_once_with(
 256 |                 StackName='eks-test-cluster-stack'
 257 |             )
 258 | 
 259 |             # Verify the result
 260 |             assert success is False
 261 |             assert stack is None
 262 |             assert error_message is not None
 263 |             assert 'not found' in error_message
 264 | 
 265 |     @pytest.mark.asyncio
 266 |     async def test_deploy_stack_update_existing(self):
 267 |         """Test that _deploy_stack updates an existing stack."""
 268 |         # Create a mock MCP server
 269 |         mock_mcp = MagicMock()
 270 | 
 271 |         # Initialize the EKS handler with the mock MCP server
 272 |         handler = EksStackHandler(mock_mcp)
 273 | 
 274 |         # Create a mock context
 275 |         mock_ctx = MagicMock(spec=Context)
 276 | 
 277 |         # Create a mock CloudFormation client
 278 |         mock_cfn_client = MagicMock()
 279 |         mock_cfn_client.describe_stacks.return_value = {
 280 |             'Stacks': [
 281 |                 {
 282 |                     'StackId': 'test-stack-id',
 283 |                     'Tags': [{'Key': CFN_STACK_TAG_KEY, 'Value': CFN_STACK_TAG_VALUE}],
 284 |                 }
 285 |             ]
 286 |         }
 287 |         mock_cfn_client.update_stack.return_value = {'StackId': 'test-stack-id'}
 288 | 
 289 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 290 |         with patch.object(
 291 |             AwsHelper, 'create_boto3_client', return_value=mock_cfn_client
 292 |         ) as mock_aws_helper:
 293 |             # Mock the open function to return a mock file
 294 |             mock_template_content = 'test template content'
 295 |             with patch('builtins.open', mock_open(read_data=mock_template_content)):
 296 |                 # Call the _deploy_stack method
 297 |                 result = await handler._deploy_stack(
 298 |                     ctx=mock_ctx,
 299 |                     template_file='/path/to/template.yaml',
 300 |                     stack_name='eks-test-cluster-stack',
 301 |                     cluster_name='test-cluster',
 302 |                 )
 303 | 
 304 |                 # Verify that AwsHelper.create_boto3_client was called with the correct parameters
 305 |                 # Note: It's called twice now - once for _ensure_stack_ownership and once for _deploy_stack
 306 |                 assert mock_aws_helper.call_count == 2
 307 |                 mock_aws_helper.assert_any_call('cloudformation')
 308 | 
 309 |                 # Verify that update_stack was called with the correct parameters
 310 |                 mock_cfn_client.update_stack.assert_called_once()
 311 |                 args, kwargs = mock_cfn_client.update_stack.call_args
 312 |                 assert kwargs['StackName'] == 'eks-test-cluster-stack'
 313 |                 assert kwargs['TemplateBody'] == mock_template_content
 314 |                 assert kwargs['Capabilities'] == [CFN_CAPABILITY_IAM]
 315 |                 assert kwargs['Tags'] == [{'Key': CFN_STACK_TAG_KEY, 'Value': CFN_STACK_TAG_VALUE}]
 316 | 
 317 |                 # Verify the result
 318 |                 assert not result.isError
 319 |                 assert result.stack_name == 'eks-test-cluster-stack'
 320 |                 assert result.stack_arn == 'test-stack-id'
 321 |                 assert result.cluster_name == 'test-cluster'
 322 |                 assert len(result.content) == 1
 323 |                 assert result.content[0].type == 'text'
 324 |                 assert 'CloudFormation stack update initiated' in result.content[0].text
 325 | 
 326 |     @pytest.mark.asyncio
 327 |     async def test_describe_stack_success(self):
 328 |         """Test that _describe_stack returns stack details successfully."""
 329 |         # Create a mock MCP server
 330 |         mock_mcp = MagicMock()
 331 | 
 332 |         # Initialize the EKS handler with the mock MCP server
 333 |         handler = EksStackHandler(mock_mcp)
 334 | 
 335 |         # Create a mock context
 336 |         mock_ctx = MagicMock(spec=Context)
 337 | 
 338 |         # Create a mock CloudFormation client
 339 |         mock_cfn_client = MagicMock()
 340 |         mock_cfn_client.describe_stacks.return_value = {
 341 |             'Stacks': [
 342 |                 {
 343 |                     'StackId': 'test-stack-id',
 344 |                     'StackName': 'eks-test-cluster-stack',
 345 |                     'CreationTime': '2023-01-01T00:00:00Z',
 346 |                     'StackStatus': 'CREATE_COMPLETE',
 347 |                     'Description': 'Test stack',
 348 |                     'Tags': [{'Key': CFN_STACK_TAG_KEY, 'Value': CFN_STACK_TAG_VALUE}],
 349 |                     'Outputs': [
 350 |                         {
 351 |                             'OutputKey': 'ClusterEndpoint',
 352 |                             'OutputValue': 'https://test-endpoint.eks.amazonaws.com',
 353 |                         },
 354 |                         {
 355 |                             'OutputKey': 'ClusterArn',
 356 |                             'OutputValue': 'arn:aws:eks:us-west-2:123456789012:cluster/test-cluster',
 357 |                         },
 358 |                     ],
 359 |                     'Parameters': [
 360 |                         {'ParameterKey': 'ClusterName', 'ParameterValue': 'test-cluster'},
 361 |                         {'ParameterKey': 'KubernetesVersion', 'ParameterValue': '1.32'},
 362 |                     ],
 363 |                 }
 364 |             ]
 365 |         }
 366 | 
 367 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 368 |         with patch.object(
 369 |             AwsHelper, 'create_boto3_client', return_value=mock_cfn_client
 370 |         ) as mock_create_client:
 371 |             # Call the _describe_stack method
 372 |             result = await handler._describe_stack(
 373 |                 ctx=mock_ctx,
 374 |                 stack_name='eks-test-cluster-stack',
 375 |                 cluster_name='test-cluster',
 376 |             )
 377 | 
 378 |             # Verify that AwsHelper.create_boto3_client was called with the correct parameters
 379 |             mock_create_client.assert_called_once_with('cloudformation')
 380 | 
 381 |             # Verify that describe_stacks was called with the correct parameters
 382 |             mock_cfn_client.describe_stacks.assert_called_once_with(
 383 |                 StackName='eks-test-cluster-stack'
 384 |             )
 385 | 
 386 |             # Verify the result
 387 |             assert not result.isError
 388 |             assert result.stack_name == 'eks-test-cluster-stack'
 389 |             assert result.stack_id == 'test-stack-id'
 390 |             assert result.cluster_name == 'test-cluster'
 391 |             assert result.creation_time == '2023-01-01T00:00:00Z'
 392 |             assert result.stack_status == 'CREATE_COMPLETE'
 393 |             assert result.outputs == {
 394 |                 'ClusterEndpoint': 'https://test-endpoint.eks.amazonaws.com',
 395 |                 'ClusterArn': 'arn:aws:eks:us-west-2:123456789012:cluster/test-cluster',
 396 |             }
 397 |             assert len(result.content) == 1
 398 |             assert result.content[0].type == 'text'
 399 |             assert 'Successfully described CloudFormation stack' in result.content[0].text
 400 | 
 401 |     @pytest.mark.asyncio
 402 |     async def test_delete_stack_success(self):
 403 |         """Test that _delete_stack deletes a stack successfully."""
 404 |         # Create a mock MCP server
 405 |         mock_mcp = MagicMock()
 406 | 
 407 |         # Initialize the EKS handler with the mock MCP server
 408 |         handler = EksStackHandler(mock_mcp)
 409 | 
 410 |         # Create a mock context
 411 |         mock_ctx = MagicMock(spec=Context)
 412 | 
 413 |         # Create a mock CloudFormation client
 414 |         mock_cfn_client = MagicMock()
 415 |         mock_cfn_client.describe_stacks.return_value = {
 416 |             'Stacks': [
 417 |                 {
 418 |                     'StackId': 'test-stack-id',
 419 |                     'StackName': 'eks-test-cluster-stack',
 420 |                     'Tags': [{'Key': CFN_STACK_TAG_KEY, 'Value': CFN_STACK_TAG_VALUE}],
 421 |                 }
 422 |             ]
 423 |         }
 424 | 
 425 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 426 |         with patch.object(AwsHelper, 'create_boto3_client', return_value=mock_cfn_client):
 427 |             # Call the _delete_stack method
 428 |             result = await handler._delete_stack(
 429 |                 ctx=mock_ctx,
 430 |                 stack_name='eks-test-cluster-stack',
 431 |                 cluster_name='test-cluster',
 432 |             )
 433 | 
 434 |             # Verify that delete_stack was called with the correct parameters
 435 |             mock_cfn_client.delete_stack.assert_called_once_with(
 436 |                 StackName='eks-test-cluster-stack'
 437 |             )
 438 | 
 439 |             # Verify the result
 440 |             assert not result.isError
 441 |             assert result.stack_name == 'eks-test-cluster-stack'
 442 |             assert result.stack_id == 'test-stack-id'
 443 |             assert result.cluster_name == 'test-cluster'
 444 |             assert len(result.content) == 1
 445 |             assert result.content[0].type == 'text'
 446 |             assert 'Initiated deletion of CloudFormation stack' in result.content[0].text
 447 | 
 448 |     @pytest.mark.asyncio
 449 |     async def test_delete_stack_not_owned(self):
 450 |         """Test that _delete_stack fails when the stack is not owned by our tool."""
 451 |         # Create a mock MCP server
 452 |         mock_mcp = MagicMock()
 453 | 
 454 |         # Initialize the EKS handler with the mock MCP server
 455 |         handler = EksStackHandler(mock_mcp)
 456 | 
 457 |         # Create a mock context
 458 |         mock_ctx = MagicMock(spec=Context)
 459 | 
 460 |         # Create a mock CloudFormation client
 461 |         mock_cfn_client = MagicMock()
 462 |         mock_cfn_client.describe_stacks.return_value = {
 463 |             'Stacks': [
 464 |                 {
 465 |                     'StackId': 'test-stack-id',
 466 |                     'StackName': 'eks-test-cluster-stack',
 467 |                     'Tags': [{'Key': 'SomeOtherTag', 'Value': 'SomeOtherValue'}],
 468 |                 }
 469 |             ]
 470 |         }
 471 | 
 472 |         # Mock the AwsHelper.create_boto3_client method to return our mock client
 473 |         with patch.object(AwsHelper, 'create_boto3_client', return_value=mock_cfn_client):
 474 |             # Call the _delete_stack method
 475 |             result = await handler._delete_stack(
 476 |                 ctx=mock_ctx,
 477 |                 stack_name='eks-test-cluster-stack',
 478 |                 cluster_name='test-cluster',
 479 |             )
 480 | 
 481 |             # Verify that delete_stack was not called
 482 |             mock_cfn_client.delete_stack.assert_not_called()
 483 | 
 484 |             # Verify the result
 485 |             assert result.isError
 486 |             assert result.stack_name == 'eks-test-cluster-stack'
 487 |             assert result.stack_id == 'test-stack-id'
 488 |             assert result.cluster_name == 'test-cluster'
 489 |             assert len(result.content) == 1
 490 |             assert result.content[0].type == 'text'
 491 |             assert 'not created by' in result.content[0].text
 492 | 
 493 |     @pytest.mark.asyncio
 494 |     async def test_generate_template_success(self):
 495 |         """Test that _generate_template generates a template successfully."""
 496 |         # Create a mock MCP server
 497 |         mock_mcp = MagicMock()
 498 | 
 499 |         # Initialize the EKS handler with the mock MCP server
 500 |         handler = EksStackHandler(mock_mcp)
 501 | 
 502 |         # Create a mock context
 503 |         mock_ctx = MagicMock(spec=Context)
 504 | 
 505 |         # Mock the open function to return a mock file
 506 |         mock_template_content = """
 507 |         Parameters:
 508 |           ClusterName:
 509 |             Type: String
 510 |             Default: my-cluster
 511 |         Resources:
 512 |           EksCluster:
 513 |             Type: AWS::EKS::Cluster
 514 |             Metadata:
 515 |               checkov:
 516 |                 skip:
 517 |                   - id: CKV_AWS_58
 518 |                   - comment: "Secrets encryption is enabled by default in EKS 1.27+"
 519 |             Properties:
 520 |               Name: my-cluster
 521 |         """
 522 |         mock_yaml_content = yaml.safe_load(mock_template_content)
 523 | 
 524 |         # Mock the necessary functions
 525 |         with (
 526 |             patch('builtins.open', mock_open(read_data=mock_template_content)),
 527 |             patch('os.path.dirname', return_value='/mock/path'),
 528 |             patch('os.path.join', return_value='/mock/path/template.yaml'),
 529 |             patch('os.makedirs', return_value=None),
 530 |             patch('yaml.safe_load', return_value=mock_yaml_content),
 531 |             patch('yaml.dump', return_value=mock_template_content),
 532 |         ):
 533 |             # Call the _generate_template method
 534 |             result = await handler._generate_template(
 535 |                 ctx=mock_ctx,
 536 |                 template_path='/path/to/output/template.yaml',
 537 |                 cluster_name='test-cluster',
 538 |             )
 539 | 
 540 |             # Verify the result
 541 |             assert not result.isError
 542 |             assert result.template_path == '/path/to/output/template.yaml'
 543 |             assert len(result.content) == 1
 544 |             assert result.content[0].type == 'text'
 545 |             assert 'template generated' in result.content[0].text
 546 | 
 547 |             # Verify that the Metadata section was removed from the EksCluster resource
 548 |             # because it only contained checkov metadata which was removed
 549 |             assert 'Resources' in mock_yaml_content
 550 |             assert 'EksCluster' in mock_yaml_content['Resources']
 551 |             assert 'Metadata' not in mock_yaml_content['Resources']['EksCluster']
 552 | 
 553 |     @pytest.mark.asyncio
 554 |     async def test_generate_template_with_other_metadata(self):
 555 |         """Test that _generate_template only removes checkov metadata and keeps other metadata."""
 556 |         # Create a mock MCP server
 557 |         mock_mcp = MagicMock()
 558 | 
 559 |         # Initialize the EKS handler with the mock MCP server
 560 |         handler = EksStackHandler(mock_mcp)
 561 | 
 562 |         # Create a mock context
 563 |         mock_ctx = MagicMock(spec=Context)
 564 | 
 565 |         # Mock the open function to return a mock file with both checkov and other metadata
 566 |         mock_template_content = """
 567 |         Parameters:
 568 |           ClusterName:
 569 |             Type: String
 570 |             Default: my-cluster
 571 |         Resources:
 572 |           EksCluster:
 573 |             Type: AWS::EKS::Cluster
 574 |             Metadata:
 575 |               checkov:
 576 |                 skip:
 577 |                   - id: CKV_AWS_58
 578 |                   - comment: "Secrets encryption is enabled by default in EKS 1.27+"
 579 |               other_metadata:
 580 |                 key: value
 581 |             Properties:
 582 |               Name: my-cluster
 583 |         """
 584 |         # Create a deep copy of the YAML content that we can modify
 585 |         mock_yaml_content = yaml.safe_load(mock_template_content)
 586 | 
 587 |         # Mock the necessary functions
 588 |         with (
 589 |             patch('builtins.open', mock_open(read_data=mock_template_content)),
 590 |             patch('os.path.dirname', return_value='/mock/path'),
 591 |             patch('os.path.join', return_value='/mock/path/template.yaml'),
 592 |             patch('os.makedirs', return_value=None),
 593 |             patch('yaml.safe_load', return_value=mock_yaml_content),
 594 |             patch('yaml.dump', return_value=mock_template_content),
 595 |         ):
 596 |             # Call the _generate_template method
 597 |             result = await handler._generate_template(
 598 |                 ctx=mock_ctx,
 599 |                 template_path='/path/to/output/template.yaml',
 600 |                 cluster_name='test-cluster',
 601 |             )
 602 | 
 603 |             # Verify the result
 604 |             assert not result.isError
 605 |             assert result.template_path == '/path/to/output/template.yaml'
 606 | 
 607 |             # Verify that only the checkov metadata was removed
 608 |             assert 'Resources' in mock_yaml_content
 609 |             assert 'EksCluster' in mock_yaml_content['Resources']
 610 |             assert 'Metadata' in mock_yaml_content['Resources']['EksCluster']
 611 |             assert 'checkov' not in mock_yaml_content['Resources']['EksCluster']['Metadata']
 612 |             assert 'other_metadata' in mock_yaml_content['Resources']['EksCluster']['Metadata']
 613 |             assert mock_yaml_content['Resources']['EksCluster']['Metadata']['other_metadata'] == {
 614 |                 'key': 'value'
 615 |             }
 616 | 
 617 |     @pytest.mark.asyncio
 618 |     async def test_manage_eks_stacks_generate(self):
 619 |         """Test that manage_eks_stacks handles the generate operation correctly."""
 620 |         # Create a mock MCP server
 621 |         mock_mcp = MagicMock()
 622 | 
 623 |         # Initialize the EKS handler with the mock MCP server
 624 |         handler = EksStackHandler(mock_mcp, allow_write=True)
 625 | 
 626 |         # Create a mock context
 627 |         mock_ctx = MagicMock(spec=Context)
 628 | 
 629 |         # Mock the _generate_template method
 630 |         mock_result = GenerateTemplateResponse(
 631 |             isError=False,
 632 |             content=[TextContent(type='text', text='Generated CloudFormation template')],
 633 |             template_path='/path/to/output/template.yaml',
 634 |         )
 635 |         with patch.object(handler, '_generate_template', return_value=mock_result) as mock_handler:
 636 |             # Call the manage_eks_stacks method with generate operation
 637 |             result = await handler.manage_eks_stacks(
 638 |                 ctx=mock_ctx,
 639 |                 operation='generate',
 640 |                 template_file='/path/to/output/template.yaml',
 641 |                 cluster_name='test-cluster',
 642 |             )
 643 | 
 644 |             # Verify that _generate_template was called with the correct parameters
 645 |             mock_handler.assert_called_once_with(
 646 |                 ctx=mock_ctx,
 647 |                 template_path='/path/to/output/template.yaml',
 648 |                 cluster_name='test-cluster',
 649 |             )
 650 | 
 651 |             # Verify the result is the same as the mock result
 652 |             assert result is mock_result
 653 |             assert not result.isError
 654 |             # Check specific attributes for GenerateTemplateResponse
 655 |             assert isinstance(result, GenerateTemplateResponse)
 656 |             assert result.template_path == '/path/to/output/template.yaml'
 657 |             assert len(result.content) == 1
 658 |             assert result.content[0].type == 'text'
 659 |             assert 'Generated CloudFormation template' in result.content[0].text
 660 | 
 661 |     @pytest.mark.asyncio
 662 |     async def test_manage_eks_stacks_deploy(self):
 663 |         """Test that manage_eks_stacks handles the deploy operation correctly."""
 664 |         # Create a mock MCP server
 665 |         mock_mcp = MagicMock()
 666 | 
 667 |         # Initialize the EKS handler with the mock MCP server
 668 |         handler = EksStackHandler(mock_mcp, allow_write=True)
 669 | 
 670 |         # Create a mock context
 671 |         mock_ctx = MagicMock(spec=Context)
 672 | 
 673 |         # Mock the _deploy_stack method
 674 |         mock_result = DeployStackResponse(
 675 |             isError=False,
 676 |             content=[TextContent(type='text', text='CloudFormation stack creation initiated')],
 677 |             stack_name='eks-test-cluster-stack',
 678 |             stack_arn='test-stack-id',
 679 |             cluster_name='test-cluster',
 680 |         )
 681 |         with patch.object(handler, '_deploy_stack', return_value=mock_result) as mock_handler:
 682 |             # Call the manage_eks_stacks method with deploy operation
 683 |             result = await handler.manage_eks_stacks(
 684 |                 ctx=mock_ctx,
 685 |                 operation='deploy',
 686 |                 template_file='/path/to/template.yaml',
 687 |                 cluster_name='test-cluster',
 688 |             )
 689 | 
 690 |             # Verify that _deploy_stack was called with the correct parameters
 691 |             mock_handler.assert_called_once_with(
 692 |                 ctx=mock_ctx,
 693 |                 template_file='/path/to/template.yaml',
 694 |                 stack_name='eks-test-cluster-stack',
 695 |                 cluster_name='test-cluster',
 696 |             )
 697 | 
 698 |             # Verify the result
 699 |             assert not result.isError
 700 |             # Check specific attributes for DeployStackResponse
 701 |             assert isinstance(result, DeployStackResponse)
 702 |             assert result.stack_name == 'eks-test-cluster-stack'
 703 |             assert result.stack_arn == 'test-stack-id'
 704 |             assert result.cluster_name == 'test-cluster'
 705 |             assert len(result.content) == 1
 706 |             assert result.content[0].type == 'text'
 707 |             assert 'CloudFormation stack creation initiated' in result.content[0].text
 708 | 
 709 |     @pytest.mark.asyncio
 710 |     async def test_manage_eks_stacks_describe(self):
 711 |         """Test that manage_eks_stacks handles the describe operation correctly."""
 712 |         # Create a mock MCP server
 713 |         mock_mcp = MagicMock()
 714 | 
 715 |         # Initialize the EKS handler with the mock MCP server
 716 |         handler = EksStackHandler(mock_mcp)
 717 | 
 718 |         # Create a mock context
 719 |         mock_ctx = MagicMock(spec=Context)
 720 | 
 721 |         # Mock the _describe_stack method
 722 |         mock_result = DescribeStackResponse(
 723 |             isError=False,
 724 |             content=[TextContent(type='text', text='Successfully described CloudFormation stack')],
 725 |             stack_name='eks-test-cluster-stack',
 726 |             stack_id='test-stack-id',
 727 |             cluster_name='test-cluster',
 728 |             creation_time='2023-01-01T00:00:00Z',
 729 |             stack_status='CREATE_COMPLETE',
 730 |             outputs={},
 731 |         )
 732 |         with patch.object(handler, '_describe_stack', return_value=mock_result) as mock_handler:
 733 |             # Call the manage_eks_stacks method with describe operation
 734 |             result = await handler.manage_eks_stacks(
 735 |                 ctx=mock_ctx,
 736 |                 operation='describe',
 737 |                 cluster_name='test-cluster',
 738 |             )
 739 | 
 740 |             # Verify that _describe_stack was called with the correct parameters
 741 |             mock_handler.assert_called_once_with(
 742 |                 ctx=mock_ctx, stack_name='eks-test-cluster-stack', cluster_name='test-cluster'
 743 |             )
 744 | 
 745 |             # Verify the result
 746 |             assert not result.isError
 747 |             # Check specific attributes for DescribeStackResponse
 748 |             assert isinstance(result, DescribeStackResponse)
 749 |             assert result.stack_name == 'eks-test-cluster-stack'
 750 |             assert result.stack_id == 'test-stack-id'
 751 |             assert result.cluster_name == 'test-cluster'
 752 |             assert result.creation_time == '2023-01-01T00:00:00Z'
 753 |             assert result.stack_status == 'CREATE_COMPLETE'
 754 |             assert len(result.content) == 1
 755 |             assert result.content[0].type == 'text'
 756 |             assert 'Successfully described CloudFormation stack' in result.content[0].text
 757 | 
 758 |     @pytest.mark.asyncio
 759 |     async def test_manage_eks_stacks_delete(self):
 760 |         """Test that manage_eks_stacks handles the delete operation correctly."""
 761 |         # Create a mock MCP server
 762 |         mock_mcp = MagicMock()
 763 | 
 764 |         # Initialize the EKS handler with the mock MCP server
 765 |         handler = EksStackHandler(mock_mcp, allow_write=True)
 766 | 
 767 |         # Create a mock context
 768 |         mock_ctx = MagicMock(spec=Context)
 769 | 
 770 |         # Mock the _delete_stack method
 771 |         mock_result = DeleteStackResponse(
 772 |             isError=False,
 773 |             content=[TextContent(type='text', text='Initiated deletion of CloudFormation stack')],
 774 |             stack_name='eks-test-cluster-stack',
 775 |             stack_id='test-stack-id',
 776 |             cluster_name='test-cluster',
 777 |         )
 778 |         with patch.object(handler, '_delete_stack', return_value=mock_result) as mock_handler:
 779 |             # Call the manage_eks_stacks method with delete operation
 780 |             result = await handler.manage_eks_stacks(
 781 |                 ctx=mock_ctx,
 782 |                 operation='delete',
 783 |                 cluster_name='test-cluster',
 784 |             )
 785 | 
 786 |             # Verify that _delete_stack was called with the correct parameters
 787 |             mock_handler.assert_called_once_with(
 788 |                 ctx=mock_ctx, stack_name='eks-test-cluster-stack', cluster_name='test-cluster'
 789 |             )
 790 | 
 791 |             # Verify the result
 792 |             assert not result.isError
 793 |             # Check specific attributes for DeleteStackResponse
 794 |             assert isinstance(result, DeleteStackResponse)
 795 |             assert result.stack_name == 'eks-test-cluster-stack'
 796 |             assert result.stack_id == 'test-stack-id'
 797 |             assert result.cluster_name == 'test-cluster'
 798 |             assert len(result.content) == 1
 799 |             assert result.content[0].type == 'text'
 800 |             assert 'Initiated deletion of CloudFormation stack' in result.content[0].text
 801 | 
 802 |     @pytest.mark.asyncio
 803 |     async def test_manage_eks_stacks_invalid_operation(self):
 804 |         """Test that manage_eks_stacks handles invalid operations correctly."""
 805 |         # Create a mock MCP server
 806 |         mock_mcp = MagicMock()
 807 | 
 808 |         # Initialize the EKS handler with the mock MCP server
 809 |         handler = EksStackHandler(mock_mcp)
 810 | 
 811 |         # Create a mock context
 812 |         mock_ctx = MagicMock(spec=Context)
 813 | 
 814 |         # Call the manage_eks_stacks method with an invalid operation
 815 |         result = await handler.manage_eks_stacks(
 816 |             ctx=mock_ctx,
 817 |             operation='invalid',
 818 |             cluster_name='test-cluster',
 819 |         )
 820 | 
 821 |         # Verify the result
 822 |         assert result.isError
 823 |         assert len(result.content) == 1
 824 |         assert result.content[0].type == 'text'
 825 |         assert 'not allowed without write access' in result.content[0].text
 826 | 
 827 |     @pytest.mark.asyncio
 828 |     async def test_manage_eks_stacks_write_access_disabled(self):
 829 |         """Test that manage_eks_stacks rejects mutating operations when write access is disabled."""
 830 |         # Create a mock MCP server
 831 |         mock_mcp = MagicMock()
 832 | 
 833 |         # Initialize the EKS handler with the mock MCP server and allow_write=False
 834 |         handler = EksStackHandler(mock_mcp, allow_write=False)
 835 | 
 836 |         # Create a mock context
 837 |         mock_ctx = MagicMock(spec=Context)
 838 | 
 839 |         # Test generate operation (should be rejected when write access is disabled)
 840 |         result = await handler.manage_eks_stacks(
 841 |             ctx=mock_ctx,
 842 |             operation='generate',
 843 |             template_file='/path/to/template.yaml',
 844 |             cluster_name='test-cluster',
 845 |         )
 846 | 
 847 |         # Verify the result
 848 |         assert result.isError
 849 |         assert len(result.content) == 1
 850 |         assert result.content[0].type == 'text'
 851 |         assert 'not allowed without write access' in result.content[0].text
 852 | 
 853 |         # Test deploy operation (should be rejected when write access is disabled)
 854 |         result = await handler.manage_eks_stacks(
 855 |             ctx=mock_ctx,
 856 |             operation='deploy',
 857 |             template_file='/path/to/template.yaml',
 858 |             cluster_name='test-cluster',
 859 |         )
 860 | 
 861 |         # Verify the result
 862 |         assert result.isError
 863 |         assert len(result.content) == 1
 864 |         assert result.content[0].type == 'text'
 865 |         assert 'not allowed without write access' in result.content[0].text
 866 | 
 867 |         # Test delete operation (should be rejected when write access is disabled)
 868 |         result = await handler.manage_eks_stacks(
 869 |             ctx=mock_ctx,
 870 |             operation='delete',
 871 |             cluster_name='test-cluster',
 872 |         )
 873 | 
 874 |         # Verify the result
 875 |         assert result.isError
 876 |         assert len(result.content) == 1
 877 |         assert result.content[0].type == 'text'
 878 |         assert 'not allowed without write access' in result.content[0].text
 879 | 
 880 |         # Test describe operation (should be allowed even when write access is disabled)
 881 |         mock_result = DescribeStackResponse(
 882 |             isError=False,
 883 |             content=[TextContent(type='text', text='Successfully described CloudFormation stack')],
 884 |             stack_name='eks-test-cluster-stack',
 885 |             stack_id='test-stack-id',
 886 |             cluster_name='test-cluster',
 887 |             creation_time='2023-01-01T00:00:00Z',
 888 |             stack_status='CREATE_COMPLETE',
 889 |             outputs={},
 890 |         )
 891 |         with patch.object(handler, '_describe_stack', return_value=mock_result) as mock_handler:
 892 |             result = await handler.manage_eks_stacks(
 893 |                 ctx=mock_ctx,
 894 |                 operation='describe',
 895 |                 cluster_name='test-cluster',
 896 |             )
 897 | 
 898 |             # Verify that _describe_stack was called (operation allowed even when write access is disabled)
 899 |             mock_handler.assert_called_once()
 900 | 
 901 |             # Verify the result
 902 |             assert not result.isError
 903 |             assert len(result.content) == 1
 904 |             assert result.content[0].type == 'text'
 905 |             assert 'Successfully described CloudFormation stack' in result.content[0].text
 906 | 
 907 |     @pytest.mark.asyncio
 908 |     async def test_manage_eks_stacks_missing_parameters(self):
 909 |         """Test that manage_eks_stacks handles missing parameters correctly."""
 910 |         # Create a mock MCP server
 911 |         mock_mcp = MagicMock()
 912 | 
 913 |         # Initialize the EKS handler with the mock MCP server
 914 |         handler = EksStackHandler(mock_mcp, allow_write=True)
 915 | 
 916 |         # Create a mock context
 917 |         mock_ctx = MagicMock(spec=Context)
 918 | 
 919 |         # Test missing template_file for generate operation
 920 |         with pytest.raises(ValueError, match='template_file is required for generate operation'):
 921 |             await handler.manage_eks_stacks(
 922 |                 ctx=mock_ctx,
 923 |                 operation='generate',
 924 |                 cluster_name='test-cluster',
 925 |                 template_file=None,  # Explicitly pass None
 926 |             )
 927 | 
 928 |         # Test missing cluster_name for generate operation
 929 |         with pytest.raises(ValueError, match='cluster_name is required for generate operation'):
 930 |             await handler.manage_eks_stacks(
 931 |                 ctx=mock_ctx,
 932 |                 operation='generate',
 933 |                 template_file='/path/to/template.yaml',
 934 |                 cluster_name=None,  # Explicitly pass None
 935 |             )
 936 | 
 937 |         # Test missing template_file for deploy operation
 938 |         with pytest.raises(ValueError, match='template_file is required for deploy operation'):
 939 |             await handler.manage_eks_stacks(
 940 |                 ctx=mock_ctx,
 941 |                 operation='deploy',
 942 |                 cluster_name='test-cluster',
 943 |                 template_file=None,  # Explicitly pass None
 944 |             )
 945 | 
 946 |         # Test missing cluster_name for deploy operation
 947 |         with pytest.raises(ValueError, match='cluster_name is required for deploy operation'):
 948 |             await handler.manage_eks_stacks(
 949 |                 ctx=mock_ctx,
 950 |                 operation='deploy',
 951 |                 template_file='/path/to/template.yaml',
 952 |                 cluster_name=None,  # Explicitly pass None
 953 |             )
 954 | 
 955 |         # Test missing cluster_name for describe operation
 956 |         with pytest.raises(ValueError, match='cluster_name is required for describe operation'):
 957 |             await handler.manage_eks_stacks(
 958 |                 ctx=mock_ctx,
 959 |                 operation='describe',
 960 |                 cluster_name=None,  # Explicitly pass None
 961 |             )
 962 | 
 963 |         # Test missing cluster_name for delete operation
 964 |         with pytest.raises(ValueError, match='cluster_name is required for delete operation'):
 965 |             await handler.manage_eks_stacks(
 966 |                 ctx=mock_ctx,
 967 |                 operation='delete',
 968 |                 cluster_name=None,  # Explicitly pass None
 969 |             )
 970 | 
 971 |     def test_remove_checkov_metadata_direct(self):
 972 |         """Test the _remove_checkov_metadata method directly."""
 973 |         # Create a mock MCP server
 974 |         mock_mcp = MagicMock()
 975 | 
 976 |         # Initialize the EKS handler with the mock MCP server
 977 |         handler = EksStackHandler(mock_mcp)
 978 | 
 979 |         # Test case 1: Resource with checkov metadata only
 980 |         resource = {
 981 |             'Type': 'AWS::EKS::Cluster',
 982 |             'Metadata': {
 983 |                 'checkov': {
 984 |                     'skip': [
 985 |                         {'id': 'CKV_AWS_58'},
 986 |                         {'comment': 'Secrets encryption is enabled by default in EKS 1.27+'},
 987 |                     ]
 988 |                 }
 989 |             },
 990 |             'Properties': {'Name': 'test-cluster'},
 991 |         }
 992 | 
 993 |         # Call the method
 994 |         handler._remove_checkov_metadata(resource)
 995 | 
 996 |         # Verify that the Metadata section was removed completely
 997 |         assert 'Metadata' not in resource
 998 | 
 999 |         # Test case 2: Resource with checkov metadata and other metadata
1000 |         resource = {
1001 |             'Type': 'AWS::EKS::Cluster',
1002 |             'Metadata': {
1003 |                 'checkov': {
1004 |                     'skip': [
1005 |                         {'id': 'CKV_AWS_58'},
1006 |                         {'comment': 'Secrets encryption is enabled by default in EKS 1.27+'},
1007 |                     ]
1008 |                 },
1009 |                 'other_metadata': {'key': 'value'},
1010 |             },
1011 |             'Properties': {'Name': 'test-cluster'},
1012 |         }
1013 | 
1014 |         # Call the method
1015 |         handler._remove_checkov_metadata(resource)
1016 | 
1017 |         # Verify that only the checkov metadata was removed
1018 |         assert 'Metadata' in resource
1019 |         assert 'checkov' not in resource['Metadata']
1020 |         assert 'other_metadata' in resource['Metadata']
1021 |         assert resource['Metadata']['other_metadata'] == {'key': 'value'}
1022 | 
1023 |         # Test case 3: Resource with no metadata
1024 |         resource = {
1025 |             'Type': 'AWS::EKS::Cluster',
1026 |             'Properties': {'Name': 'test-cluster'},
1027 |         }
1028 | 
1029 |         # Call the method
1030 |         handler._remove_checkov_metadata(resource)
1031 | 
1032 |         # Verify that the resource is unchanged
1033 |         assert 'Metadata' not in resource
1034 |         assert resource == {
1035 |             'Type': 'AWS::EKS::Cluster',
1036 |             'Properties': {'Name': 'test-cluster'},
1037 |         }
1038 | 
1039 |     @pytest.mark.asyncio
1040 |     async def test_generate_template_error(self):
1041 |         """Test error handling in the _generate_template method."""
1042 |         # Create a mock MCP server
1043 |         mock_mcp = MagicMock()
1044 | 
1045 |         # Initialize the EKS handler with the mock MCP server
1046 |         handler = EksStackHandler(mock_mcp)
1047 | 
1048 |         # Create a mock context
1049 |         mock_ctx = MagicMock(spec=Context)
1050 | 
1051 |         # Test case 1: Error reading the template file
1052 |         with patch('builtins.open', side_effect=FileNotFoundError('Template file not found')):
1053 |             with patch('os.path.dirname', return_value='/path'):
1054 |                 with patch('os.path.join', return_value='/path/template.yaml'):
1055 |                     # Call the _generate_template method
1056 |                     result = await handler._generate_template(
1057 |                         ctx=mock_ctx,
1058 |                         template_path='/path/to/output/template.yaml',
1059 |                         cluster_name='test-cluster',
1060 |                     )
1061 | 
1062 |                     # Verify the result
1063 |                     assert result.isError
1064 |                     assert len(result.content) == 1
1065 |                     assert result.content[0].type == 'text'
1066 |                     assert 'Failed to generate template' in result.content[0].text
1067 |                     # The actual error message might vary, so just check for the general error
1068 |                     # instead of the specific message
1069 |             assert result.template_path == ''
1070 | 
1071 |         # Test case 2: Error creating the output directory
1072 |         with patch('os.makedirs', side_effect=PermissionError('Permission denied')):
1073 |             with patch('os.path.dirname', return_value='/path/to/output'):
1074 |                 # Call the _generate_template method
1075 |                 result = await handler._generate_template(
1076 |                     ctx=mock_ctx,
1077 |                     template_path='/path/to/output/template.yaml',
1078 |                     cluster_name='test-cluster',
1079 |                 )
1080 | 
1081 |                 # Verify the result
1082 |                 assert result.isError
1083 |                 assert len(result.content) == 1
1084 |                 assert result.content[0].type == 'text'
1085 |                 assert 'Failed to generate template' in result.content[0].text
1086 |                 assert 'Permission denied' in result.content[0].text
1087 |                 assert result.template_path == ''
1088 | 
1089 |         # Test case 3: Error parsing the YAML template
1090 |         with patch('builtins.open', mock_open(read_data='invalid: yaml: content')):
1091 |             with patch('os.path.dirname', return_value='/mock/path'):
1092 |                 with patch('os.path.join', return_value='/mock/path/template.yaml'):
1093 |                     with patch('os.makedirs', return_value=None):
1094 |                         with patch('yaml.safe_load', side_effect=yaml.YAMLError('Invalid YAML')):
1095 |                             # Call the _generate_template method
1096 |                             result = await handler._generate_template(
1097 |                                 ctx=mock_ctx,
1098 |                                 template_path='/path/to/output/template.yaml',
1099 |                                 cluster_name='test-cluster',
1100 |                             )
1101 | 
1102 |                             # Verify the result
1103 |                             assert result.isError
1104 |                             assert len(result.content) == 1
1105 |                             assert result.content[0].type == 'text'
1106 |                             assert 'Failed to generate template' in result.content[0].text
1107 |                             assert 'Invalid YAML' in result.content[0].text
1108 |                             assert result.template_path == ''
1109 | 
1110 |     @pytest.mark.asyncio
1111 |     async def test_deploy_stack_error(self):
1112 |         """Test error handling in the _deploy_stack method."""
1113 |         # Create a mock MCP server
1114 |         mock_mcp = MagicMock()
1115 | 
1116 |         # Initialize the EKS handler with the mock MCP server
1117 |         handler = EksStackHandler(mock_mcp)
1118 | 
1119 |         # Create a mock context
1120 |         mock_ctx = MagicMock(spec=Context)
1121 | 
1122 |         # Test case 1: Error reading the template file
1123 |         with patch('builtins.open', side_effect=FileNotFoundError('Template file not found')):
1124 |             # Call the _deploy_stack method
1125 |             result = await handler._deploy_stack(
1126 |                 ctx=mock_ctx,
1127 |                 template_file='/path/to/template.yaml',
1128 |                 stack_name='eks-test-cluster-stack',
1129 |                 cluster_name='test-cluster',
1130 |             )
1131 | 
1132 |             # Verify the result
1133 |             assert result.isError
1134 |             assert len(result.content) == 1
1135 |             assert result.content[0].type == 'text'
1136 |             assert 'Failed to deploy stack' in result.content[0].text
1137 |             assert 'Template file not found' in result.content[0].text
1138 |             assert result.stack_name == 'eks-test-cluster-stack'
1139 |             assert result.stack_arn == ''
1140 |             assert result.cluster_name == 'test-cluster'
1141 | 
1142 |         # Test case 2: Error creating the CloudFormation stack
1143 |         mock_cfn_client = MagicMock()
1144 |         mock_cfn_client.create_stack.side_effect = Exception('Failed to create stack')
1145 | 
1146 |         with patch.object(AwsHelper, 'create_boto3_client', return_value=mock_cfn_client):
1147 |             with patch.object(
1148 |                 handler,
1149 |                 '_ensure_stack_ownership',
1150 |                 return_value=(False, None, 'Stack does not exist'),
1151 |             ):
1152 |                 with patch('builtins.open', mock_open(read_data='test template content')):
1153 |                     # Call the _deploy_stack method
1154 |                     result = await handler._deploy_stack(
1155 |                         ctx=mock_ctx,
1156 |                         template_file='/path/to/template.yaml',
1157 |                         stack_name='eks-test-cluster-stack',
1158 |                         cluster_name='test-cluster',
1159 |                     )
1160 | 
1161 |                     # Verify the result
1162 |                     assert result.isError
1163 |                     assert len(result.content) == 1
1164 |                     assert result.content[0].type == 'text'
1165 |                     assert 'Failed to deploy stack' in result.content[0].text
1166 |                     assert 'Failed to create stack' in result.content[0].text
1167 |                     assert result.stack_name == 'eks-test-cluster-stack'
1168 |                     assert result.stack_arn == ''
1169 |                     assert result.cluster_name == 'test-cluster'
1170 | 
1171 |         # Test case 3: Error updating the CloudFormation stack
1172 |         mock_cfn_client = MagicMock()
1173 |         mock_cfn_client.update_stack.side_effect = Exception('Failed to update stack')
1174 | 
1175 |         with patch.object(AwsHelper, 'create_boto3_client', return_value=mock_cfn_client):
1176 |             with patch.object(
1177 |                 handler,
1178 |                 '_ensure_stack_ownership',
1179 |                 return_value=(
1180 |                     True,
1181 |                     {
1182 |                         'StackId': 'test-stack-id',
1183 |                         'Tags': [{'Key': 'CreatedBy', 'Value': 'EksMcpServer'}],
1184 |                     },
1185 |                     None,
1186 |                 ),
1187 |             ):
1188 |                 with patch('builtins.open', mock_open(read_data='test template content')):
1189 |                     # Call the _deploy_stack method
1190 |                     result = await handler._deploy_stack(
1191 |                         ctx=mock_ctx,
1192 |                         template_file='/path/to/template.yaml',
1193 |                         stack_name='eks-test-cluster-stack',
1194 |                         cluster_name='test-cluster',
1195 |                     )
1196 | 
1197 |                     # Verify the result
1198 |                     assert result.isError
1199 |                     assert len(result.content) == 1
1200 |                     assert result.content[0].type == 'text'
1201 |                     assert 'Failed to deploy stack' in result.content[0].text
1202 |                     assert 'Failed to update stack' in result.content[0].text
1203 |                     assert result.stack_name == 'eks-test-cluster-stack'
1204 |                     assert result.stack_arn == ''
1205 |                     assert result.cluster_name == 'test-cluster'
1206 | 
1207 |     @pytest.mark.asyncio
1208 |     async def test_delete_stack_error(self):
1209 |         """Test error handling in the _delete_stack method."""
1210 |         # Create a mock MCP server
1211 |         mock_mcp = MagicMock()
1212 | 
1213 |         # Initialize the EKS handler with the mock MCP server
1214 |         handler = EksStackHandler(mock_mcp)
1215 | 
1216 |         # Create a mock context
1217 |         mock_ctx = MagicMock(spec=Context)
1218 | 
1219 |         # Test case: Error deleting the CloudFormation stack
1220 |         mock_cfn_client = MagicMock()
1221 |         mock_cfn_client.delete_stack.side_effect = Exception('Failed to delete stack')
1222 | 
1223 |         with patch.object(AwsHelper, 'create_boto3_client', return_value=mock_cfn_client):
1224 |             with patch.object(
1225 |                 handler,
1226 |                 '_ensure_stack_ownership',
1227 |                 return_value=(
1228 |                     True,
1229 |                     {
1230 |                         'StackId': 'test-stack-id',
1231 |                         'StackName': 'eks-test-cluster-stack',
1232 |                         'Tags': [{'Key': 'CreatedBy', 'Value': 'EksMcpServer'}],
1233 |                     },
1234 |                     None,
1235 |                 ),
1236 |             ):
1237 |                 # Call the _delete_stack method
1238 |                 result = await handler._delete_stack(
1239 |                     ctx=mock_ctx,
1240 |                     stack_name='eks-test-cluster-stack',
1241 |                     cluster_name='test-cluster',
1242 |                 )
1243 | 
1244 |                 # Verify the result
1245 |                 assert result.isError
1246 |                 assert len(result.content) == 1
1247 |                 assert result.content[0].type == 'text'
1248 |                 assert 'Failed to delete stack' in result.content[0].text
1249 |                 assert result.stack_name == 'eks-test-cluster-stack'
1250 |                 # The stack_id might not be set in the error case, so don't assert its value
1251 |                 assert result.cluster_name == 'test-cluster'
1252 | 
1253 |     @pytest.mark.asyncio
1254 |     async def test_manage_eks_stacks_general_exception(self):
1255 |         """Test general exception handling in the manage_eks_stacks method."""
1256 |         # Create a mock MCP server
1257 |         mock_mcp = MagicMock()
1258 | 
1259 |         # Initialize the EKS handler with the mock MCP server
1260 |         handler = EksStackHandler(mock_mcp, allow_write=True)
1261 | 
1262 |         # Create a mock context
1263 |         mock_ctx = MagicMock(spec=Context)
1264 | 
1265 |         # Test case 1: General exception in _generate_template
1266 |         with patch.object(
1267 |             handler, '_generate_template', side_effect=Exception('Unexpected error')
1268 |         ):
1269 |             # Call the manage_eks_stacks method with generate operation
1270 |             result = await handler.manage_eks_stacks(
1271 |                 ctx=mock_ctx,
1272 |                 operation='generate',
1273 |                 template_file='/path/to/output/template.yaml',
1274 |                 cluster_name='test-cluster',
1275 |             )
1276 | 
1277 |             # Verify the result
1278 |             assert result.isError
1279 |             assert len(result.content) == 1
1280 |             assert result.content[0].type == 'text'
1281 |             assert 'Error in manage_eks_stacks' in result.content[0].text
1282 |             assert 'Unexpected error' in result.content[0].text
1283 | 
1284 |         # Test case 2: General exception in _deploy_stack
1285 |         with patch.object(handler, '_deploy_stack', side_effect=Exception('Unexpected error')):
1286 |             # Call the manage_eks_stacks method with deploy operation
1287 |             result = await handler.manage_eks_stacks(
1288 |                 ctx=mock_ctx,
1289 |                 operation='deploy',
1290 |                 template_file='/path/to/template.yaml',
1291 |                 cluster_name='test-cluster',
1292 |             )
1293 | 
1294 |             # Verify the result
1295 |             assert result.isError
1296 |             assert len(result.content) == 1
1297 |             assert result.content[0].type == 'text'
1298 |             assert 'Error in manage_eks_stacks' in result.content[0].text
1299 |             assert 'Unexpected error' in result.content[0].text
1300 | 
1301 |         # Test case 3: General exception in _describe_stack
1302 |         with patch.object(handler, '_describe_stack', side_effect=Exception('Unexpected error')):
1303 |             # Call the manage_eks_stacks method with describe operation
1304 |             result = await handler.manage_eks_stacks(
1305 |                 ctx=mock_ctx,
1306 |                 operation='describe',
1307 |                 cluster_name='test-cluster',
1308 |             )
1309 | 
1310 |             # Verify the result
1311 |             assert result.isError
1312 |             assert len(result.content) == 1
1313 |             assert result.content[0].type == 'text'
1314 |             assert 'Error in manage_eks_stacks' in result.content[0].text
1315 |             assert 'Unexpected error' in result.content[0].text
1316 | 
1317 |         # Test case 4: General exception in _delete_stack
1318 |         with patch.object(handler, '_delete_stack', side_effect=Exception('Unexpected error')):
1319 |             # Call the manage_eks_stacks method with delete operation
1320 |             result = await handler.manage_eks_stacks(
1321 |                 ctx=mock_ctx,
1322 |                 operation='delete',
1323 |                 cluster_name='test-cluster',
1324 |             )
1325 | 
1326 |             # Verify the result
1327 |             assert result.isError
1328 |             assert len(result.content) == 1
1329 |             assert result.content[0].type == 'text'
1330 |             assert 'Error in manage_eks_stacks' in result.content[0].text
1331 |             assert 'Unexpected error' in result.content[0].text
1332 | 
```
Page 506/537FirstPrevNextLast